

# 使用 CloudFormation 私有注册表中的模块
<a name="modules-using"></a>

本主题介绍如何在 CloudFormation 模板中使用模块。将模块视为可以添加到模板中的预制资源包。

要使用模块，步骤如下：
+ **注册模块**：您在 CloudFormation 注册表中将模块注册为私有扩展。请确保模块已在您工作的 AWS 账户和区域注册。有关更多信息，请参阅 [CoudFormation 注册表概念](registry-concepts.md)。
+ **将其包含在模板中**：将模块添加到 CloudFormation 模板的 [Resources](resources-section-structure.md) 部分，就像处理其他资源一样。您还需要提供模块所需的所有属性。
+ **创建或更新堆栈**：当您启动堆栈操作时，CloudFormation 会生成一个已处理的模板，该模板将所有包含的模块解析为适当的资源。
+ **预览更改**：在进行更改之前，您可以使用更改集来查看将添加或更改哪些资源。有关更多信息，请参阅 [使用更改集更新 CloudFormation 堆栈](using-cfn-updating-stacks-changesets.md)。

参阅以下示例：您有一个包含资源和模块的模板。模板包含一个单独的资源 `ResourceA` 和一个模块 `ModuleParent`。该模块包含两个资源（`ResourceB` 和 `ResourceC`）以及一个嵌套模块 `ModuleChild`。`ModuleChild` 包含单个资源 `ResourceD`。如果您使用此模板创建堆栈，CloudFormation 会处理模板并将模块解析为适当的资源。生成的堆栈有四个资源：`ResourceA`、`ResourceB`、`ResourceC` 和 `ResourceD`。

![\[在堆栈操作期间，CloudFormation 会将堆栈模板中包含的两个模块解析为适当的四个资源。\]](http://docs.aws.amazon.com/zh_cn/AWSCloudFormation/latest/UserGuide/images/modules-resource-inclusion.png)


CloudFormation 会跟踪堆栈中的哪些资源是从模块创建而成的。您可以在给定堆栈的 **Events**（事件）、**Resources**（资源）和 **Drifts**（偏差）选项卡上查看此信息，更改集预览中也包含此信息。

模块与模板中的资源可以区别开来，因为它们遵循以下四部分命名约定，而不是资源所用的典型的三部分命名约定：

```
organization::service::use-case::MODULE
```