数据源资源(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个值。