既存のリソースと AWS CloudFormation テンプレートを に移行する AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

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

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

既存のリソースと AWS CloudFormation テンプレートを に移行する AWS CDK

CDK 移行機能は のプレビューリリースにあり AWS CDK 、変更される可能性があります。

AWS Cloud Development Kit (AWS CDK) コマンドラインインターフェイス (AWS CDK CLI) を使用して、デプロイされた AWS リソース、デプロイされた AWS CloudFormation スタック、およびローカル AWS CloudFormation テンプレートを に移行します AWS CDK。

移行の仕組み

を使用する AWS CDK CLI cdk migrate 次のソースから移行する コマンド。

  • デプロイされた AWS リソース。

  • デプロイされた AWS CloudFormation スタック。

  • ローカル AWS CloudFormation テンプレート。

デプロイされた AWS リソース

AWS CloudFormation スタックに関連付けられていない特定の環境 (AWS アカウント および AWS リージョン) からデプロイされた AWS リソースを移行できます。

の AWS CDK CLI は、IaC ジェネレーターサービスを使用して、 AWS 環境内のリソースをスキャンし、リソースの詳細を収集します。IaC ジェネレーターの詳細については、AWS CloudFormation 「 ユーザーガイド」の「既存のリソースのテンプレートの生成」を参照してください。

リソースの詳細を収集した後、 AWS CDK CLI は、移行されたリソースを含む 1 つのスタックを含む新しいCDKアプリケーションを作成します。

デプロイされた AWS CloudFormation スタック

1 つの AWS CloudFormation スタックを新しい AWS CDK アプリケーションに移行できます。の AWS CDK CLI はスタックのテンプレートを取得し AWS CloudFormation 、新しいCDKアプリケーションを作成します。CDK アプリは、移行されたスタックを含む 1 つの AWS CloudFormation スタックで構成されます。

ローカル AWS CloudFormation テンプレート

ローカル AWS CloudFormation テンプレートから移行できます。ローカルテンプレートには、デプロイされたリソースが含まれている場合と含まれていない場合があります。の AWS CDK CLI は、 リソースに 1 つのスタックを含む新しいCDKアプリケーションを作成します。

移行後、 CDK アプリケーションを管理、変更、デプロイ AWS CloudFormation して、 リソースをプロビジョニングまたは更新できます。

CDK 移行の利点

リソースを に移行する AWS CDK のは、これまで手動プロセスでした。そのためには、 AWS CloudFormation と との時間と専門知識 AWS CDK が必要です。CDK Migrate では、 AWS CDK CLI は、移行作業の大部分を短時間で促進します。CDK Migrate を使用すると、 を使用して で新規および既存のアプリケーションを開発および管理 AWS CDK し始めることができます AWS。

考慮事項

一般的な考慮事項

CDK 移行とCDKインポート

cdk import コマンドは、デプロイされたリソースを新規または既存のCDKアプリケーションにインポートできます。インポートするときは、各リソースをアプリケーション内の L1 コンストラクトとして手動で定義する必要があります。を使用してcdk import、新規または既存のCDKアプリケーションに一度に 1 つ以上のリソースをインポートすることをお勧めします。詳細については、「既存のリソースをスタックにインポートする」を参照してください。

cdk migrate コマンドは、デプロイされたリソース、デプロイされた AWS CloudFormation スタック、またはローカル AWS CloudFormation テンプレートから新しいCDKアプリケーションに移行します。移行中、 は AWS CDK CLI はcdk import、リソースを新しいCDKアプリケーションにインポートするために を使用します。の AWS CDK CLI は、リソースごとに L1 コンストラクトも生成します。サポートされている移行ソースから新しい AWS CDK アプリケーションにインポートcdk migrateする場合は、 を使用することをお勧めします。

CDK Migrate は L1 コンストラクトのみを作成します

新しく作成されたCDKアプリには L1 コンストラクトのみが含まれます。移行後にアプリに上位レベルのコンストラクトを追加できます。

CDK Migrate は 1 つのスタックを含むCDKアプリケーションを作成します

新しく作成されたCDKアプリケーションには、1 つのスタックが含まれます。

デプロイされたリソースを移行する場合、移行されたすべてのリソースは、新しいCDKアプリケーションの 1 つのスタックに含まれます。

AWS CloudFormation スタックを移行するときは、新しいCDKアプリケーションの 1 つの AWS CloudFormation スタックにのみ移行できます。

アセットの移行

