Slide 1

Slide 1 text

AWS CDKの新機能「cdk migrate」を 試してみた KMiura(@k_miura_io)

Slide 2

Slide 2 text

自己紹介 • 三浦 耕生(こうき) • 三次元地図のスタートアップのエンジニア • JAWS UG名古屋運営 • 好きなAWSのサービス: AWS IoT、 Lambda、ECS、AWS CDK @k_miura_io koki.miura05

Slide 3

Slide 3 text

AWS CDKとは? • AWSのサービス構築をアプリケーションをコードで定義するためのIaCツール • モダンなプログラミング言語でAWSのアプリケーション構成を定義することで CloudFormationのテンプレートを作成できる

Slide 4

Slide 4 text

Terraformとの違いは? Terraform AWS CDK 対応言語 独自の言語 TypeScript, Python, Goなど 対応クラウド AWS、Azure、GCPなど AWS ライセンス Business Source License(BSL) Apache-2.0 license

Slide 5

Slide 5 text

CDKは頻繁にアップデートがある • OSSで様々な開発者がコントリビュートしている • 現行のV2のマイナーバージョンは100超え • Experimentalで新機能をお試しできる(あくまで検証目的) • 新機能のアップデート情報は #cdk_releases でキャッチアップするのがおすすめ(今回 のネタもここから選択した)

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Migrateコマンドが導入された • CloudFormationのテンプレート(json, yaml)やデプロイ済みのCloudFormationス タックからCDKのアプリケーションを構築する機能 • テンプレートやスタックから変換されるCDKはL1コンストラクト(CloudFormationのリソー スに対応したコンストラクト)として作成される • それまでは手作業で行う必要があったCloudFormationからCDKへの移行作業が効率 よくなりそう • 2023/10現在はExperimentalでの提供

Slide 8

Slide 8 text

試してみた

Slide 9

Slide 9 text

今回構築するスタック

Slide 10

Slide 10 text

テンプレートの用意 • カスタムドメインを指定してS3でホスティングされるWebサイトを構築 • https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/ sample-templates-services-ap-northeast-1.html で公開しているサンプルのテンプ レートを用意

Slide 11

Slide 11 text

テンプレートからCDKアプリを作成 cdk migrate --stack-name CDKHelloWorld --language typescript --from-path ./S3_Website_With_CloudFront_Distribution.template

Slide 12

Slide 12 text

テンプレート生成したらエラーに…

Slide 13

Slide 13 text

なぜエラーになったのか? • 作られたスタックを呼び出すときに必要なプロパティに変数が定義されていた • スタックを呼び出す時のアプリケーション側ではそのプロパティの変数が何も設定されて なかったので追加してみた(今回の場合はホストゾーンを指定した) スタック側(プロパティの定義) アプリ側(スタックの呼び出し時)

Slide 14

Slide 14 text

もう少し掘り下げてみた • マネジメントコンソールを使って同じテンプレートから構築するとスタックの詳細設定のとき にホストゾーンを聞かれる • cdk migrateではこのパラメータを聞くところがプロパティの変数としてスタックで呼び出 すときに設定するように作られているよう

Slide 15

Slide 15 text

それでもエラーに…

Slide 16

Slide 16 text

このエラーの原因は? • スタック内でデプロイ先のリージョン名を参照しているが、そのデプロイ先のリージョンをア プリケーション側で何も設定していない • 実はアプリケーション側ではリージョン名、アカウントIDを定義するenvオブジェクトはコメ ントアウトしてた スタック側(リージョンを参照している) アプリ側(envオブジェクトの定義を追加)

Slide 17

Slide 17 text

無事にCloudFormation のテンプレートが再生成 された🎉

Slide 18

Slide 18 text

おまけ • WordPressを構築するスタックを作ろうとしたらエ ラーが大量に出まくった… • EC2上で構築するコマンドとかが定義されているの が原因かもしれないけど、これだけエラーあったら 自分で一から構築したほうが早いかも…

Slide 19

Slide 19 text

まとめ • CloudFormationで構成したスタックをCDKに移行することができた • そのままデプロイできなくて多少手直しが必要になることもあり • 非対応のスタックなどもあったりするので、まだまだ伸びしろがある • CloudFormationのテンプレートから改造するときにCDKに変換すればAWSの 環境構築が効率よくなるかも

Slide 20

Slide 20 text

END