データソースリソース (DataSource) は、Alibaba Cloud サービスのリソースデータをクエリするために使用します。クエリでは、単一のリソースまたは複数のリソースをリストとして返すことができます。このトピックでは、テンプレート内でデータソースリソース (DataSource) の出力変数を参照する方法について説明します。
単一リソースのクエリ結果
この例では、単一の ApsaraDB RDS インスタンス (DATASOURCE::RDS::DBInstance) をクエリし、内部ネットワーク接続用のポートを取得します。
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
DBInstanceId:
Type: String
AssociationProperty: ALIYUN::RDS::Instance::InstanceId
Resources:
ExtensionDataSource:
Properties:
DBInstanceId:
Ref: DBInstanceId
Type: DATASOURCE::RDS::DBInstance
Connection:
Type: ALIYUN::RDS::Connection
Properties:
DBInstanceId:
Ref: DBInstanceId
ConnectionStringPrefix: test1
Port:
Fn::GetAtt:
- ExtensionDataSource
- Port
Outputs:
Port:
Description: 内部ネットワーク経由でインスタンスに接続するために使用するポート。
Value:
Fn::GetAtt:
- ExtensionDataSource
- Port
ConnectionString:
Description: 接続文字列
Value:
Fn::GetAtt:
- Connection
- ConnectionString複数リソースのクエリ結果
この例では、既存の vSwitch (DATASOURCE::VPC::VSwitches) をクエリし、返された vSwitch の CIDR ブロックに基づいてセキュリティグループのインバウンドルールを作成します。組み込み関数 Fn::Jq を使用して、VSwitches 出力から最初の vSwitch の CIDR ブロックを取得します。Jq 機能の詳細については、「Jqドキュメント」をご参照ください。
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
VpcId:
Type: String
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Description: Virtual Private Cloud コンソールで vpc- で始まる ID を見つけてください。
Label: 既存の VPC インスタンス ID
SecurityGroupId:
Type: String
AssociationProperty: ALIYUN::ECS::SecurityGroup::SecurityGroupId
AssociationPropertyMetadata:
VpcId: ${VpcId}
Default: ''
Resources:
ExtensionDataSource:
Type: DATASOURCE::VPC::VSwitches
Properties:
VpcId:
Ref: VpcId
SecurityGroupIngress:
Type: ALIYUN::ECS::SecurityGroupIngress
Properties:
IpProtocol: all
SecurityGroupId:
Ref: SecurityGroupId
NicType: intranet
SourceCidrIp:
Fn::Jq:
- First
- .[0].CidrBlock
- Fn::GetAtt:
- ExtensionDataSource
- VSwitches
PortRange: '-1/-1'
Outputs:
CidrBlock:
Description: CIDR ブロック。
Value:
Fn::Jq:
- First
- .[0].CidrBlock
- Fn::GetAtt:
- ExtensionDataSource
- VSwitches