AWS Lambda コードなどのプロジェクトアセットは、新しいCDKアプリケーションに直接移行されません。移行後、アセット値を指定してCDKアプリケーションに含めることができます。

ステートフルリソースの移行

データベースや Amazon Simple Storage Service (Amazon S3) バケットなどのステートフルリソースを移行する場合、新しいリソースを作成する代わりに、ほとんどの場合、既存のリソースを移行する必要があります。

ステートフルリソースを移行して保持するには、以下を実行します。

  • ステートフルリソースがインポートをサポートしていることを確認します。詳細については、「 ユーザーガイド」の「リソースタイプのサポート」を参照してください。 AWS CloudFormation

  • 移行後、新しいCDKアプリケーション内の移行されたリソースの論理 ID が、デプロイされたリソースの論理 ID と一致することを確認します。

  • AWS CloudFormation スタックから移行する場合は、新しいCDKアプリケーションのスタック名がスタックと一致する AWS CloudFormation ことを確認します。

  • 移行されたリソースの同じ AWS アカウントと AWS リージョン を使用してCDKアプリケーションをデプロイします。

AWS CloudFormation テンプレートから移行する際の考慮事項

CDK 移行は単一のテンプレート移行をサポートします

AWS CloudFormation テンプレートを移行するときは、移行するテンプレートを 1 つ選択できます。ネストされたテンプレートはサポートされていません。

組み込み関数を使用したテンプレートの移行

組み込み関数を使用する AWS CloudFormation テンプレートから移行する場合、 AWS CDK CLI は、 Fn クラスを使用してロジックをCDKアプリケーションに移行しようとします。詳細については、 AWS Cloud Development Kit (AWS CDK) APIリファレンス「クラス Fn」を参照してください。

デプロイされたリソースから移行する際の考慮事項

スキャンの制限

環境のリソースをスキャンする場合、IaC ジェネレーターには、スキャン時に取得できるデータおよびクォータの制限に特定の制限があります。詳細については、「 ユーザーガイド」の「考慮事項」を参照してください。 AWS CloudFormation

前提条件

cdk migrate コマンドを使用する前に、 のすべてのセットアップ手順を完了しますの開始方法 AWS CDK

CDK 移行の開始方法

開始するには、 AWS CDK CLI cdk migrate 任意のディレクトリからの コマンド。実行する移行のタイプに応じて、必須オプションとオプションを提供します。

で使用できるオプションの完全なリストと説明についてはcdk migrate、「」を参照してくださいcdk migrate

以下は、提供したい重要なオプションです。

スタックの名前

唯一の必須オプションは です--stack-name。このオプションを使用して、移行後に AWS CDK アプリ内で作成されるスタックの名前を指定します。スタック名は、デプロイ時に AWS CloudFormation スタックの名前としても使用されます。

[言語]

--language を使用して、新しいCDKアプリケーションのプログラミング言語を指定します。

AWS アカウントと AWS リージョン

の AWS CDK CLI は、デフォルトのソースから AWS アカウントと AWS リージョン 情報を取得します。詳細については、「の環境 AWS CDK」を参照してください。--account--regionオプションを使用してcdk migrate、他の値を指定できます。

新しいCDKプロジェクトの出力ディレクトリ

デフォルトでは、 AWS CDK CLI は作業ディレクトリに新しいCDKプロジェクトを作成し、指定した値を使用してプロジェクトフォルダ--stack-nameに名前を付けます。同じ名前のフォルダが現在存在する場合、 AWS CDK CLI はそのフォルダを上書きします。

--output-path オプションを使用して、新しいCDKプロジェクトフォルダに別の出力パスを指定できます。

移行ソース

移行元のソースを指定するオプションを指定します。

  • --from-path – ローカル AWS CloudFormation テンプレートから移行します。

  • --from-scan – AWS アカウントと にデプロイされたリソースから移行します AWS リージョン。

  • --from-stack – AWS CloudFormation スタックから移行します。

移行ソースに応じて、cdk migrateコマンドをカスタマイズするための追加オプションを提供できます。

AWS CloudFormation スタックからの移行

デプロイされた AWS CloudFormation スタックから移行するには、 --from-stackオプションを指定します。デプロイされた AWS CloudFormation スタックの名前を で指定します--stack-name。以下に例を示します。

$ cdk migrate --from-stack --stack-name "myCloudFormationStack"

の AWS CDK CLI は以下を実行します。

  1. デプロイされたスタックの AWS CloudFormation テンプレートを取得します。

  2. cdk init を実行して新しいCDKアプリケーションを初期化します。

  3. 移行されたスタックを含む AWS CloudFormation スタックをCDKアプリケーション内に作成します。

