AWS CDK v2.126.0で ”cdk migrate –from-scan” が利用可能に!

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

IaC ジェネレーターを試していた中で、CDK Migrateの存在を知りましたので早速試してみたいと思います。私が書いたIaC ジェネレーターのブログは、こちらになります!

また公式ブログを読むと、CDK Migrate自体がGAとなったと記載がありました。
IaC ジェネレーターと同時にCDK MigrateもGAになったということでしょうか?

CDKへの移行ドキュメントでは、まだプレビュー版のような記載が残ったままですので、どちらが正しいのか気になるところです。。(単にドキュメントの情報が古いだけ??)

目次

CDK Migrateとは?

概要

CDK Migrateは、CloudFormationのスタック or テンプレートを元にCDK化してくれる機能となります。CDKのv2.100.0で追加された機能で、当時はプレビュー版とのことで発表されていました。

今回のCDK Update(v2.126.0)で、「デプロイされたリソースからの移行」の機能が追加になった模様です。v2.126.0のリリースノート

ちなみにCDK化に関して、「L1コンストラクタのみ作成」などのいくつか条件があります。
詳しくはこちらを参照くださいませ。

CDKへの移行方法

整理すると、大きく3つの移行方法があります。

  1. AWS CloudFormation スタックからの移行
  2. AWS CloudFormation テンプレートから移行する
  3. デプロイされたリソースからの移行(new!)

ちなみに 「AWS CloudFormation テンプレートからの移行」では、jsonやyaml形式は当然移行可能ですが、SAMテンプレートからの移行も可能なようです。
ただしCloudFormationの変更が必要のようですが、SAMのコマンドで変換可能とのこと。
(詳細はこちら

まずは「AWS CloudFormation テンプレートから移行する」から試してみたいと思います。

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

本ブログでは、以前IaCジェネレーターにて作成したCloudFormationのテンプレートを使用しますが、json or yaml形式のテンプレートであればIaCジェネレーターにて作成したテンプレートでなくても使用出来ますのでご安心ください。

「AWS CDK」タブより、テンプレートをダウンロードし、同階層にてcdk migrateを実行します。
(ステップ2のコマンドをそのままコピー)

ですが、すぐに下記エラーメッセージが出力されてしまいました。


MetadataのTemplateIdは不要と判断し、テンプレートから除外して再度試してみることにしました。
するとしばらくして、プログレスバーが表示されます。CDK化がんばれ!

数分で全て完了となります。
同時にnpm installも実施されているため、node_modulesも作成されています。
先程記述した通り、L1 コンストラクタでの出力となりますが、きちんとCDKソースコードが出来上がっています。素晴らしい!!!

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

では、新機能として追加された「デプロイされたリソースからの移行」を試してみます。
公式ブログ通りに、--from-scan を使ってと。。

というエラーメッセージが出力されてしまいました。
どうやらリソース数を100以下に絞り込む必要があるそうです。

絞り方が分からず、GitHubのPRを眺めてみると...
見つけました!!リソースタイプやタグ名でfilter出来るようです。

filterで引っ掛ける用にS3バケットを新規で作成してみました。
こんな感じのタグ名/値です。

よし、次こそ!!
おや。。またエラーですか。

どうやら絞り込みがうまく出来ていないようですね。
オプションの設定がダメだったのか疑ってしばらく調査しましたが、どうやら原因はそこではなかったようです。

先程のPRの英訳です。(by DeepL)

-from-scanは3つの引数を取る: --new、most-recent、undefinedです。
newが渡された場合、CDK Migrateはアカウントの新しいスキャンを開始し、リソースの発見にその新しいスキャンを使用します。
もし ---most-recent を渡すと、CDK Migrate はそのアカウントの最新のスキャンを使用してリソースを発見します。
もし --new も --most-recent も渡されなかった場合、CDK Migrate はそのアカウントの直近のスキャンを使用してリソースを発見します。

なるほど。
スキャンされていないため、初回のみ「-from-scan new」で実行しないといけない訳ですか。
オプションに追加して再実行です。

やっとAll doneとなりました。

ちなみに2回目以降は「-from-scan」の値は空でも問題なく、下記のようにAll doneとなっています。
肝心のCDKソースファイルも指定したタグのリソースのみ抽出出来ています。

cdk migrateのオプションについては、こちらのドキュメントが参考になります。

まとめ

・初回のみ「-from-scan」オプションにnewの設定が必要。
・初回スキャン以降 追加となったAWSリソースがあれば都度newの指定が必要。
・リソースを100以下に絞り込む必要あるため、「--filter」オプションを使いましょう。

感想

2パターンの移行方法でCDK Migrateを試してみましたが驚くほど簡単にCDK化が出来ました。
migrateの新機能「-from-scan」では躓いてしまったものの、やり方が分かってしまえば簡単でした。

結果的にドキュメントにオプションの説明がありましたが、PRの内容から紐解けて個人的には楽しい調査になりました。笑

CDK Migrateでお困り事があれば、本ブログが参考になれば幸いです。

投稿者プロフィール

tsuji
2021/2にスカイアーチネットワークスにJoin。
(前職ではAIのシステム開発やPoCなどを主に担当)

2024 Japan AWS Top Engineers (Services)
2024 Japan AWS All Certifications Engineers

現在の業務では主にクラウドネイティブなWebアプリケーション/APIのインフラ構築から開発まで幅広く担当。

好きなAWSサービス:AWS CDK、Amazon Bedrock
趣味:読書と競馬鑑賞

ABOUTこの記事をかいた人

2021/2にスカイアーチネットワークスにJoin。 (前職ではAIのシステム開発やPoCなどを主に担当) 2024 Japan AWS Top Engineers (Services) 2024 Japan AWS All Certifications Engineers 現在の業務では主にクラウドネイティブなWebアプリケーション/APIのインフラ構築から開発まで幅広く担当。 好きなAWSサービス:AWS CDK、Amazon Bedrock 趣味:読書と競馬鑑賞