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

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

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

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

CDK Migrate AWS CDK 機能はプレビューリリース中であり、変更される可能性があります。

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

移行の仕組み

AWS CDK CLIcdk migrateコマンドを使用して、以下のソースから移行します。

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

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

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

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

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

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

リソースの詳細を収集すると、は移行したリソースを含む 1 つのスタックを含む新しい CDK AWS CDK CLI アプリを作成します。

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

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

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

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

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

CDK Migrate のメリット

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 CLIcdk importはリソースを新しい CDK アプリにインポートします。 AWS CDK CLIまた、はリソースごとに L1 コンストラクトを自動的に生成します。cdk migrate AWS CDK サポートされている移行ソースから新しいアプリにインポートする場合に使用することをおすすめします。

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

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

CDK Migrate は 1 つのスタックを含む CDK アプリを作成します。

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

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

AWS CloudFormation スタックを移行する場合、新しい CDK アプリでは 1 AWS CloudFormation つのスタックのみを 1 つのスタックに移行できます。

アセットの移行

AWS Lambda コードなどのプロジェクトアセットは、新しい CDK アプリに直接移行されません。移行後、CDK アプリに追加するアセット値を指定できます。

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

データベースや Amazon Simple Storage Service (Amazon S3) バケットなどのステートフルリソースを移行する場合、ほとんどの場合、新しいリソースを作成するのではなく、既存のリソースを移行したいと思うでしょう。

ステートフルリソースを移行して保存するには、次の操作を行います。

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

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

  • AWS CloudFormation スタックから移行する場合は、新しい CDK アプリのスタック名がスタックと一致することを確認してください。 AWS CloudFormation

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

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

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

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

組み込み関数を含むテンプレートの移行

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

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

スキャンの制限

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

前提条件

cdk migrateコマンドを使用する前に、次のことを行ってください。

  1. AWSで認証を確立します。手順については、「ステップ 2: プログラムによるアクセスを設定する」を参照してください。

  2. AWS CDK CLI をインストールまたはアップグレードします。インストール手順については、「ステップ 3: をインストールする AWS CDKCLI」を参照してください。

CDK マイグレーションを始めましょう。

まず、 AWS CDK CLIcdk migrate任意のディレクトリからコマンドを実行します。実行する移行の種類に応じて、必須オプションとオプションオプションを指定します。

で使用できるオプションの詳細なリストと説明についてはcdk migrate、を参照してくださいcdk migrate コマンドリファレンス

提供しておくとよい重要なオプションを以下に示します。

スタックの名前

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

[言語]

新しい CDK --language アプリのプログラミング言語を指定するのに使用します。

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

AWS CDK CLI AWS AWS リージョン はデフォルトソースからアカウントと情報を取得します。詳細については、「ステップ 2: プログラムによるアクセスを設定する」を参照してください。--account--regioncdk migrateとオプションを使用して他の値を指定できます。

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

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

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

マイグレーションソース

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

  • --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. 移行したスタックを含む CDK アプリ内にスタックを作成します。 AWS CloudFormation

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

移行後は、CDK アプリを通常どおり管理および変更できます。 AWS CloudFormation デプロイすると、 AWS CloudFormation AWS CloudFormation スタック名が一致するため、デプロイがスタックの更新であると認識されます。論理 ID が一致するリソースは更新されます。デプロイの詳細については、を参照してくださいCDK アプリを管理してデプロイします。

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

CDK Migrate は、 AWS CloudFormation またはでフォーマットされたテンプレートからの移行をサポートします。JSON 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. 移行したテンプレートを含む CDK アプリ内にスタックを作成します。 AWS CloudFormation

移行後は、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 CLIsam validate --debugコマンドを使用できます。このコマンドを実行する前に、lintfalsesamconfig.tomlファイル内でを () に設定しなければならない場合があります。

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 cdk init AWS CDK を実行して新しいアプリを初期化し、 AWS CloudFormation テンプレートを 1 つのスタックとして CDK アプリに移行します。

フィルターを使う

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

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

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

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

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

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

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

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

  • MUTUALLY_EXCLUSIVE_PROPERTIES— これらは特定のリソースの書き込み専用プロパティで、互換性があり、同様の目的を果たします。リソースの設定には、相互に排他的なプロパティの 1 つが必要です。たとえば、AWS::Lambda::FunctionリソースのS3BucketImageUriZipFileプロパティは相互に排他的な書き込み専用プロパティです。関数アセットの指定にはどれでも使用できますが、必ず使用する必要があります。

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

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

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

移行後は、新しい CDK アプリで書き込み専用プロパティ値を指定する必要があります。 AWS CDK CLIは CDK ReadMe プロジェクトのファイルに Warnings セクションを追加して、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 プロジェクトのファイルの Warnings セクションから、解決する書き込み専用プロパティを特定します。ReadMeここでは、書き込み専用プロパティを含む可能性のある CDK アプリ内のリソースを記録し、検出された書き込み専用プロパティタイプを特定できます。

    1. MUTUALLY_EXCLUSIVE_PROPERTIESでは、アプリに設定する相互排他的なプロパティを決定してください。 AWS CDK

    2. MUTUALLY_EXCLUSIVE_TYPESでは、どの受け入れ可能なタイプをプロパティの設定に使用するかを決めてください。

    3. ではUNSUPPORTED_PROPERTIES、プロパティがオプションか必須かを判断してください。次に、必要に応じて設定します。

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

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

    以下は、移行した CDK アプリ内の 2 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 CLImigrate.json AWS CDK は移行中にプロジェクト内にファイルを作成します。このファイルには、デプロイされたリソースに関する参照情報が含まれています。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を使用して環境を準備してください。詳細については、「ブートストラッピング」を参照してください。

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 アプリ内のリソースのすべての論理 ID を変更する必要があります。その後、同じ環境にデプロイして、新しいスタックと新しいリソースを作成できます。

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

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

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