CloudFormation 模板中的引用模块资源
在 CloudFormation 模板中,您经常需要根据一个资源的名称或属性来设置另一个资源的属性。有关更多信息,请参阅 引用资源。
要引用 CloudFormation 模板中某个模块内包含的资源,必须将以下两个逻辑名称组合在一起:
-
您在模板中包含模块时为模块本身指定的逻辑名称。
-
该模块内特定资源的逻辑名称。
您可以将这两个逻辑名称组合在一起,两者之间可以使用也可以不使用句点 (.)。例如,如果模块的逻辑名称为 MyModule
,而资源的逻辑名称为 MyBucket
,则可以将该资源称为 MyModule.MyBucket
或 MyModuleMyBucket
。
要查找模块内资源的逻辑名称,您可以查阅该模块的架构(该架构可在 CloudFormation 注册表中找到),也可以使用 DescribeType 操作。架构列出了属于该模块的所有资源及其逻辑名称。
获得完整的逻辑名称后,您可以使用 GetAtt
和 Ref
之类的 CloudFormation 函数来访问模块资源上的属性值。
例如,您有一个 My::S3::SampleBucket::MODULE
模块,其中包含逻辑名称为 S3Bucket
的 AWS::S3::Bucket
资源。要使用 Ref
函数引用此存储桶的名称,请将模板中模块的名称(MyBucket
)与模块中资源的逻辑名称(S3Bucket
)组合使用。完整的逻辑名称为 MyBucket.S3Bucket
或 MyBucketS3Bucket
。
示例 模板
以下示例模板使用 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