

這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護，並於 2023 年 6 月 1 日結束支援。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用來自 AWS CloudFormation Public Registry 的資源
<a name="use-cfn-public-registry"></a>

 AWS CloudFormation 公有登錄檔可讓您管理公有和私有擴充功能，例如可在 AWS 帳戶中使用的資源、模組和掛鉤。您可以在 AWS 雲端開發套件 (AWS 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) 建構模組使用公有資源延伸。

若要進一步了解 AWS CloudFormation 公有登錄檔，請參閱[AWS CloudFormation 使用者指南》中的使用 CloudFormation 登錄](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry.html)檔。 * AWS CloudFormation *

發佈的所有公有擴充 AWS 功能可供所有 區域中的所有帳戶使用，而無需您採取任何動作。不過，您必須在要使用的每個帳戶和區域中，啟用要使用的每個第三方延伸模組。

**注意**  
當您搭配第三方資源類型使用 AWS CloudFormation 時，會產生費用。費用是根據您每月執行的處理常式操作數目和處理常式操作持續時間而定。如需完整詳細資訊，請參閱 [CloudFormation 定價](https://aws.amazon.com/cloudformation/pricing/)。

若要進一步了解公有擴充功能，請參閱《[CloudFormation 使用者指南》中的在 CloudFormation 中使用公有擴充](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-public.html)功能 * AWS CloudFormation * 

## 在您的 帳戶和區域中啟用第三方資源
<a name="use-cfn-public-registry-activate"></a>

由 發佈的延伸 AWS 模組不需要啟用。它們一律可在每個帳戶和區域中使用。您可以透過 AWS 管理主控台、 AWS 命令列界面或部署 special AWS CloudFormation 資源來啟用第三方延伸模組。

 **若要透過 AWS 管理主控台啟用第三方延伸模組，或查看可用的資源**   

![啟用 cfn 延伸模組](http://docs.aws.amazon.com/zh_tw/cdk/v2/guide/images/activate-cfn-extension.png)


1. 登入您要使用延伸模組的 AWS 帳戶，然後切換到您要使用延伸模組的 區域。

1. 透過**服務**功能表導覽至 CloudFormation 主控台。

1. 選擇導覽列上的**公有擴充**功能，然後在**發布者**下啟用**第三方**選項按鈕。可用的第三方公有擴充功能清單隨即出現。（您也可以選擇** AWS **查看 發佈的公有擴充功能清單 AWS，雖然您不需要啟用這些擴充功能。)

1. 瀏覽清單並尋找您要啟用的擴充功能。或者，搜尋它，然後啟用擴充功能卡片右上角的選項按鈕。

1. 選擇清單頂端的**啟用**按鈕，以啟用選取的延伸模組。延伸模組的**啟用**頁面隨即出現。

1. 在**啟用**頁面中，您可以覆寫延伸模組的預設名稱，並指定執行角色和記錄組態。您也可以選擇是否要在發行新版本時自動更新延伸模組。當您視需要設定這些選項時，請在頁面底部選擇**啟用延伸**模組。

 **使用 CLI AWS 啟用第三方延伸模組**   
+ 使用 `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` - 延伸模組的記錄組態。

   您可以使用 [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) 建構模組，由 CDK 部署`TypeActivation`資源。這會在下一節中針對實際的延伸項目顯示。

## 從 AWS CloudFormation Public Registry 將資源新增至您的 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 Public Registry 的資源。此建構模組位於 CDK 的 `aws-cdk-lib`模組中。

例如，假設您想要在 AWS CDK 應用程式中使用名為 `MY::S5::UltimateBucket` 的公有資源。此資源需要一個屬性：儲存貯體名稱。對應的`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"
    }
});
```