

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS CDK アスペクトとエスケープハッチを使用してデフォルトのロール名をカスタマイズする
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches"></a>

*Amazon Web Services、SANDEEP SINGH、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 コンストラクトによって生成されるデフォルトのロール名は、これらの規則を満たさない場合があり、変更する必要がある場合があります。このパターンは、 AWS CDKで[エスケープハッチ](https://docs.aws.amazon.com/cdk/v2/guide/cfn-layer.html)と[アスペクト](https://docs.aws.amazon.com/cdk/v2/guide/aspects.html)を使用して、これらの要件に対処します。エスケープハッチを使用してカスタムロール名を定義し、アスペクトを使用して、組織のポリシーと制約を確実に順守するために、すべてのロールにカスタム名を適用します。

## 前提条件と制限
<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)で指定されている必須要件

**制限事項**
+ アスペクトはリソースタイプに基づいてリソースをフィルタリングするため、すべてのロールが同じ接頭語を共有します。ロールごとに異なる接頭語が必要な場合は、他のプロパティに基づく追加のフィルタリングが必要です。たとえば、 AWS Lambda 関数に関連付けられたロールに異なるプレフィックスを割り当てるには、特定のロール属性またはタグでフィルタリングし、Lambda 関連のロールには 1 つのプレフィックスを、他のロールには別のプレフィックスを適用できます。
+ 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)」ページを参照して、サービスのリンクを選択します。

## アーキテクチャ
<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/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/c149d8d2-1da6-4680-ab0b-e5051b69688c/images/15e56ca5-f150-4522-b374-8ee2dcc655a9.png)

+  AWS CDK アプリは 1 つ以上の 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 コマンドラインインターフェイス (AWS CDK CLI)](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) ( AWS CDK ツールキットとも呼ばれます) は、 AWS CDK アプリの操作に役立つコマンドラインクラウド開発キットです。CLI `cdk` コマンドは、 AWS CDK アプリを操作するための主要なツールです。アプリケーションを実行し、定義したアプリケーションモデルを調査し、 AWS CDKによって生成された CloudFormation テンプレートを作成して展開します。
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および リージョン全体のライフサイクルを通じてリソースを管理するのに役立ちます。

**コードリポジトリ**

このパターンのソースコードとテンプレートは GitHub 「[CDK-Aspects-Override](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>

### CLI AWS CDK のインストール
<a name="install-the-cdk-cli"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| CLI AWS CDK をインストールします。 | CLI AWS CDK をグローバルにインストールするには、 コマンドを実行します。<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>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| プロジェクトを準備する。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches.html) | AWS DevOps | 
|  AWS CDKによって指定されたデフォルトのロール名を使用してスタックを展開する。 | Lambda 関数とそれに関連するロールを含む 2 つの 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/ja_jp/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>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  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)」
+ [側面と 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
```