AWS CDK アスペクトとエスケープハッチを使用してデフォルトのロール名をカスタマイズする - AWS 規範ガイダンス

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

AWS CDK アスペクトとエスケープハッチを使用してデフォルトのロール名をカスタマイズする

作成者 SANDEEP SINGH (AWS) と James Jacob (AWS)

コードリポジトリ: cdk-aspects-override-example

環境:本稼働

テクノロジー: インフラストラクチャ DevOps、管理とガバナンス

AWS サービス: AWS CDK、AWS CloudFormation、AWSLambda

[概要]

このパターンは、 AWS Cloud Development Kit (AWS CDK) コンストラクトによって作成されるロールのデフォルト名をカスタマイズする方法を示しています。組織で命名規則に基づいて特定の制約がある場合は、多くの場合、ロール名のカスタマイズが必要です。例えば、組織では、ロール名に特定のプレフィックスを必要とする AWS Identity and Access Management (IAM) アクセス許可の境界またはサービスコントロールポリシー (SCPs) を設定することができます。このような場合、 AWS CDK コンストラクトによって生成されたデフォルトのロール名がこれらの規則を満たさない可能性があり、変更する必要がある場合があります。このパターンは、エスケープハッチの側面を使用して、これらの要件に対処します AWS CDK。エスケープハッチを使用してカスタムロール名を定義し、すべてのロールにカスタム名を適用する側面を定義して、組織のポリシーと制約を確実に順守します。

前提条件と制限

前提条件

制約事項

  • Aspects はリソースタイプに基づいてリソースをフィルタリングするため、すべてのロールが同じプレフィックスを共有します。ロールごとに異なるロールプレフィックスが必要な場合は、他のプロパティに基づく追加のフィルタリングが必要です。例えば、 AWS Lambda 関数に関連付けられているロールに異なるプレフィックスを割り当てるには、特定のロール属性またはタグでフィルタリングし、Lambda 関連のロールには 1 つのプレフィックスを、他のロールには別のプレフィックスを適用できます。

  • IAM ロール名の最大長は 64 文字であるため、この制限を満たすには、変更されたロール名をトリミングする必要があります。

  • 一部の AWS のサービス は、すべての で利用できるわけではありません AWS リージョン。リージョンの可用性については、AWS のサービス リージョン別の「」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」ページを参照し、サービスのリンクを選択します。

アーキテクチャ

ターゲットテクノロジースタック

  • AWS CDK

  • AWS CloudFormation

ターゲット アーキテクチャ

エスケープハッチと側面を使用してAWSCDK、割り当てられたロール名をカスタマイズするためのアーキテクチャ。
  • AWS CDK アプリケーションは 1 つ以上の AWS CloudFormation スタックで構成され、 AWS リソースを管理するために合成およびデプロイされます。

  • レイヤー 2 (L2) コンストラクトによって公開されない AWS CDKマネージドリソースのプロパティを変更するには、エスケープハッチを使用して基盤となる CloudFormation プロパティ (この場合はロール名) を上書きし、 AWS CDK スタック合成プロセス中に AWS CDK アプリケーション内のすべてのリソースにロールを適用する の側面を使用します。

ツール

AWS のサービス

  • AWS Cloud Development Kit (AWS CDK) は、コードで AWS クラウド インフラストラクチャを定義およびプロビジョニングするのに役立つソフトウェア開発フレームワークです。

  • AWS CDK コマンドラインインターフェイス (AWS CDK CLI) ( AWS CDK ツールキットとも呼ばれます) は、 AWS CDK アプリの操作に役立つコマンドラインクラウド開発キットです。CLI cdk コマンドは、 AWS CDK アプリケーションを操作するための主要なツールです。アプリケーションを実行し、定義したアプリケーションモデルを調査し、 によって生成された CloudFormation テンプレートを生成してデプロイします AWS CDK。

  • AWS CloudFormation は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント リージョンと リージョンのライフサイクル全体を通じてリソースを管理するのに役立ちます。

コードリポジトリ

