

# 了解模块版本控制
<a name="module-versioning"></a>

CloudFormation 注册表充当存储库，您可以在其中注册和管理模块，以供在您的 AWS 账户和区域内使用。您可以在您的账户和区域内注册来自各种来源的模块，包括 AWS、第三方发布者和您自己的自定义扩展。有关更多信息，请参阅 [通过 CloudFormation 注册表管理扩展](registry.md)。

模块可以有不同的版本，因此您可以指定要使用的模块版本。当您需要更新或修改模块而不破坏依赖该模块的现有堆栈时，此版本控制功能特别有用。

使用模块的多个版本时，请注意以下事项：
+ 在堆栈操作期间，CloudFormation 会使用当前在执行堆栈操作的 AWS 账户和区域中注册为默认版本的模块版本。包括嵌套在其他模块中的模块。

  因此，请注意，如果您在不同账户或区域中将同一模块的不同版本注册为默认版本，则使用同一个模板可能会导致不同的结果。
+ 在堆栈操作期间，CloudFormation 会使用当前在执行堆栈操作的 AWS 账户和区域中注册为默认版本的资源版本。这包括通过纳入模块生成的资源。
+ 更改模块的默认版本不会启动任何堆栈更新操作。但是，在您下次使用包含该模块的任何模板执行堆栈操作（例如堆栈更新）时，CloudFormation 将在操作中使用新的默认版本。

  但在指定了**使用以前的模板**选项的情况下执行堆栈更新时例外，如下所述。
+ 对于堆栈更新操作，如果您指定**使用以前的模板**选项，则 CloudFormation 会使用先前处理过的模板进行堆栈更新，不会针对您可能对模块作出的任何更改重新处理模块。
+ 为了保证结果统一，如果要在堆栈模板中纳入模块以用于堆栈集，则应确保在计划部署堆栈实例的所有账户和区域中将模块的同一版本设置为默认版本。这包括嵌套在其他模块中的模块。有关更多信息，请参阅 [使用 StackSets 跨账户和区域管理堆栈](what-is-cfnstacksets.md)。

## 激活第三方公共模块的要求
<a name="requirements-for-modules"></a>

要在您的账户和区域中成功激活第三方公有模块，模块中包含的每个第三方公有扩展（资源或模块）必须满足以下条件：
+ **扩展激活**：必须在您要使用扩展的账户和区域中激活该扩展。有关更多信息，请参阅 [使用 CloudFormation 注册表中的第三方公有扩展](registry-public.md)。
+ **别名注册**：如果模块中的扩展使用类型名称别名，则该扩展必须使用相同的类型名称别名在您的账户和区域中注册。有关更多信息，请参阅 [使用别名以引用扩展](registry-public.md#registry-public-enable-alias)。
+ **版本兼容性**：当前激活的扩展版本必须是模块中指定的该扩展支持的主要版本之一。

如果您没有激活正确的第三方公有扩展和扩展版本，CloudFormation 将使操作失败，并显示一条错误消息，其中列出在成功激活该模块之前需要激活的扩展和版本。