CDK ブループリントを使用してコンストラクトを設定する - AWS クラウド開発キット (AWS CDK) v2

これは AWS CDK v2 デベロッパーガイドです。旧版の CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。

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

CDK ブループリントを使用してコンストラクトを設定する

注記

CDK ブループリントはプレビューリリースであり、変更される可能性があります。

AWS CDK ブループリントを使用して、L2 コンストラクト設定を標準化し、組織全体に配布します。ブループリントを使用すると、組織の標準とベストプラクティスに従って AWS リソースが一貫して設定されるようにできます。たとえば、すべての Amazon S3 バケットの暗号化を自動的に有効にしたり、すべての AWS Lambda 関数に特定のログ記録設定を適用したり、すべてのセキュリティグループに標準セキュリティルールを適用したりできます。

設計図は、インスタンス化時にコンストラクトプロパティを変更できる AWS CDK v2.196.0 で導入されたメカニズムであるプロパティインジェクションを使用しています。設計図はプロパティインジェクターのコレクションであり、各プロパティインジェクターは特定の L2 コンストラクトに最適な設定を指定します。設計図は、組織の全体的なベストプラクティスを表します。

設計図はコンプライアンスの適用メカニズムではありません。開発者は、必要に応じてデフォルトを上書きできます。コンプライアンスを厳しく適用するには、ブループリントに加えて、 AWS CloudFormation ガード、サービスコントロールポリシー、または CDK アスペクトの使用を検討してください。

実装の詳細については、「Property Injection RFC」を参照してください。

設計図の主要なコンポーネント

ブループリントは、インスタンス化されたときにデフォルトのプロパティをコンストラクトに適用するプロパティインジェクターのコレクションです。プロパティインジェクターは、 IPropertyInjectorインターフェイスを実装するコンポーネントであり、コンストラクトの作成をインターセプトし、コンストラクトの作成前にプロパティを変更または追加します。

  • IPropertyInjector - は、props で指定されていない追加のプロパティを挿入する方法 IPropertyInjector を定義します。これは 1 つの L2 コンストラクトに固有であり、そのコンストラクトのプロパティで動作します。

  • PropertyInjectors - コンストラクトツリーにアタッチされたインジェクターのコレクション PropertyInjectors です。インジェクタは任意のコンストラクトにアタッチできますが、実際には、それらのほとんどが App、、Stageまたは にアタッチされることを想定していますStack

ブループリントの一般的なユースケース

CDK ブループリントを使用して、AWS リソースの多くの側面を標準化できます。一般的なユースケースを以下に示します。

セキュリティ標準
  • すべての Amazon S3 バケットでサーバー側の暗号化が有効になっていることを確認します。

  • デフォルトでは、パブリックアクセスをブロックするようにすべてのセキュリティグループを設定します。

  • 最小特権の AWS Identity and Access Management (IAM) アクセス許可を AWS Lambda 関数に適用します。

  • すべてのネットワーク通信に SSL を適用します。

オペレーショナルエクセレンス
  • すべての AWS Lambda 関数の標準化されたログ記録を設定します。

  • リソース全体に一貫したタグ付け戦略を適用します。

  • デフォルトのモニタリングとアラートのしきい値を設定します。

  • ログとバックアップの標準保持ポリシーを実装します。

コスト最適化
  • 環境に基づいて適切なインスタンスサイズを設定します。

  • 組織のデフォルトを使用して自動スケーリングポリシーを適用します。

  • Amazon S3 バケットのライフサイクルルールを設定して、オブジェクトをより安価なストレージクラスに移行します。

  • データベースのデフォルトのプロビジョニングされたスループットを設定します。

コンプライアンス要件
  • 規制対象データに必要な暗号化設定を実装します。

  • データ保持要件に必要なバックアップポリシーを適用します。

  • セキュリティ要件を満たすデフォルトの Amazon VPC 設定を構成します。

  • リソースにコスト配分に必要なタグがあることを確認します。

開発者の生産性
  • 定型コードの必要性を軽減する適切なデフォルトを提供します。

  • 組み込みインジェクターを使用して、組織固有のスタッククラスを作成します。

  • 再利用可能なインジェクターを通じてチーム間でベストプラクティスを共有します。

  • コードに組織の知識をエンコードすることで、オンボーディングを簡素化します。

ブループリントの開始方法

プロパティインジェクターを作成して使用する簡単な例を次に示します。

まず、Amazon S3 バケットのプロパティインジェクターを作成します。

import { IPropertyInjector, InjectionContext } from 'aws-cdk-lib'; import { Bucket, BucketProps, BlockPublicAccess } from 'aws-cdk-lib/aws-s3'; export class SecureBucketDefaults implements IPropertyInjector { public readonly constructUniqueId: string; constructor() { this.constructUniqueId = Bucket.PROPERTY_INJECTION_ID; } public inject(originalProps: BucketProps, _context: InjectionContext): BucketProps { return { // Set security defaults blockPublicAccess: BlockPublicAccess.BLOCK_ALL, enforceSSL: true, // Include original props to allow overrides ...originalProps, }; } }

次に、CDK アプリケーションでインジェクターを使用します。

import { App, Stack } from 'aws-cdk-lib'; import { Bucket } from 'aws-cdk-lib/aws-s3'; import { SecureBucketDefaults } from './secure-bucket-defaults'; // Attach injectors when creating the App const app = new App({ propertyInjectors: [new SecureBucketDefaults()] }); const stack = new Stack(app, 'MyStack'); // This bucket automatically gets the default properties const myBucket = new Bucket(stack, 'MyBucket');

または、 PropertyInjectors.of()メソッドを使用することもできます。

import { App, Stack, PropertyInjectors } from 'aws-cdk-lib'; import { SecureBucketDefaults } from './secure-bucket-defaults'; const app = new App(); PropertyInjectors.of(app).add(new SecureBucketDefaults()); const stack = new Stack(app, 'MyStack'); const myBucket = new Bucket(stack, 'MyBucket');

ベストプラクティス

  • オーバーライドを許可する…​originalPropsには、 の前にデフォルトのプロパティを配置します。

  • オーバーライドを防ぐために…​originalProps、 の後に強制プロパティを配置します。

  • リソースの作成時にスキップフラグを使用して、無限の再帰を防ぎます。例については、プロパティインジェクション RFC「バケットの accessLogBucket を作成する必要がある場合はどうなりますか?」を参照してください。

  • デバッグ用のログ記録を追加します。

  • CDK コンテキストを使用して、テスト用のインジェクターを有効または無効にします。

実装の詳細、トラブルシューティングのヒント、リファレンス情報など、プロパティインジェクションの詳細については、「プロパティインジェクション RFC」を参照してください。