使用 AWS CloudFormation 注册表 - AWS CloudFormation
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS CloudFormation 注册表

CloudFormation 注册表列出可以在您的 CloudFormation 账户中使用的私有和公有扩展 (AWS)。扩展是在 CloudFormation 注册表中注册的构件,它以原生方式增强了 CloudFormation 的功能。扩展可由 Amazon、APN 合作伙伴、Marketplace 卖家和开发者社区编写。扩展包括 CloudFormation 项目,例如资源类型和模块。

私有和公有扩展

私有扩展是指您显式注册以在 AWS 账户中使用的扩展。它们可能是您自己创建的扩展,也可能是与您共享的扩展。您可以使用 CloudFormation CLI(用于资源管理的开源工具)来创建私有扩展。有关更多信息,请参阅 CloudFormation 命令行界面用户指南

注意

在 CloudFormation 堆栈中使用私有资源类型(一种特定类型的扩展)会使您的账户产生费用。这是因为私有资源类型实施在资源创建、读取、更新、列出和删除操作期间运行的自定义逻辑。这不包括创建的资源产生的任何费用。有关更多信息,请参阅 AWS CloudFormation 定价

公有扩展是指由 AWS 提供的用于管理特定 AWS 服务资源的扩展。

在 CloudFormation 中注册扩展

要使用私有扩展(您自己开发的扩展或与您共享的类型),您必须先在要使用它们的账户和区域的 CloudFormation 中注册它们。注册扩展后,其会显示在该账户和区域的 CloudFormation 注册表中,您可以在堆栈模板中使用该扩展。

您可以使用 AWS CLI 的 register-type 命令或 CloudFormation CLI 的 submit 命令注册扩展。要使用 CloudFormation CLI 注册扩展,请参阅 CloudFormation CLI 用户指南中的注册扩展

用于注册资源类型的 IAM 权限

作为注册资源类型的一部分,您可以指定包含架构处理程序包的 S3 存储桶。此程序包包含要注册的资源类型的架构、事件处理程序和关联文件。注册资源类型的用户必须能够访问该 S3 存储桶中的架构处理程序包。也就是说,用户需要具有架构处理程序包的 GetObject 权限。

无论您使用 AWS CLI 的 register-type 命令还是 CloudFormation CLI 的 submit 命令,都是如此。

有关更多信息,请参阅 AWS Identity and Access Management 用户指南 中的 Amazon S3 的操作、资源和条件键

使用 AWS CLI 注册资源类型

  1. 找到包含要在您的账户中注册的资源提供程序的资源类型包的 S3 存储桶。

  2. 使用 register-type 命令在您的账户中注册资源提供程序:

    RegisterType 是一个异步操作并返回一个注册令牌,您可以使用该令牌跟踪注册请求进度。

    注意

    如果您的资源类型在其任何处理程序中调用 AWS API,您必须创建一个包含调用这些 AWS API 所需的权限的 IAM 执行角色,并在您的账户中预置该执行角色。然后,您可以使用 --execution-role-arn 参数指定该执行角色。接下来,CloudFormation 担任该执行角色,以便为您的资源类型提供相应的凭证。

    例如,以下命令在当前 AWS 账户中注册 My::Resource::Example 资源类型:

    aws cloudformation register-type --type-name My::Resource::Example --schema-handler-package [s3 object path] --type RESOURCE { "RegistrationToken": "f5525280-104e-4d35-bef5-8f1fexample" }
  3. 可选:将注册令牌与 describe-type-registration 命令一起使用以跟踪注册请求进度。

    在 CloudFormation 完成注册请求时,它将请求的进度状态设置为 COMPLETE

    以下示例使用上面的 RegisterType 命令返回的注册令牌以返回注册状态信息。

    aws cloudformation describe-type-registration --registration-token f5525280-104e-4d35-bef5-8f1fexample { "ProgressStatus": "COMPLETE", "TypeArn": "arn:aws:cloudformation:us-east-1:012345678910:type/resource/My-Resource-Example", "Description": "Deployment is currently in DEPLOY_STAGE of status COMPLETED; ", "TypeVersionArn": "arn:aws:cloudformation:us-east-1:012345678910:type/resource/My-Resource-Example/00000001" }

指定要使用的扩展版本

随着时间的推移,您可能会注册同一扩展的多个版本。您可以指定要用于 CloudFormation 操作的扩展版本。

使用 AWS CLI 指定要使用的扩展版本

  • 使用 set-type-default-version 命令指定用于您账户中 CloudFormation 操作的扩展版本。

    例如,以下命令将当前账户的 My::Resource::Example 资源类型的默认版本设置为 00000003

    aws cloudformation set-type-default-version --type RESOURCE --type-name My::Resource::Example --version-id 00000003

在 CloudFormation 中查看已注册的扩展

在账户中注册扩展后,您可以在 CloudFormation 控制台中查看该扩展的详细信息。私有扩展显示在 CloudFormation 注册表的私有部分中。

在 CloudFormation 控制台中查看已注册的扩展的方法

  1. AWS CloudFormation 控制台中,从 CloudFormation 导航窗格的 CloudFormation 注册表下选择适当的扩展。例如,选择资源类型模块

  2. 选择 Public (公有)Private (私有)

在 AWS Config 中记录资源类型

您可以指定 AWS Config 自动跟踪您的私有资源类型,并将对这些资源的更改作为配置项 记录。这使您能够查看这些私有资源类型的配置历史记录,并编写 Config 规则以验证配置最佳实践。

要让 AWS Config 自动跟踪您的私有资源类型,请执行以下操作:

  • 通过 CloudFormation 管理资源。这包括通过 CloudFormation 执行所有资源创建、更新和删除操作。

    注意

    如果您使用 IAM 角色执行堆栈操作,则该 IAM 角色必须有权调用以下 AWS Config 操作:

  • 配置 AWS Config 以记录所有资源类型。有关更多信息,请参阅 AWS Config 开发人员指南 中的记录第三方资源的配置

    注意

    如果私有资源包含同时定义为必需 只写的属性,Config 不支持记录这些私有资源。

    根据设计,定义为只写的资源属性不会在用于创建 Config 配置项的架构中返回。因此,包含定义为只写和必需的属性将导致配置项创建失败,因为必需的属性不存在。要查看用于创建配置项的架构,您可以查看 DescribeType 操作的 schema 属性。

有关配置项的更多信息,请参阅 AWS Config 开发人员指南 中的配置项

防止在配置项目中记录敏感属性

您的资源类型可能包含您视为敏感信息(如密码、密钥或其他敏感数据)的属性,您不希望在配置项目中记录这些属性。要防止在配置项目中记录属性,您可以将该属性包括在资源类型架构的 writeOnlyproperties 列表中。作为 writeOnlyproperties 列出的资源属性可由用户指定,但不会由 readlist 请求返回。

有关更多信息,请参阅 CloudFormation 命令行界面用户指南 中的资源提供程序架构