Slide 1

Slide 1 text

Copyright SKYARCH NETWORKS Inc. All Rights Reserved. JAWS-UG CDK⽀部 #12 巷で噂の”cdk migrate”に⼊⾨してみた 辻川弘規 株式会社スカイアーチネットワークス 2024/2/21

Slide 2

Slide 2 text

⾃⼰紹介 2 所属︓株式会社スカイアーチネットワークス SA部/デベロップメント課 職務︓インフラ設計/構築、アプリ設計/開発、PJマネジメント、なんでもやります 前職︓独⽴系SIer(アプリエンジニア -> AWS めっちゃハマった︕) 好きなサービス︓CDK ECS on Fargate Lambda Bedrock 好きな⾔語︓Python、TypeScript(ただしCDKでのみ) 資格︓AWS 12冠、G検定、⽣成AIパスポート(受かってたい) 趣味︓読書、競⾺鑑賞、映画鑑賞 辻川 弘規(つじかわ ひろき) re:Inventにて Pulumi君との2ショット @teriyakisu

Slide 3

Slide 3 text

Agenda Copyright SKYARCH NETWORKS Inc. All Rights Reserved. 01 02 03 04 05 3 はじめに cdk migrateとは ⼊⾨してみた まとめ おまけ

Slide 4

Slide 4 text

はじめに 4 EC2失踪事件から学ぶCDK CI/CD化への道 〜真相は変更セットにあり︕︖〜

Slide 5

Slide 5 text

はじめに 5 巷で噂の”cdk migrate”に⼊⾨してみた

Slide 6

Slide 6 text

はじめに 6 v2.126.0 で 新機能追加 お話すること ü AWS CDKの新機能( v2.126.0 ) “cdk migrate --from-scan” を解説 ü ハマった箇所の解説 お話しないこと ü $MPVE'PSNBUJPO΍AWS CDKについて ü L1やL2 Constructsについて -> Black Belt をぜひチェック︕ https://aws.amazon.com/jp/events/aws-event-resource/archive/ AWSサービス別 資料 https://github.com/aws/aws-cdk/releases/tag/v2.126.0

Slide 7

Slide 7 text

cdk migrateとは

Slide 8

Slide 8 text

cdk migrateとは 8 その前に... AWSサービスの主な構築パターン ① AWS コンソールによる⼿動構築 コンソール ② CloudFormationによる構築 Change set Stack Template ③ CDKによる構築 CloudFormation Template CDK Code

Slide 9

Slide 9 text

cdk migrateとは 9 その前に... AWSサービスの主な構築パターン ① AWS コンソールによる⼿動構築 コンソール ② CloudFormationによる構築 Change set Stack Template ③ CDKによる構築 CloudFormation Template CDK Code ⼿動構築したAWSリソースを CloudFormationやCDKで管理したい

Slide 10

Slide 10 text

cdk migrateとは 10 2⽉上旬にIaCジェネレーターが発表 -> AWSのリソースをスキャンし、CFnテンプレートを作成。 CFnスタックを作成することでCFnでの管理が可能に︕ ブログ書いたので ぜひチェック✔ CloudFormation(略 CFn)で管理したい⽅

Slide 11

Slide 11 text

cdk migrateとは 11 CDKで管理したい ブログ書いたので ぜひチェック✔ ① AWS CloudFormation スタックから移⾏(v2.100.0) -> $ cdk migrate --from-stack ② AWS CloudFormation テンプレートから移⾏(v2.100.0) -> $ cdk migrate --from-path ③ デプロイされたリソースからの移⾏(v2.126.0) -> $ cdk migrate --from-scan CDKへの移⾏⽅法 v2.100.0でcdk migrateのプレビュー版が発表 -> AWSリソースからcdkコード(L1 Constructs)を作成。 またcdk deployを⾏うことで、importまで対応(リソースの関連付け)

Slide 12

Slide 12 text

⼊⾨してみた

Slide 13

Slide 13 text

⼊⾨してみた 13 お⾒せするシナリオ 1. (事前準備)⼿動でWAFのリソースを作成 2. $ cdk migrate(スキャン及びcdkコードの作成) 3. $ cdk diff(差分確認) 4. $ cdk deploy(CFnスタック作成&cdk import) 5. リファクタリング

Slide 14

Slide 14 text

⼊⾨してみた 14 1.(事前準備)⼿動でWAFのリソースを作成 4つのRulesを適⽤ ログはS3へ Athenaっち任せた

Slide 15

Slide 15 text

⼊⾨してみた 15 migrateコマンドの解説 $ cdk migrate --from-scan new --stack-name "wafStack" --filter "type=AWS::WAFv2::WebACL" Console ü 新しいスキャンを開始 -> ”new” を選択 -> 初回スキャン時やスキャン後にリソースを追加したケースに使⽤ ü 最後に成功したスキャンを使⽤ -> “most-recent” or 無 を選択 -> filterオプションでリソースをフィルタリングし直したい場合に使⽤

Slide 16

Slide 16 text

