調用內建函式Fn::GetJsonValue,解析JSON字串,擷取指定的Key在第一層所對應的值。
函式宣告
JSON
{ "Fn::GetJsonValue": [ "key", "json_string" ] }
YAML
完整函數的文法。
Fn::GetJsonValue: - key - json_string
縮寫形式。
!GetJsonValue [key, json_string]
參數資訊
key
:索引值。json_string
:指定的需要解析的JSON字串。
使用樣本
WebServer2從WebServer執行個體執行完UserData返回的JSON字串中,擷取對應的值。
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