View a markdown version of this page

使用 AWS CloudFormation 公有注册表中的资源 - AWS Cloud Development Kit (AWS CDK) v2

这是 AWS CDK v2 开发者指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段,并于 2023 年 6 月 1 日终止支持。

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

使用 AWS CloudFormation 公有注册表中的资源

AWS CloudFormation 公有注册表可让您管理可在 AWS 账户中使用的公有和私有扩展,例如资源、模块和挂钩。您可以通过 CfnResource 构造在 AWS 云开发工具包 (AWS CDK) 应用程序中使用公有资源扩展。

要了解有关 AWS CloudFormation 公有注册表的更多信息,请参阅《AWS CloudFormation 用户指南》中的使用 AWS CloudFormation 注册表

AWS 发布的所有公有扩展均可供所有区域中的所有账户使用,无需采取任何操作。但是,您必须在要使用的每个账户和区域中激活想要使用的每个第三方扩展。

注意

当您将 AWS CloudFormation 与第三方资源类型一起使用时,将会产生费用。费用取决于您每月运行的处理程序操作数量和处理程序操作持续时间。有关完整的详细信息,请参阅 CloudFormation 定价

要了解有关公有扩展的更多信息,请参阅《AWS CloudFormation 用户指南》中的在 CloudFormation 中使用公有扩展

激活账户和区域中的第三方资源

AWS 发布的扩展不需要激活。这些扩展在每个账户和区域中始终可用。您可以通过 AWS 管理控制台、AWS 命令行界面或部署特殊 AWS CloudFormation 资源来激活第三方扩展。

通过 AWS 管理控制台激活第三方扩展或查看可用的资源
激活 cfn 扩展
  1. 登录您要使用该扩展的 AWS 账户,然后切换到要使用该扩展的区域。

  2. 通过服务菜单导航到 CloudFormation 控制台。

  3. 在导航栏上选择公有扩展,然后激活发布者下的第三方单选按钮。将显示可用的第三方公有扩展列表。(您也可以选择 AWS 来查看 AWS 发布的公有扩展列表,但无需将其激活。)

  4. 浏览该列表并找到您想要激活的扩展。或者搜索该扩展,然后激活扩展卡右上角的单选按钮。

  5. 选择列表顶部的激活按钮,激活所选的扩展。将显示扩展的激活页面。

  6. 激活页面中,您可以覆盖扩展的默认名称并指定执行角色和日志配置。您还可以选择是否在发布新版本时自动更新扩展。根据需要设置这些选项后,请选择页面底部的激活扩展

使用 AWS CLI 激活第三方扩展
  • 使用 activate-type 命令。在指定位置替换想要使用的自定义类型的 ARN。

    以下是示例:

    aws cloudformation activate-type --public-type-arn <public_extension_ARN> --auto-update-activated
通过 CloudFormation 或 CDK 激活第三方扩展
  1. 部署类型为 AWS::CloudFormation::TypeActivation 的资源并指定以下属性:

    1. TypeName:类型的名称,例如 AWSQS::EKS::Cluster

    2. MajorVersion:您想要的扩展的主要版本号。如果您想要最新版本,则省略。

    3. AutoUpdate:是否在发布者发布新的次要版本时自动更新此扩展。(主要版本更新需要显式更改 MajorVersion 属性。)

    4. ExecutionRoleArn:此扩展将在其下运行的 IAM 角色的 ARN。

    5. LoggingConfig:扩展的日志配置。

    CDK 可使用 CfnResource 构造来部署 TypeActivation 资源。下一节中将显示实际扩展中的应用。

将 AWS CloudFormation 公有注册表中的资源添加到您的 CDK 应用程序

使用 CfnResource 构造将 AWS CloudFormation 公有注册表中的资源包含在您的应用程序中。此构造位于 CDK 的 aws-cdk-lib 模块中。

例如,假设有一个名为 MY::S5::UltimateBucket 的公有资源,您想要在 AWS CDK 应用程序中进行使用。此资源具有一个属性:存储桶名称。相应的 CfnResource 实例化如下所示。

TypeScript
const ubucket = new CfnResource(this, 'MyUltimateBucket', { type: 'MY::S5::UltimateBucket::MODULE', properties: { BucketName: 'UltimateBucket' } });
JavaScript
const ubucket = new CfnResource(this, 'MyUltimateBucket', { type: 'MY::S5::UltimateBucket::MODULE', properties: { BucketName: 'UltimateBucket' } });
Python
ubucket = CfnResource(self, "MyUltimateBucket", type="MY::S5::UltimateBucket::MODULE", properties=dict( BucketName="UltimateBucket"))
Java
CfnResource.Builder.create(this, "MyUltimateBucket") .type("MY::S5::UltimateBucket::MODULE") .properties(java.util.Map.of( // Map.of requires Java 9+ "BucketName", "UltimateBucket")) .build();
C#
new CfnResource(this, "MyUltimateBucket", new CfnResourceProps { Type = "MY::S5::UltimateBucket::MODULE", Properties = new Dictionary<string, object> { ["BucketName"] = "UltimateBucket" } });