デプロイされた AWS CloudFormation スタックから移行すると、 AWS CDK CLI は、デプロイされたリソース論理IDsとデプロイされた AWS CloudFormation スタック名を、移行されたリソースと新しいCDKアプリケーションのスタックと照合しようとします。

移行後は、CDKアプリを正常に管理および変更できます。デプロイすると、 AWS CloudFormation は、一致する AWS CloudFormation スタック名のために、デプロイを AWS CloudFormation スタック更新として識別します。一致する論理を持つリソースIDsが更新されます。デプロイの詳細については、「」を参照してくださいCDK アプリケーションの管理とデプロイ

AWS CloudFormation テンプレートからの移行

CDK 移行では、 JSONまたは でフォーマットされた AWS CloudFormation テンプレートからの移行がサポートされていますYAML

ローカル AWS CloudFormation テンプレートから移行するには、 --from-pathオプションを使用してローカルテンプレートへのパスを指定します。また、必要な--stack-nameオプションを指定する必要があります。以下に例を示します。

$ cdk migrate --from-path "./template.json" --stack-name "myCloudFormationStack"

の AWS CDK CLI は以下を実行します。

  1. ローカル AWS CloudFormation テンプレートを取得します。

  2. cdk init を実行して新しいCDKアプリケーションを初期化します。

  3. 移行された AWS CloudFormation テンプレートを含むスタックをCDKアプリケーション内に作成します。

移行後は、CDKアプリを正常に管理および変更できます。デプロイでは、次のオプションがあります。

  • AWS CloudFormation スタックの更新 – ローカル AWS CloudFormation テンプレートが以前にデプロイされている場合は、デプロイされた AWS CloudFormation スタックを更新できます。

  • 新しい AWS CloudFormation スタックをデプロイする – ローカル AWS CloudFormation テンプレートがデプロイされなかった場合、または以前にデプロイされたテンプレートから新しいスタックを作成する場合は、新しい AWS CloudFormation スタックをデプロイできます。

AWS SAM テンプレートからの移行

AWS Serverless Application Model (AWS SAM) テンプレートから移行するには、まず AWS CloudFormation テンプレートに変換するか、デプロイして AWS CloudFormation スタックを作成する必要があります。

AWS SAM テンプレートを に変換するには AWS CloudFormation、 AWS SAM CLI sam validate --debug コマンド。このコマンドを実行する前に、 samconfig.toml ファイルfalselintを に設定する必要がある場合があります。

AWS CloudFormation スタックに変換するには、 を使用して AWS SAM テンプレートをデプロイします。 AWS SAM CLI。 次に、デプロイされたスタックから移行します。

デプロイされたリソースからの移行

デプロイされた AWS リソースから移行するには、 --from-scanオプションを指定します。また、必要な--stack-nameオプションを指定する必要があります。以下に例を示します。

$ cdk migrate --from-scan --stack-name "myCloudFormationStack"

の AWS CDK CLI は以下を実行します。

  1. アカウントをスキャンしてリソースとプロパティの詳細を確認する – AWS CDK CLI は IaC ジェネレーターを使用してアカウントをスキャンし、詳細を収集します。

  2. AWS CloudFormation テンプレートの生成 – スキャン後、 AWS CDK CLI は IaC ジェネレーターを使用して AWS CloudFormation テンプレートを作成します。

  3. 新しいCDKアプリケーションを初期化し、テンプレートを移行する – AWS CDK CLI を実行して新しい AWS CDK アプリケーションをcdk init初期化し、 AWS CloudFormation テンプレートを 1 つのスタックとしてCDKアプリケーションに移行します。

フィルターを使用する

デフォルトでは、 AWS CDK CLI は AWS 環境全体をスキャンし、IaC ジェネレーターの最大クォータ制限までリソースを移行します。フィルターには、 AWS CDK CLI アカウントから新しいCDKアプリケーションにリソースを移行する基準を指定します。詳細については、「--filter」を参照してください。

IaC ジェネレーターによるリソースのスキャン

アカウントのリソースの数によっては、スキャンに数分かかる場合があります。スキャンプロセス中に進行状況バーが表示されます。

サポートされているリソースタイプ

の AWS CDK CLI は、IaC ジェネレーターでサポートされているリソースを移行します。完全なリストについては、「 ユーザーガイド」の「リソースタイプのサポート」を参照してください。 AWS CloudFormation

書き込み専用プロパティを解決する

