

# 使用 CloudFormation 模块创建可跨模板包含的可重复使用的资源配置
<a name="modules"></a>

*模块*是一种供您以透明、易管理和可重复的方式打包资源配置以便跨堆栈模板实现包含的方法。模块可以将常见服务配置和最佳实践封装为模块化、可自定义的构建基块，供您包含在堆栈模板中。模块使您能够将包含最佳实践、专家领域知识和可接受的指南（例如安全性、合规性、治理和行业法规）在内的资源配置纳入模板中，而无需深入了解资源实施的复杂性。

例如，网络领域专家可以创建一个包含遵守安全准则的内置安全组和入口/出口规则的模块。然后，您可以将该模块纳入到模板中，以便在堆栈中预置安全的网络基础架构，而无需花费时间弄清楚 VPC、子网、安全组和网关的工作方式。此外，由于模块具有版本控制，因此如果安全指南随时间而发生变化，模块作者可以创建包含这些更改的新版本模块。

在模板中使用模块的特点包括：
+ **可预测性** – 模块必须遵守其在 CloudFormation 注册表中注册的架构，这样在您将模块纳入到模板中后，您就知道该模块可以解析到哪些资源。
+ **可重用性** – 您可以在多个模板和账户中使用同一模块。
+ **可追溯性** – CloudFormation 可以保留堆栈中的哪些资源是从模块预配置的知识，使您能够轻松了解资源变化的来源。
+ **可管理性**：注册模块后，您可以通过 CloudFormation 注册表对其进行管理，包括版本控制以及账户和区域可用性。

模块可以包含：
+ 要从模块配置的一个或多个资源以及任何关联的数据，例如输出数据或条件。
+ 使您能够在使用模块时指定自定义值的任何模块参数。

有关开发模块的信息，请参阅《CloudFormation CLI User Guide》**中的 [Developing modules](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/modules.html)。

**Topics**
+ [使用模块时的注意事项](#module-considerations)
+ [了解模块版本控制](module-versioning.md)
+ [使用 CloudFormation 私有注册表中的模块](modules-using.md)
+ [使用参数指定模块值](module-using-params.md)
+ [CloudFormation 模板中的引用模块资源](module-ref-resources.md)

## 使用模块时的注意事项
<a name="module-considerations"></a>
+ 使用模块不收取任何额外费用。您只需为模块解析到堆栈中的资源付费。
+ CloudFormation 配额（例如堆栈中允许的最大资源数或模板正文的最大大小）适用于处理过的模板，无论该模板中包含的资源是否来自模块。有关更多信息，请参阅 [了解 CloudFormation 配额](cloudformation-limits.md)。
+ 您在堆栈级别指定的标签将分配给派生自模块的各个资源。
+ CloudFormation 处理模板时，在模块级别指定的帮助程序脚本不会传播到模块中包含的各个资源。
+ 模块中指定的输出将在模板级别传播到输出。

  将为每个输出分配一个逻辑 ID，该 ID 是模块逻辑名称和模块中定义的输出名称的拼接。有关更多信息，请参阅 [获取从已部署的 CloudFormation 堆栈导出的输出](using-cfn-stack-exports.md)。
+ 模块中指定的参数不会传播到模板级别的参数。

  但是，您可以创建引用模块级参数的模板级参数。有关更多信息，请参阅 [使用参数指定模块值](module-using-params.md)。