このパターンのソースコードとテンプレートは、 GitHub CDKAspects Override リポジトリで使用できます。

ベストプラクティス

AWS 「規範ガイダンス」ウェブサイトAWS CDK の「 を使用して IaC プロジェクトを作成 TypeScript するためのベストプラクティス」を参照してください。

エピック

タスク説明必要なスキル

をインストールします AWS CDK CLI。

を AWS CDK CLIグローバルにインストールするには、 コマンドを実行します。

npm install -g aws-cdk
AWS DevOps

バージョンを確認します。

コマンドを実行します。

cdk --version

のバージョン 2 を使用していることを確認します AWS CDK CLI。

AWS DevOps

AWS CDK 環境をブートストラップします。

AWS CloudFormation テンプレートをデプロイする前に、使用する アカウントと を準備 AWS リージョン します。 コマンドを実行します。

cdk bootstrap <account>/<Region>

詳細については、 AWS ドキュメントのAWS CDK ブートストラップを参照してください。

AWS DevOps
タスク説明必要なスキル

プロジェクトを設定します。

  1. このパターンの GitHub リポジトリをローカルコンピュータにクローンします。

    git clone https://github.com/aws-samples/cdk-aspects-override
  2. ローカルコンピュータのプロジェクトディレクトリに移動します。

  3. プロジェクトの依存関係をインストールします。

    npm ci
AWS DevOps

によって割り当てられたデフォルトのロール名を持つスタックをデプロイします AWS CDK。

Lambda 関数と関連するロールを含む 2 つの CloudFormation スタック (ExampleStack1ExampleStack2) をデプロイします。

npm run deploy:ExampleAppWithoutAspects

コードはロールプロパティを明示的に渡さないため、ロール名は によって作成されます AWS CDK。

出力例については、「追加情報」セクションを参照してください。

AWS DevOps

側面を持つスタックをデプロイします。

このステップでは、 AWS CDK プロジェクトにデプロイされているすべてのロールにプレフィックスを追加してIAM、ロール名規則を適用する側面を適用します。側面は lib/aspects.tsファイルで定義されます。この側面では、エスケープハッチを使用して、プレフィックスを追加してロール名を上書きします。この側面は、 bin/app-with-aspects.tsファイル内のスタックに適用されます。この例で使用されるロール名のプレフィックスは ですdev-unicorn

  1. bin/app-with-aspects.ts ファイルを編集します。

  2. ファイルで、プレフィックス ROLE_NAME_PREFIXを使用して変数を更新しますdev-unicorn

    const app = new cdk.App(); // Define a prefix for the role names const ROLE_NAME_PREFIX = 'dev-unicorn'; // Instantiate the RoleNamingConventionAspect with the desired prefix const roleNamingConventionAspect = new RoleNamingConventionAspect(ROLE_NAME_PREFIX);
  3. 次の側面で AWS CDK アプリケーションをデプロイします。

    npm run deploy:ExampleAppWithAspects

出力の例については、「追加情報」セクションを参照してください。

AWS DevOps
タスク説明必要なスキル

AWS CloudFormation スタックを削除します。

このパターンの使用が完了したら、次のコマンドを実行してリソースをクリーンアップし、追加コストが発生しないようにします。

cdk destroy --all -f && cdk --app npx ts-node bin/app-with-aspects.ts' destroy --all -f
AWS DevOps

トラブルシューティング

問題ソリューション

を使用して問題が発生する。 AWS CDK

AWS CDK ドキュメントの「一般的な AWS CDK 問題のトラブルシューティング」を参照してください。

関連リソース

追加情報

側面 AWS 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

側面 AWS CloudFormation を持つ によって作成されたロール名

Outputs: ExampleStack1WithAspects.Function1RoleName = dev-unicorn-Function1LambdaFunctionServiceRole783660DC ExampleStack1WithAspects.Function2RoleName = dev-unicorn-Function2LambdaFunctionServiceRole2C391181 ... Outputs: ExampleStack2WithAspects.Function3RoleName = dev-unicorn-Function3LambdaFunctionServiceRole4CAA721C