

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

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

# 使用 AWS CloudFormation 公有注册表中的资源
<a name="use-cfn-public-registry"></a>

AWS CloudFormation 公有注册表可让您管理可在 AWS 账户中使用的公有和私有扩展，例如资源、模块和挂钩。您可以通过 [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnResource.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnResource.html) 构造在 AWS 云开发工具包 (AWS CDK) 应用程序中使用公有资源扩展。

要了解有关 AWS CloudFormation 公有注册表的更多信息，请参阅《AWS CloudFormation 用户指南》**中的[使用 AWS CloudFormation 注册表](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry.html)。

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

**注意**  
当您将 AWS CloudFormation 与第三方资源类型一起使用时，将会产生费用。费用取决于您每月运行的处理程序操作数量和处理程序操作持续时间。有关完整的详细信息，请参阅 [CloudFormation 定价](https://aws.amazon.com/cloudformation/pricing/)。

要了解有关公有扩展的更多信息，请参阅《AWS CloudFormation 用户指南》**中的[在 CloudFormation 中使用公有扩展](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-public.html) 

## 激活账户和区域中的第三方资源
<a name="use-cfn-public-registry-activate"></a>

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

 **通过 AWS 管理控制台激活第三方扩展或查看可用的资源**   

![激活 cfn 扩展](http://docs.aws.amazon.com/zh_cn/cdk/v2/guide/images/activate-cfn-extension.png)


1. 登录您要使用该扩展的 AWS 账户，然后切换到要使用该扩展的区域。

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

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

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

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

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

 **使用 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`。

   1.  `MajorVersion`：您想要的扩展的主要版本号。如果您想要最新版本，则省略。

   1.  `AutoUpdate`：是否在发布者发布新的次要版本时自动更新此扩展。（主要版本更新需要显式更改 `MajorVersion` 属性。）

   1.  `ExecutionRoleArn`：此扩展将在其下运行的 IAM 角色的 ARN。

   1.  `LoggingConfig`：扩展的日志配置。

   CDK 可使用 [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnResource.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnResource.html) 构造来部署 `TypeActivation` 资源。下一节中将显示实际扩展中的应用。

## 将 AWS CloudFormation 公有注册表中的资源添加到您的 CDK 应用程序
<a name="use-cfn-public-registry-add"></a>

使用 [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnResource.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnResource.html) 构造将 AWS CloudFormation 公有注册表中的资源包含在您的应用程序中。此构造位于 CDK 的 `aws-cdk-lib` 模块中。

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

**Example**  

```
const ubucket = new CfnResource(this, 'MyUltimateBucket', {
    type: 'MY::S5::UltimateBucket::MODULE',
    properties: {
           BucketName: 'UltimateBucket'
    }
});
```

```
const ubucket = new CfnResource(this, 'MyUltimateBucket', {
    type: 'MY::S5::UltimateBucket::MODULE',
    properties: {
           BucketName: 'UltimateBucket'
    }
});
```

```
ubucket = CfnResource(self, "MyUltimateBucket",
            type="MY::S5::UltimateBucket::MODULE",
            properties=dict(
                BucketName="UltimateBucket"))
```

```
CfnResource.Builder.create(this, "MyUltimateBucket")
	.type("MY::S5::UltimateBucket::MODULE")
	.properties(java.util.Map.of(    // Map.of requires Java 9+
	    "BucketName", "UltimateBucket"))
	.build();
```

```
new CfnResource(this, "MyUltimateBucket", new CfnResourceProps
{
    Type = "MY::S5::UltimateBucket::MODULE",
    Properties = new Dictionary<string, object>
    {
        ["BucketName"] = "UltimateBucket"
    }
});
```