數據源資源(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個值。