

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

# 使用 AWS CDK 層面和逃生艙自訂預設角色名稱
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches"></a>

*SANDEEP SINGH 和 Amazon Web Services 的 James Jacob*

## 總結
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-summary"></a>

此模式示範如何自訂 AWS Cloud Development Kit (AWS CDK) 建構模組所建立角色的預設名稱。如果您的組織根據命名慣例有特定限制，通常需要自訂角色名稱。例如，您的組織可能會設定需要角色名稱中特定字首的 AWS Identity and Access Management (IAM) [許可界限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)[或服務控制政策 (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。在這種情況下， AWS CDK 建構產生的預設角色名稱可能不符合這些慣例，而且可能需要修改。此模式透過使用 中的[逃生艙](https://docs.aws.amazon.com/cdk/v2/guide/cfn-layer.html)和[層面](https://docs.aws.amazon.com/cdk/v2/guide/aspects.html)來解決這些需求 AWS CDK。您可以使用逃生艙來定義自訂角色名稱，以及將自訂名稱套用至所有角色的層面，以確保遵守組織的政策和限制條件。

## 先決條件和限制
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-prereqs"></a>

**先決條件**
+ 作用中 AWS 帳戶
+ [AWS CDK 文件](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_prerequisites)中指定的先決條件

**限制**
+ Aspects 根據資源類型篩選資源，因此所有角色都共用相同的字首。如果您需要不同角色的不同角色字首，則需要根據其他屬性進行其他篩選。例如，若要將不同的字首指派給與 AWS Lambda 函數相關聯的角色，您可以依特定角色屬性或標籤進行篩選，並為 Lambda 相關角色套用一個字首，為其他角色套用不同的字首。
+ IAM 角色名稱的長度上限為 64 個字元，因此修改後的角色名稱必須修剪才能符合此限制。
+ 有些 AWS 服務 完全無法使用 AWS 區域。如需區域可用性，請參閱[AWS 服務 依區域](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。如需特定端點，請參閱[服務端點和配額](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)頁面，然後選擇服務的連結。

## Architecture
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-architecture"></a>

**目標技術堆疊 **
+ AWS CDK
+ AWS CloudFormation

**目標架構 **

![\[使用逃生艙和層面來自訂 AWS CDK 指派角色名稱的架構。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/c149d8d2-1da6-4680-ab0b-e5051b69688c/images/15e56ca5-f150-4522-b374-8ee2dcc655a9.png)

+  AWS CDK 應用程式包含一或多個堆疊，這些 CloudFormation 堆疊會經過合成並部署以管理 AWS 資源。
+ 若要修改未由第 2 層 (L2) 建構公開的 AWS CDK受管資源屬性，您可以使用逃生艙覆寫基礎 CloudFormation 屬性 （在此案例中為角色名稱），以及在 AWS CDK 堆疊合成程序期間將角色套用至 AWS CDK 應用程式中的所有資源。

## 工具
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-tools"></a>

**AWS 服務**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) 是一種軟體開發架構，可協助您在程式碼中定義和佈建 AWS 雲端 基礎設施。
+ [AWS CDK Command Line Interface (AWS CDK CLI)](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) （也稱為 AWS CDK Toolkit) 是一種命令列雲端開發套件，可協助您與 AWS CDK 應用程式互動。CLI `cdk`命令是與您的 AWS CDK 應用程式互動的主要工具。它會執行您的應用程式、查詢您定義的應用程式模型，以及產生和部署由 產生的 CloudFormation 範本 AWS CDK。
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 可協助您設定 AWS 資源、快速一致地佈建資源，以及在整個 AWS 帳戶 和 區域的生命週期中管理資源。

**程式碼儲存庫**

此模式的原始程式碼和範本可在 GitHub [CDK Aspects 覆寫](https://github.com/aws-samples/cdk-aspects-override)儲存庫中使用。

## 最佳實務
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-best-practices"></a>

請參閱** **AWS 規範指引網站上的[使用 TypeScript AWS CDK 中的 建立 IaC 專案的最佳實務](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-cdk-typescript-iac/introduction.html)。

## 史詩
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-epics"></a>

### 安裝 AWS CDK CLI
<a name="install-the-cdk-cli"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 安裝 AWS CDK CLI。 | 若要全域安裝 AWS CDK CLI，請執行 命令：<pre>npm install -g aws-cdk</pre> | AWS DevOps | 
| 驗證版本。 | 執行 命令：<pre>cdk --version</pre>確認您使用的是 CLI 第 2 AWS CDK 版。 | AWS DevOps | 
| 引導 AWS CDK 環境。 | 部署 CloudFormation 範本之前，請先準備 AWS 區域 您要使用的 帳戶和 。執行 命令：<pre>cdk bootstrap <account>/<Region></pre>如需詳細資訊，請參閱 AWS 文件中的[AWS CDK 引導](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)。 | AWS DevOps | 

### 部署 AWS CDK 應用程式以示範如何使用 面向
<a name="deploy-the-cdk-app-to-demonstrate-the-use-of-aspects"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 設定專案。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches.html) | AWS DevOps | 
| 部署具有 指派之預設角色名稱的堆疊 AWS CDK。 | 部署兩個包含 Lambda 函數及其相關角色的 CloudFormation 堆疊 (`ExampleStack1` 和 `ExampleStack2`)：<pre>npm run deploy:ExampleAppWithoutAspects</pre>程式碼不會明確傳遞角色屬性，因此角色名稱將由 建構 AWS CDK。如需輸出範例，請參閱[其他資訊](#customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-additional)一節。 | AWS DevOps | 
| 使用 層面部署堆疊。 | 在此步驟中，您會將字首新增至 AWS CDK 專案中部署的所有 IAM 角色，以套用強制執行角色名稱慣例的 面向。在 `lib/aspects.ts`檔案中定義 面向。方面使用逃生艙，透過新增字首來覆寫角色名稱。面向會套用至 `bin/app-with-aspects.ts`檔案中的堆疊。此範例中使用的角色名稱字首為 `dev-unicorn`。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches.html)如需輸出範例，請參閱[其他資訊](#customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-additional)一節。 | AWS DevOps | 

### 清除資源
<a name="clean-up-resources"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 刪除您的 AWS CloudFormation 堆疊。 | 使用此模式後，請執行下列命令來清除資源，以避免產生額外費用：<pre>cdk destroy --all -f && cdk --app npx ts-node bin/app-with-aspects.ts' destroy --all -f </pre> | AWS DevOps | 

## 疑難排解
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-troubleshooting"></a>


| 問題 | 解決方案 | 
| --- | --- | 
| 您使用 時遇到問題 AWS CDK。 | 請參閱 AWS CDK 文件中的[疑難排解 AWS CDK 常見問題](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)。 | 

## 相關資源
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-resources"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk/)
+ [AWS CDK 文件](https://docs.aws.amazon.com/cdk/)
+ [AWS CDK 在 GitHub 上](https://github.com/aws/aws-cdk)
+ [逃生艙](https://docs.aws.amazon.com/cdk/v2/guide/cfn-layer.html)
+ [Aspects 和 AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/aspects.html)

## 其他資訊
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-additional"></a>

**由 CloudFormation 在沒有 層面的情況下建立的角色名稱**

```
Outputs:
ExampleStack1WithoutAspects.Function1RoleName = example-stack1-without-as-Function1LambdaFunctionSe-y7FYTY6FXJXA
ExampleStack1WithoutAspects.Function2RoleName = example-stack1-without-as-Function2LambdaFunctionSe-dDZV4rkWqWnI
...

Outputs:
ExampleStack2WithoutAspects.Function3RoleName = example-stack2-without-as-Function3LambdaFunctionSe-ygMv49iTyMq0
```

** CloudFormation 使用 面向建立的角色名稱**

```
Outputs:
ExampleStack1WithAspects.Function1RoleName = dev-unicorn-Function1LambdaFunctionServiceRole783660DC
ExampleStack1WithAspects.Function2RoleName = dev-unicorn-Function2LambdaFunctionServiceRole2C391181
...

Outputs:
ExampleStack2WithAspects.Function3RoleName = dev-unicorn-Function3LambdaFunctionServiceRole4CAA721C
```