サポートされているリソースの中には、書き込み専用プロパティが含まれているものがあります。これらのプロパティは、 に書き込むことができ、 プロパティを設定できますが、IaC ジェネレーターが読み取ることも、 値を取得 AWS CloudFormation することもできません。例えば、データベースパスワードの指定に使用されるプロパティは、セキュリティ上の理由から書き込み専用である場合があります。

移行中にリソースをスキャンすると、IaC ジェネレーターは書き込み専用プロパティを含む可能性のあるリソースを検出し、次のいずれかのタイプに分類します。

  • MUTUALLY_EXCLUSIVE_PROPERTIES – これらは、交換可能で、同様の目的を果たす特定のリソースの書き込み専用プロパティです。リソースを設定するには、相互に排他的なプロパティのいずれかが必要です。例えば、AWS::Lambda::Functionリソースの S3BucketImageUri、および ZipFileプロパティは、相互に排他的な書き込み専用プロパティです。これらのいずれかを使用して関数アセットを指定できますが、いずれかを使用する必要があります。

  • MUTUALLY_EXCLUSIVE_TYPES – これらは、複数の設定タイプを受け入れる必要な書き込み専用プロパティです。例えば、AWS::ApiGateway::RestApiリソースの Bodyプロパティは、オブジェクトまたは文字列タイプを受け入れます。

  • UNSUPPORTED_PROPERTIES – これらは書き込み専用プロパティであり、他の 2 つのカテゴリには該当しません。オブジェクトの配列を受け入れるオプションプロパティまたは必須プロパティです。

書き込み専用プロパティと、デプロイされたリソースをスキャンして AWS CloudFormation テンプレートを作成するときに IaC ジェネレーターがそれらを管理する方法の詳細については、AWS CloudFormation 「 ユーザーガイド」のIaC ジェネレーターと書き込み専用プロパティ」を参照してください。

移行後、新しいCDKアプリで書き込み専用プロパティ値を指定する必要があります。の AWS CDK CLI は、CDKプロジェクトのReadMeファイルに警告セクションを追加して、IaC ジェネレーターによって識別された書き込み専用プロパティを文書化します。以下に例を示します。

# Welcome to your CDK TypeScript project ... ## Warnings ### Write-only properties Write-only properties are resource property values that can be written to but can't be read by AWS CloudFormation or CDK Migrate. For more information, see [IaC generator and write-only properties](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/generate-IaC-write-only-properties.html). Write-only properties discovered during migration are organized here by resource ID and categorized by write-only property type. Resolve write-only properties by providing property values in your CDK app. For guidance, see [Resolve write-only properties](https://docs.aws.amazon.com/cdk/v2/guide/migrate.html#migrate-resources-writeonly). ### MyLambdaFunction - **UNSUPPORTED_PROPERTIES**: - SnapStart/ApplyOn: Applying SnapStart setting on function resource type.Possible values: [PublishedVersions, None] This property can be replaced with other types - Code/S3ObjectVersion: For versioned objects, the version of the deployment package object to use. This property can be replaced with other exclusive properties - **MUTUALLY_EXCLUSIVE_PROPERTIES**: - Code/S3Bucket: An Amazon S3 bucket in the same AWS Region as your function. The bucket can be in a different AWS account. This property can be replaced with other exclusive properties - Code/S3Key: The Amazon S3 key of the deployment package. This property can be replaced with other exclusive properties
  • 警告は、関連付けられているリソースの論理 ID を識別する見出しの下に整理されます。

  • 警告はタイプ別に分類されます。これらのタイプは IaC ジェネレータから直接取得されます。

書き込み専用プロパティを解決するには
  1. CDK プロジェクトのReadMeファイルの警告セクションから解決する書き込み専用プロパティを特定します。ここでは、書き込み専用プロパティを含む可能性のあるCDKアプリ内のリソースを書き留め、検出された書き込み専用プロパティタイプを特定できます。

    1. の場合MUTUALLY_EXCLUSIVE_PROPERTIES、 AWS CDK アプリで設定する相互排他的プロパティを決定します。

    2. ではMUTUALLY_EXCLUSIVE_TYPES、 プロパティの設定に使用する承認タイプを決定します。

    3. の場合UNSUPPORTED_PROPERTIES、 プロパティがオプションか必須かを判断します。次に、必要に応じて を設定します。

  2. IaC ジェネレーターと書き込み専用プロパティからのガイダンスを使用して、警告タイプの意味を参照してください。

  3. CDK アプリでは、解決する書き込み専用プロパティ値もアプリの Propsセクションで指定されます。ここに正しい値を入力します。プロパティの説明とガイダンスについては、AWS CDK APIリファレンス を参照してください。

    以下は、解決する 2 つの書き込み専用プロパティを持つ移行されたCDKアプリ内の Props セクションの例です。

    export interface MyTestAppStackProps extends cdk.StackProps { /** * The Amazon S3 key of the deployment package. */ readonly lambdaFunction00asdfasdfsadf008grk1CodeS3Keym8P82: string; /** * An Amazon S3 bucket in the same AWS Region as your function. The bucket can be in a different AWS account. */ readonly lambdaFunction00asdfasdfsadf008grk1CodeS3Bucketzidw8: string; }

