Fn::GetJsonValue

调用内部函数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

支持的函数