數(shù)據(jù)源資源(DataSource)用于查詢?cè)品?wù)的資源數(shù)據(jù)。數(shù)據(jù)源資源可以被其他資源引用,也可以在輸出(Outputs)中被引用。數(shù)據(jù)源資源和普通資源除了作用不同,支持的功能(例如:引用、依賴、更新等)完全相同。

應(yīng)用場(chǎng)景

將動(dòng)態(tài)查詢結(jié)果作為創(chuàng)建資源的輸入

ROS根據(jù)指定的條件動(dòng)態(tài)查詢結(jié)果,然后將此結(jié)果作為創(chuàng)建其他資源的輸入屬性。

以下示例模板中指定了多個(gè)參數(shù),用于查詢參數(shù)取值列表,ROS將動(dòng)態(tài)查詢結(jié)果作為創(chuàng)建ECS實(shí)例的輸入屬性。

  • CPU核數(shù)和內(nèi)存動(dòng)態(tài):用于查詢可用的ECS實(shí)例規(guī)格列表,ROS默認(rèn)選擇列表中第一個(gè)規(guī)格創(chuàng)建ECS實(shí)例。
  • 鏡像名稱:用于動(dòng)態(tài)查詢鏡像列表,ROS默認(rèn)選擇列表中第一個(gè)鏡像ID創(chuàng)建ECS實(shí)例。
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

模板說(shuō)明:

  • 參數(shù)(Parameters)中定義了4個(gè)參數(shù):ZoneIdVpcIdVSwitchIdSecurityGroupId。每個(gè)參數(shù)都配置了AssociationProperty,以便在ROS控制臺(tái)的參數(shù)選擇界面查詢參數(shù)的取值列表。
  • 資源(Resources)中定義了3個(gè)資源,包含2個(gè)數(shù)據(jù)源資源和1個(gè)普通資源。
    • 邏輯ID為DS-RecommendInstanceTypes的數(shù)據(jù)源資源根據(jù)指定的1核1 G的條件,查詢符合條件的ECS實(shí)例規(guī)格。
    • 邏輯ID為DS-Images的數(shù)據(jù)源資源使用{ "Fn::Select": [0, { "Ref": "DS-RecommendInstanceTypes" } }獲取ECS實(shí)例規(guī)格列表中的第1個(gè)規(guī)格作為InstanceType輸入,并指定鏡像名稱以CentOS開頭,查詢符合條件的鏡像。
    • 邏輯ID為Instance的普通資源將ROS獲取到的實(shí)例規(guī)格和鏡像作為輸入,創(chuàng)建ECS實(shí)例。
  • 輸出(Outputs)中定義了1個(gè)輸出變量InstanceId

在模板輸出中呈現(xiàn)資源詳情

在模板資源中創(chuàng)建數(shù)據(jù)源資源后,在模板輸出中即可引用該數(shù)據(jù)源資源,以呈現(xiàn)資源詳情。

以下示例模板中,創(chuàng)建VPC后,ROS將通過(guò)源資源查詢VPC的詳細(xì)數(shù)據(jù),并在輸出中呈現(xiàn)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

模板說(shuō)明如下:

  • 資源(Resources)中定義了2個(gè)資源,包含1個(gè)普通資源和1個(gè)數(shù)據(jù)源資源。
    • 邏輯ID為Vpc的普通資源指定VPC名稱和網(wǎng)段,用于創(chuàng)建1個(gè)VPC。
    • 邏輯ID為DS-Vpcs的數(shù)據(jù)源資源將已創(chuàng)建的VPC ID作為輸入,查詢VPC詳情。
  • 輸出(Outputs)中定義了1個(gè)輸出變量VpcData,取值為數(shù)據(jù)源資源DS-VpcsVpcs屬性值的第1個(gè)值。