使用参数指定模块值 - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用参数指定模块值

在 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 将是子模块。该模块定义了两个参数:BucketNameAccessControl。为这些参数指定的值用于指定模块所包含的 AWS::S3::Bucket 资源的 BucketNameAccessControl 属性。以下为 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::MODULEAccessControl 参数设置为 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 语法