使用参数指定模块值
在 CloudFormation 中,您可以通过在堆栈创建或更新期间提供输入值,从而使用模板参数来自定义堆栈。这些参数允许您根据需要更改堆栈的某些方面。有关定义模板参数的更多信息,请参阅 CloudFormation 模板 Parameters 语法。
同样,模块也可以有参数。这些模块参数使您能够从使用自定义值的模板(或其他模块)向模块输入自定义值。然后,模块可以使用这些自定义值来设置其所包含资源的属性值。
您还可以定义设置模块属性的模板参数,以便您可以输入在堆栈操作时传递给模块的值。
如果模块包含具有自己的模块参数的嵌套模块,则您可以:
-
直接在父模块中为嵌套模块的参数指定值。
-
在父模块中定义相应的模块参数,使嵌套模块的参数能够由包含父模块的模板(或模块)来设置。
使用模板参数指定模块参数值
以下示例展示了如何定义将值传递给模块的模板参数。
包含 My::S3::SampleBucket::MODULE
的此模板定义了模板参数 BucketName
,该参数使用户能够在堆栈操作期间指定 S3 存储桶名称。
# Template containing 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
在父模块中指定子模块中资源的属性
以下示例展示了如何在嵌套在另一个模块中的模块中指定参数值。
第一个模块 My::S3::SampleBucketPrivate::MODULE
将是子模块。该模块定义了两个参数:BucketName
和 AccessControl
。为这些参数指定的值用于指定模块所包含的 AWS::S3::Bucket
资源的 BucketName
和 AccessControl
属性。以下为 My::S3::SampleBucketPrivate::MODULE
的模板片段。
# My::S3::SampleBucketPrivate::MODULE AWSTemplateFormatVersion: 2010-09-09 Description: A sample S3 Bucket with Versioning and DeletionPolicy. Parameters: BucketName: Description: Name for the bucket Type: String AccessControl: Description: AccessControl for the bucket Type: String Resources: S3Bucket: Type: 'AWS::S3::Bucket' Properties: BucketName: !Ref BucketName AccessControl: !Ref AccessControl DeletionPolicy: Retain VersioningConfiguration: Status: Enabled
接下来,上一个模块嵌套在父模块 My::S3::SampleBucket::MODULE
中。父模块 My::S3::SampleBucket::MODULE
通过以下方式设置子模块参数:
-
其将
My::S3::SampleBucketPrivate::MODULE
的AccessControl
参数设置为Private
。 -
对于
BucketName
,其定义了一个模块参数,该参数将允许存储桶名称在包含My::S3::SampleBucket::MODULE
的模板(或模块)中进行指定。
# My::S3::SampleBucket::MODULE AWSTemplateFormatVersion: 2010-09-09 Description: A sample S3 Bucket. With Private AccessControl. Parameters: BucketName: Description: Name for your sample bucket Type: String Resources: MyBucket: Type: 'My::S3::SampleBucketPrivate::MODULE' Properties: BucketName: !Ref BucketName AccessControl: Private
为模块参数指定约束
模块参数不支持约束强制执行。要对模块参数执行约束检查,请创建具有所需约束的模板参数,然后在模块参数中引用该模板参数。有关定义模板参数的更多信息,请参阅 CloudFormation 模板 Parameters 语法。