数据源资源(DataSource)用于查询云服务的资源数据。数据源资源可以被其他资源引用,也可以在输出(Outputs)中被引用。数据源资源和普通资源除了作用不同,支持的功能(例如:引用、依赖、更新等)完全相同。

应用场景

将动态查询结果作为创建资源的输入

ROS根据指定的条件动态查询结果,然后将此结果作为创建其他资源的输入属性。

以下示例模板中指定了多个参数,用于查询参数取值列表,ROS将动态查询结果作为创建ECS实例的输入属性。

  • CPU核数和内存动态:用于查询可用的ECS实例规格列表,ROS默认选择列表中第一个规格创建ECS实例。
  • 镜像名称:用于动态查询镜像列表,ROS默认选择列表中第一个镜像ID创建ECS实例。
{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Parameters": {
    "ZoneId": {
      "Type": "String",
      "AssociationProperty": "ALIYUN::ECS::ZoneId"
    },
    "VpcId": {
      "Type": "String",
      "AssociationProperty": "ALIYUN::ECS::VPC::VPCId"
    },
    "VSwitchId": {
      "Type": "String",
      "AssociationProperty": "ALIYUN::ECS::VSwitch::VSwitchId",
      "AssociationPropertyMetadata": {
        "VpcId": "${VpcId}",
        "ZoneId": "${ZoneId}"
      }
    },
    "SecurityGroupId": {
      "Type": "String",
      "AssociationProperty": "ALIYUN::ECS::SecurityGroup::SecurityGroupId",
      "AssociationPropertyMetadata": {
        "VpcId": "${VpcId}"
      }
    }
  },
  "Resources": {
    "DS-RecommendInstanceTypes": {
      "Type": "DATASOURCE::ECS::RecommendInstanceTypes",
      "Properties": {
        "Cores": 1,
        "Memory": 1
      }
    },
    "DS-Images": {
      "Type": "DATASOURCE::ECS::Images",
      "Properties": {
        "ImageName": "CentOS8*",
        "InstanceType": {
          "Fn::Select": [0, { "Ref": "DS-RecommendInstanceTypes" }]
        }
      }
    },
    "Instance": {
      "Type": "ALIYUN::ECS::Instance",
      "Properties": {
        "InstanceName": "MyInstance",
        "ImageId": { "Fn::Select": [0, { "Ref": "DS-Images" }] },
        "InstanceType": {
          "Fn::Select": [0, { "Ref": "DS-RecommendInstanceTypes" }]
        },
        "ZoneId": {"Ref": "ZoneId"},
        "VSwitchId": {"Ref": "VSwitchId"},
        "SecurityGroupId": {"Ref": "SecurityGroupId"},
        "SystemDiskCategory": "cloud_efficiency"
      }
    }
  },
  "Outputs": {
    "InstanceId": {
        "Value": {"Ref": "Instance" }
    }
  }
}

模板说明:

  • 参数(Parameters)中定义了4个参数:ZoneIdVpcIdVSwitchIdSecurityGroupId。每个参数都配置了AssociationProperty,以便在ROS控制台的参数选择界面查询参数的取值列表。
  • 资源(Resources)中定义了3个资源,包含2个数据源资源和1个普通资源。
    • 逻辑ID为DS-RecommendInstanceTypes的数据源资源根据指定的1核1 G的条件,查询符合条件的ECS实例规格。
    • 逻辑ID为DS-Images的数据源资源使用{ "Fn::Select": [0, { "Ref": "DS-RecommendInstanceTypes" } }获取ECS实例规格列表中的第1个规格作为InstanceType输入,并指定镜像名称以CentOS开头,查询符合条件的镜像。
    • 逻辑ID为Instance的普通资源将ROS获取到的实例规格和镜像作为输入,创建ECS实例。
  • 输出(Outputs)中定义了1个输出变量InstanceId

在模板输出中呈现资源详情

在模板资源中创建数据源资源后,在模板输出中即可引用该数据源资源,以呈现资源详情。

以下示例模板中,创建VPC后,ROS将通过源资源查询VPC的详细数据,并在输出中呈现VPC详情。

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Resources": {
    "Vpc": {
      "Type": "ALIYUN::ECS::VPC",
      "Properties": {
        "VpcName": "MyVpc",
        "CidrBlock": "172.16.0.0/12"
      }
    },
    "DS-Vpcs": {
      "Type": "DATASOURCE::VPC::Vpcs",
      "Properties": {
        "VpcIds": [{ "Ref": "Vpc" }]
      }
    }
  },
  "Outputs": {
    "VpcData": {
      "Value": {
        "Fn::Select": [
          0,
          {
            "Fn::GetAtt": ["DS-Vpcs", "Vpcs"]
          }
        ]
      }
    }
  }
}

模板说明如下:

  • 资源(Resources)中定义了2个资源,包含1个普通资源和1个数据源资源。
    • 逻辑ID为Vpc的普通资源指定VPC名称和网段,用于创建1个VPC。
    • 逻辑ID为DS-Vpcs的数据源资源将已创建的VPC ID作为输入,查询VPC详情。
  • 输出(Outputs)中定义了1个输出变量VpcData,取值为数据源资源DS-VpcsVpcs属性值的第1个值。