The built-in function Fn::GetJsonValue resolves a JSON string and queries the value of a key from the first layer.
Declaration
JSON
{ "Fn::GetJsonValue": [ "key", "json_string" ] }
YAML
Syntax for the full function name:
Fn::GetJsonValue: - key - json_string
Syntax for the short form:
!GetJsonValue [key, json_string]
Parameters
key
: the key value.json_string
: the JSON string that you want to resolve.
Examples
In the following example, the WebServer instance executes UserData and returns a JSON string. Then, the WebServer2 instance queries the key value from the string.
ROSTemplateFormatVersion: '2015-09-01'
Resources:
WebServer:
Type: ALIYUN::ECS::Instance
Properties:
ImageId: m-2ze45uwova5fedlu****
InstanceType: ecs.n1.medium
SecurityGroupId: sg-2ze7pxymaix640qr****
Password: Wenqiao****
IoOptimized: optimized
VSwitchId: vsw-2zei67xd9nhcqxzec****
VpcId: vpc-2zevx9ios1rszqv0a****
SystemDiskCategory: cloud_ssd
UserData:
Fn::Replace:
- ros-notify:
Fn::GetAtt:
- WaitConHandle
- CurlCli
- Fn::Join:
- ''
- - |
#!/bin/sh
- |
mkdir ~/test_ros
- |
print hello > ~/1.txt
- |
cmd="ros-notify -d '{\"id\" : \"1\", \"data\" : [\"1111\", \"2222\"]}'"
- |
eval $cmd
PrivateIpAddress: 192.168.XX.XX
HostName: userdata-1
WaitConHandle:
Type: ALIYUN::ROS::WaitConditionHandle
WaitCondition:
Type: ALIYUN::ROS::WaitCondition
Properties:
Handle:
Ref: WaitConHandle
Timeout: 900
WebServer2:
Type: ALIYUN::ECS::Instance
Properties:
ImageId: m-2ze45uwova5fedlu****
InstanceType: ecs.n1.medium
SecurityGroupId: sg-2ze7pxymaix640qr****
Password: Wenqiao****
IoOptimized: optimized
VSwitchId: vsw-2zei67xd9nhcqxzec****
VpcId: vpc-2zevx9ios1rszqv0a****
SystemDiskCategory: cloud_ssd
UserData:
Fn::Join:
- ''
- - |
#!/bin/sh
- |
mkdir ~/test_ros
- |
echo hello > ~/1.txt
- server_1_token=
- !GetJsonValue
- '1 '
- !GetAtt WaitCondition.Data
- |+
PrivateIpAddress: 192.168.XX.XX
HostName: userdata-2
Outputs:
InstanceId:
Value: !GetAtt WebServer.InstanceId
PublicIp:
Value: !GetAtt WebServer.PublicIp