書き込み専用プロパティ値をすべて解決したら、デプロイの準備が整います。

migrate.json ファイル

の AWS CDK CLI は、移行中に AWS CDK プロジェクトにmigrate.jsonファイルを作成します。このファイルには、デプロイされたリソースのリファレンス情報が含まれています。CDK アプリケーションを初めてデプロイすると、 AWS CDK CLI は、このファイルを使用してデプロイされたリソースを参照し、リソースを新しい AWS CloudFormation スタックに関連付け、ファイルを削除します。

CDK アプリケーションの管理とデプロイ

に移行すると AWS CDK、新しいCDKアプリがすぐにデプロイできない可能性があります。このトピックでは、新しいCDKアプリケーションの管理とデプロイ時に考慮すべきアクション項目について説明します。

デプロイの準備

デプロイする前に、CDKアプリを準備する必要があります。

アプリケーションを合成する

cdk synth コマンドを使用して、CDKアプリケーション内のスタックをテンプレートに AWS CloudFormation 合成します。

デプロイされた AWS CloudFormation スタックまたはテンプレートから移行した場合は、合成されたテンプレートを移行されたテンプレートと比較し、リソースとプロパティの値を検証できます。

cdk synth の詳細については、「スタックを合成する」を参照してください。

差分の実行

デプロイされた AWS CloudFormation スタックから移行した場合は、cdk diff コマンドを使用して、新しいCDKアプリケーションのスタックと比較できます。

cdk diff の詳細については、「」を参照してくださいスタックの比較

環境のブートストラップ

AWS 環境から初めてデプロイする場合は、 cdk bootstrapを使用して環境を準備します。詳細については、「AWS CDK ブートストラップ」を参照してください。

CDK アプリをデプロイする

CDK アプリケーションをデプロイすると、 AWS CDK CLI は AWS CloudFormation サービスを使用してリソースをプロビジョニングします。リソースはCDKアプリ内の 1 つのスタックにバンドルされ、1 つの AWS CloudFormation スタックとしてデプロイされます。

移行元に応じて、 をデプロイして新しい AWS CloudFormation スタックを作成したり、既存の AWS CloudFormation スタックを更新したりできます。

デプロイして新しい AWS CloudFormation スタックを作成する

デプロイされたリソースから移行した場合、 AWS CDK CLI は、デプロイ時に新しい AWS CloudFormation スタックを自動的に作成します。デプロイされたリソースは新しい AWS CloudFormation スタックに含まれます。

デプロイしたことのないローカル AWS CloudFormation テンプレートから移行した場合、 AWS CDK CLI は、デプロイ時に新しい AWS CloudFormation スタックを自動的に作成します。

以前にデプロイされたデプロイ済み AWS CloudFormation スタックまたはローカル AWS CloudFormation テンプレートから移行した場合は、 をデプロイして新しい AWS CloudFormation スタックを作成できます。新しいスタックを作成するには、次の手順を実行します。

  • 新しい AWS 環境にデプロイします。これは、別の AWS アカウントを使用するか、別の にデプロイすることで構成されます AWS リージョン。

  • 移行されたスタックまたはテンプレートと同じ AWS 環境に新しいスタックをデプロイする場合は、CDKアプリケーションのスタック名を新しい値に変更する必要があります。また、CDKアプリ内のすべてのリソースIDsの論理を変更する必要があります。その後、同じ環境にデプロイして、新しいスタックと新しいリソースを作成できます。

デプロイして既存の AWS CloudFormation スタックを更新する

以前にデプロイされたデプロイ済み AWS CloudFormation スタックまたはローカル AWS CloudFormation テンプレートから移行した場合は、 をデプロイして既存の AWS CloudFormation スタックを更新できます。

CDK アプリケーションのスタック名がデプロイされたスタックの AWS CloudFormation スタック名と一致していることを確認して、同じ AWS 環境にデプロイします。