CloudFormation 模板中的引用模块资源 - AWS CloudFormation

CloudFormation 模板中的引用模块资源

在 CloudFormation 模板中,您经常需要根据一个资源的名称或属性来设置另一个资源的属性。有关更多信息,请参阅 引用资源

要引用 CloudFormation 模板中某个模块内包含的资源,必须将以下两个逻辑名称组合在一起:

  • 您在模板中包含模块时为模块本身指定的逻辑名称。

  • 该模块内特定资源的逻辑名称。

您可以将这两个逻辑名称组合在一起,两者之间可以使用也可以不使用句点 (.)。例如,如果模块的逻辑名称为 MyModule,而资源的逻辑名称为 MyBucket,则可以将该资源称为 MyModule.MyBucketMyModuleMyBucket

要查找模块内资源的逻辑名称,您可以查阅该模块的架构(该架构可在 CloudFormation 注册表中找到),也可以使用 DescribeType 操作。架构列出了属于该模块的所有资源及其逻辑名称。

获得完整的逻辑名称后,您可以使用 GetAttRef 之类的 CloudFormation 函数来访问模块资源上的属性值。

例如,您有一个 My::S3::SampleBucket::MODULE 模块,其中包含逻辑名称为 S3BucketAWS::S3::Bucket 资源。要使用 Ref 函数引用此存储桶的名称,请将模板中模块的名称(MyBucket)与模块中资源的逻辑名称(S3Bucket)组合使用。完整的逻辑名称为 MyBucket.S3BucketMyBucketS3Bucket

示例 模板

以下示例模板使用 My::S3::SampleBucket::MODULE 模块创建 S3 存储桶。它还会创建一个 Amazon SQS 队列,并将其名称设置为与模块中的存储桶名称相同。此外,该模板还输出所创建的 S3 存储桶的 Amazon 资源名称(ARN)。

# Template that uses My::S3::SampleBucket::MODULE Parameters: BucketName: Description: Name for your sample bucket Type: String Resources: MyBucket: Type: My::S3::SampleBucket::MODULE Properties: BucketName: !Ref BucketName exampleQueue: Type: AWS::SQS::Queue Properties: QueueName: !Ref MyBucket.S3Bucket Outputs: BucketArn: Value: !GetAtt MyBucket.S3Bucket.Arn