

# 使用参数指定模块值
<a name="module-using-params"></a>

在 CloudFormation 中，您可以通过在堆栈创建或更新期间提供输入值，从而使用模板参数来自定义堆栈。这些参数允许您根据需要更改堆栈的某些方面。有关定义模板参数的更多信息，请参阅 [CloudFormation 模板 Parameters 语法](parameters-section-structure.md)。

同样，模块也可以有参数。这些模块参数使您能够从使用自定义值的模板（或其他模块）向模块输入自定义值。然后，模块可以使用这些自定义值来设置其所包含资源的属性值。

您还可以定义设置模块属性的模板参数，以便您可以输入在堆栈操作时传递给模块的值。

如果模块包含具有自己的模块参数的嵌套模块，则您可以：
+ 直接在父模块中为嵌套模块的参数指定值。
+ 在父模块中定义相应的模块参数，使嵌套模块的参数能够由包含父模块的模板（或模块）来设置。

## 使用模板参数指定模块参数值
<a name="module-using-params-example-1"></a>

以下示例展示了如何定义将值传递给模块的模板参数。

包含 `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
```

## 在父模块中指定子模块中资源的属性
<a name="module-using-params-example-2"></a>

以下示例展示了如何在嵌套在另一个模块中的模块中指定参数值。

第一个模块 `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
```

## 为模块参数指定约束
<a name="modules-using-parameters-constraints"></a>

模块参数不支持约束强制执行。要对模块参数执行约束检查，请创建具有所需约束的模板参数，然后在模块参数中引用该模板参数。有关定义模板参数的更多信息，请参阅 [CloudFormation 模板 Parameters 语法](parameters-section-structure.md)。