⼊⾨してみた 16 migrateコマンドの解説 ü ⼀度に作成できるリソース数が最⼤100のため filterオプションの使⽤を推奨 ü AND / OR の2パターンで絞り込みが可能 -> --filter tag-key=env,tag-value=prd(ANDのみ) -> --filter type=AWS::DynamoDb::,tag-key=dev,tag-value=true --filter type=SQS::Queue (ANDとORの組み合わせ) $ cdk migrate --from-scan new --stack-name "wafStack" --filter "type=AWS::WAFv2::WebACL" Console

Slide 17

Slide 17 text

⼊⾨してみた 17 migrateコマンドの解説 https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/ref-cli-cdk-migrate.html オプションの 詳細はこちら

Slide 18

Slide 18 text

⼊⾨してみた 18 2.リソースのスキャン及びcdkコードの作成 VS Code IaC ジェネレーター スキャン開始すると IaCジェネレーターの画⾯からも スキャンの様⼦が分かります

Slide 19

Slide 19 text

⼊⾨してみた 19 2.リソースのスキャン及びcdkコードの作成 VS Code IaC ジェネレーター (どうやら) ⼀時的にIaCジェネレーターの CFnテンプレートが裏で作成

Slide 20

Slide 20 text

⼊⾨してみた 20 2.リソースのスキャン及びcdkコードの作成 VS Code IaC ジェネレーター ⼀時的に作成された CFnテンプレートは migrateが終わると⾃動削除

Slide 21

Slide 21 text

⼊⾨してみた 21 2.リソースのスキャン及びcdkコードの作成 VS Code IaC ジェネレーター migrate.jsonも⽣成されます。 コードの定義とAWSリソースを 紐付ける重要なファイルです。 cdk deployのタイミングで削除 cdkのソースセット の出来上がり︕

Slide 22

Slide 22 text

⼊⾨してみた 22 2.リソースのスキャン及びcdkコードの作成 WAFのWeb ACL以外にも ログ出⼒⽤のS3も作成。 IaCジェネレーター機能の 関連リソースが⾃動的に 追加されている模様

Slide 23

Slide 23 text

⼊⾨してみた 23 3.差分確認 実⾏結果 Resoucesが”[+(add)]”でなく、”[←(import)]”であるのがポイント︕ $ cdk diff Console

Slide 24

Slide 24 text

⼊⾨してみた 24 4. CFnスタック作成&cdk import 実⾏結果 $ cdk deploy Console 無事にimportが完了︕ CFnスタックで管理されてます

Slide 25

Slide 25 text

⼊⾨してみた 25 4. CFnスタック作成&cdk import(NG例) メインのWAF Web ACL部分も出⼒。 ただしコンソール画⾯とCFnの ⼊⼒パターンで異なるケースが あるようです。 ⼿動構築時︓descriptionは空で作成 CFnでは空の作成はNGのため cdk deployに失敗しました。

Slide 26

Slide 26 text

⼊⾨してみた 26 4. CFnスタック作成&cdk import(NG例) $ cdk deploy --no-execute Console --no-executeを追加し 変更セットからCFn差分を 確認した際に、すぐに”add”の変更セット が再作成される現象が発⽣。 おそらく cdk deployが成功した 時点で、migrate.jsonが削除されることが 原因のよう。

Slide 27

Slide 27 text

⼊⾨してみた 27 5. リファクタリング $ npm run test Console エンジニアの好きなキーワード そうです。リファクタリングですね。 せっかくなので、L1のコードをL2で 定義したいと思います。 (WAFはL1のみ対応のため、S3で実施) まずはスナップショット作成︕ リファクタリング前の状態をパシャ

Slide 28

Slide 28 text

⼊⾨してみた L1 L2 5. リファクタリング L2 で定義 Escape hatch overrideLogicalIdを⽤いて 論理IDを変更しないよう設定 スナップショットテストOK cdk diffも差分なし︕ 28

Slide 29

Slide 29 text

⼊⾨してみた 29 番外編 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import-supported-resources.html CloudFormationの対象リソースの ⼀覧表が作成されていました。 ü Import ü ドリフト検出 ü IaCジェネレーター検知 直近 Neptune構築の対応をしていたのですが ほぼリソースタイプのサポート外でした。涙

Slide 30

Slide 30 text

まとめ

Slide 31

Slide 31 text

まとめ 31 https://github.com/aws/aws-cdk/pull/28962 ü リリース直後に調査した際には情報が少なかったた め、GitHubのPRからコメントやソースコードを 読み漁りました。(楽しい︕) ü 登壇資料を作成する上で、たくさんのドキュメント に⽬を通したので⾮常に理解が深まりました。 サマリ ü cdk migrateのオプションさえ使いこなせば 簡単にスキャン&cdkコード化出来る︕ ü (脱)⼿動構築リソース︕CFn/CDK下で管理だ︕ ü 裏で動いてるIaCジェネレーターも凄い︕ 個⼈的感想 むちゃくちゃ丁寧なコメントで 読んでて楽しかったPR

Slide 32

Slide 32 text

おまけ

Slide 33

Slide 33 text

おまけ 33 cdk migrate発表以降、分かりやすい資料が︕︕ https://speakerdeck.com/ohmura/managing-existing-environment-with-aws-cfn-iac-generator

Slide 34

Slide 34 text

ご静聴ありがとうございます︕

Slide 35

Slide 35 text

Copyright SKYARCH NETWORKS Inc. All Rights Reserved. 35