Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
地獄絵図!CDKプロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
アキキー | Akihisa Ikeda
July 12, 2025
1.1k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
地獄絵図!CDKプロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法
アキキー | Akihisa Ikeda
July 12, 2025
More Decks by アキキー | Akihisa Ikeda
See All by アキキー | Akihisa Ikeda
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4k
ECR拡張スキャンでSBOMを収集して サプライチェーン攻撃の影響調査を 爆速で終わらせてみた
akihisaikeda
2
240
AWSはOSSをどのように 考えているのか?
akihisaikeda
1
150
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
230
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
4
240
AWS CDKの推しポイントN選
akihisaikeda
1
320
AWS CDK初期設定のプラクティス集 with Projen
akihisaikeda
2
480
AWS CDKの推しポイント 〜CloudFormationと比較してみた〜
akihisaikeda
4
760
AI生成記事をリライトし満足度を上げようとしたら大変だった話
akihisaikeda
0
63
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
400
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
360
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
22k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
160
Design in an AI World
tapps
1
230
Information Architects: The Missing Link in Design Systems
soysaucechin
0
960
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
610
Transcript
AWS CDK Conference Japan 2025 地獄絵図!CDK プロジェクトを手動更新して生まれた 大量のプロパティ差分を解消する方法 2025.7.12(土) 池田
晃尚(@akikii__) 1
自己紹介 アキキー(池田 晃尚) AWS エンジニア 好きな AWS サービス AWS CDK
Amazon Q Developer CLI 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 2
新しいチームに入ったら... メンバー「このプロジェクトでは AWS CDK でリソースを定義してるよ」 メンバー「リソースの変更は手動でやってるよ!!!」 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK
Conference Japan 2025 3
あなたはどうしますか?? 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 4
IaC の鉄則 IaC で定義したリソースは IaC 以外の方法で変更しない Stack のリソースを CloudFormation 以外の方法で変更しないでください。変更す
ると Stack の Template と Stack リソースの現在の状態の間で不一致が起こり、 Stack の更新または削除でエラーが発生する場合があります。 CloudFormation ベストプラクティス 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 5
本セッションの概要 もはや地獄絵図になってしまった、差分が大量に発生している CDK プロジェクトを再 生する方法を紹介します! 大事にすること 既存のリソースやプロパティを置き換えない CDK ソースの可読性を犠牲にしない 明示的に設定しているプロパティは全て管理する
地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 6
どうして大量に差分が発生したの? リリース直前に立て込んでいて手動で変更しちゃった... 突発的なエラー対応にて手動で直しちゃった... 一回手動で変更しちゃうと元に戻すのがめんどくさい... 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan
2025 7
いっそのこと新しい環境作っちゃえば? えらい人「今動いてるんだからそれを使え!!!!」 僕「はい 」 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan
2025 8
どうして差分の解決が大変なの? ① 検出できない差分が存在する ② Stack へのインポートは全てのプロパティを指定する必要がある 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK
Conference Japan 2025 9
① 検出できない差分が存在する CDK ソースとリソースのプロパティを検出する方法は 2 種類ある cdk diff cdk drift
MyPC Deploy diff Template Synth CDK ソース AWS Cloud Resources Manage Stack drift 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 10
① 検出できない差分が存在する cdk diff... CDK で合成した Template と Stack との差分を検出する
S3 Bucket (旧) S3 Bucket (新) 差分 Stack Template 追加 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 11
① 検出できない差分が存在する cdk drift... Stack とリソースの差分を検出する Stack Resource (S3) 差分
地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 12
① 検出できない差分が存在する cdk diff と cdk drift があれば Stack とリソースの差分は検知できない?
→ ドリフト検知では、Stack に定義されていないプロパティは差分を検出できない!! MyPC Deploy diff Template Synth CDK ソース AWS Cloud Manage Stack Resource (S3) ❌ バージョニング バージョニング:有効 Console drift ❌ バージョニング 差分なし! 差分なし! 設定変更 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 13
② Stack へのインポートは全てのプロパティを指定する必要がある cdk import とは? CDK にリソースの定義を書き、 cdk import
すると Stack にリソースを取り込める Resources CDK Source CDK ソースに追加 Manage Stack Resources AWS Cloud (import 前) Resources Manage Stack AWS Cloud (import 後) cdk import 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 14
② Stack へのインポートは全てのプロパティを指定する必要がある 全てのプロパティを指定するのが大変... マネコンや CLI コマンドでリソース単位で確認するのは大変 定義されなかったプロパティは CloudFormation Stack
で管理されない 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 15
解決編 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 16
解決の流れ STEP1. Remove フェーズ Deploy CDK ソース リソース (S3 )
STEP2. Migrate フェーズ Scan リソース (S3 ) CDK ソース X Delete ( 保護) スタック Migrate STEP3. Refactor フェーズ CDK IaC ジェネレータ STEP4. Import フェーズ Import CDK ソース リソース (S3) スタック Import Refactor リソース (L1 Construct ) リソース (L2 Construct ) ※ フェーズ名は独自に付けました 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 17
STEP 1. Remove フェーズ 対象のリソースを Stack から除外するフェーズ STEP1. Remove フェーズ
Deploy CDK ソース リソース (S3 ) X Delete ( 保護) スタック 1. 依存関係の調査 2. 対象リソースに削除保護をかける 3. Stack から対象のリソースを除外する 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 18
Remove フェーズ:① 依存関係の調査 依存度の深いリソースから置き換えを検討する → 依存関係先を置き換える時、再度同じリソースを更新することとなるため Aurora Lambda DynamoDB ECS
API GW ALB VPC リソースの依存関係 Aurora API Gateway ALB Lambda ECS DynamoDB VPC 依存関係性 深い 浅い Stack 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 19
Remove フェーズ:② 対象リソースに削除保護をかける RemovalPolicy とは リソースを削除するときの挙動を設定する RemovalPolicy.DESTROY: 削除する RemovalPolicy.RETAIN: 保持する
RemovalPolicy.SNAPSHOT: スナップショットを作成して削除する RemovalPolicy.RETAIN_ON_UPDATE_OR_DELETE: 作成時は削除。作成完了後は保 持する → RemovalPolicy.RETAIN を設定して、Stack からは削除するがリソースは保持する 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 20
Remove フェーズ:③ Stack から対象のリソースを除外する CDK ソース から対象リソースの記述を除外する (Refactor フェーズで使うのでコメントアウトで OK)
地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 21
Remove フェーズ:③ Stack から対象のリソースを除外する 対象リソースを参照しているリソースは、 fromXxx メソッドを使って取得する 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS
CDK Conference Japan 2025 22
Remove フェーズ:③ Stack から対象のリソースを除外する cdk diff で差分を確認 リソースをスタックから除外 リソースの参照を追加 地獄絵図!CDK
プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 23
Remove フェーズ:③ Stack から対象のリソースを除外する cdk deploy でリソースを除外する CloudFormation コンソール上でイベントを確認すると、DELETE_SKIPPED になってい
る 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 24
STEP 2. Migrate フェーズ 対象のリソースを検出して、CDK ソースに取り入れるフェーズ STEP2. Migrate フェーズ Scan
リソース (S3 ) CDK ソース Migrate IaC ジェネレータ 1. IaC ジェネレータで全体を Scan する 2. cdk migrate で CDK プロジェクトを作成 3. 対象のリソースを CDK プロジェクトに取り込む 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 25
Migrate フェーズ:① IaC ジェネレータで全体を Scan する IaC ジェネレータとは? CloudFormation の機能
AWS アカウントにあるリソースを Scan する Scan したリソースから Template を作成できる Scan AWS Cloud IaC Managed Scan 結果 作成 IaC ジェネレータ Scan Template 作成 IaC ジェネレータ Template 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 26
Migrate フェーズ:① IaC ジェネレータで全体を Scan する 〜注意点〜 Full Scan を推奨
→ 特定のリソースに限定すると漏れが発生する可能性があるため リソースが多いと時間がかかる 1 日に Full Scan できる回数は限られている リソースの数が 10,000 未満の場合 10 回、超えていれば 1 回 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 27
Migrate フェーズ:② cdk migrate で CDK プロジェクトを作成 cdk migrate とは?
AWS リソースを CDK プロジェクトに取り込める実験的機能 リソースは L1 Construct となる 対応していないリソースタイプも数多く存在する IaC ジェネレータ Scan filter cdk migrate CDK プロジェクト dynamodb.CfnTable lambda.CfnFunction iam.CfnPolicy iam.CfnRole 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 28
Migrate フェーズ:② cdk migrate で CDK プロジェクトを作成 cdk import ではなく
cdk migrate を使う理由 cdk import...リソースとプロパティを明示的に指定 cdk migrate...リソース及びプロパティは指定元(Template、Scan、Stack)から値 を取得 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 29
Migrate フェーズ:③ 対象のリソースを CDK プロジェクトに取り込む 生成したプロジェクトから、リソースの記述を既存プロジェクトにコピぺ コピー& ペースト CDK プロジェクト
(cdk migrate で⽣成) CDK プロジェクト(いままでの) ※ cdk migrate に失敗したらトラブルシューディング: 「cdk migrate が失敗する」を参 照 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 30
STEP 3. Refactor フェーズ CDK ソースの可読性を向上させるフェーズ STEP3. Refactor フェーズ CDK
リソース (L2 Construct ) Refactor リソース (L1 Construct ) 1. スナップショットテストを作成/更新する 2. L1 → L2 Construct にリファクタリング 3. リソースの参照関係、シークレットを置き換える 4. スナップショットテストを更新する 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 31
Refactor フェーズ:① スナップショットテストを作成/更新する スナップショットテストとは? Template (旧) Template (新) ⽣成 ⽣成
CDK ⽐較 Test 想定した差分であることを検証 変更点 バージョニング:無効 S3 → スナップショットテストを実施することにより、リファクタリング後にリソースの 差分がないことを証明できる 参考:AWS CDK における単体テストの使い所を学ぶ 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 32
Refactor フェーズ:② L1 → L2 Construct にリファクタリング Construct とは?...リソース群を定義する単位 CloudFormation
Stack L2 Construct L3 Construct ApplicationLoadBalancedFargateService Bucket Bucket CfnBucket L1 Construct 抽象度 ⼩ ⼤ ・・・ 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 33
Refactor フェーズ:② L1 → L2 Construct にリファクタリング L1 Construct...リソースのプロパティが CloudFormation
のプロパティと 1:1 で対応して いる CloudFormation Template S3 Bucket CDK L1 Construct aws_s3.CfnBucket 1:1 で対応 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 34
Refactor フェーズ:② L1 → L2 Construct にリファクタリング L2 Construct...リソースのプロパティが扱いやすいように抽象化されている CloudFormation
Template CDK L2 Construct aws_s3.Bucket S3 Bucket 抽象化 KMS Key ⾃動的に作成 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 35
Refactor フェーズ:② L1 → L2 Construct にリファクタリング L2 に置き換えることで、L1 の複雑で冗長なプロパティを書かなくてよい
→ 可読性が向上する L1 Construct L2 Construct 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 36
Refactor フェーズ:② L1 → L2 Construct にリファクタリング 〜注意点〜 L2 に置き換えた時に論理
ID が更新されるのでオーバーライドする 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 37
Refactor フェーズ:② L1 → L2 Construct にリファクタリング スナップショットテストを実行して、リソースやプロパティの設定に差分がなくなるま で修正する ※
TIPS: 「生成 AI を頼る」を参照 ※ トラブルシューティング: 「スナップショットテストが合わない」 を参照 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 38
Refactor フェーズ:③ リソースの参照関係、シークレットを置き換える cdk migrate で出力した CDK ソースは、参照やシークレットがハードコードされてい るので置き換える 地獄絵図!CDK
プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 39
Refactor フェーズ:④ スナップショットテストを更新する スナップショットテストを更新する → 論理 ID はスナップショットテストで有効な値なのでオーバーライドを削除 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法
AWS CDK Conference Japan 2025 40
STEP 4. Import フェーズ Stack にリソースを取り込むフェーズ STEP4. Import フェーズ Import
CDK ソース リソース (S3) スタック Import 1. cdk import で Stack にリソースを取り込む 2. cdk drift で Stack とリソースに差分がないか検証する 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 41
Import フェーズ:① cdk import で Stack にリソースを取り込む cdk import とは?(再掲)
CDK にリソースの定義を書き、 cdk import すると Stack にリソースを取り込める Resources CDK Source CDK ソースに追加 Manage Stack Resources AWS Cloud (import 前) Resources Manage Stack AWS Cloud (import 後) cdk import 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 42
Import フェーズ:① cdk import で Stack にリソースを取り込む cdk import を実行後に質問に答えていき、想定したリソースのみ
Stack にインポート できることを確認する 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 43
Import フェーズ:② cdk drift で Stack とリソースに差分がないか検証する 取り込んだリソースのプロパティに差分がある可能性があるため cdk drift
で差分検 知をする 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 44
差分解消完了!!! お疲れ様でした 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 45
...差分は解消できたけど、たくさん設定書いてあるから可読性そんなに高くな いよね...? 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 46
IaC 管理さえできていればもう怖くない! IaC 管理の元、どんどんプロパティを更新しちゃいましょう!! 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan
2025 47
TIPS 生成 AI を活用する 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan
2025 48
生成 AI を活用する L1 Construct → L2 Construct の変換 →
スナップショットテストでガードしているので、生成 AI にまかせても OK! ただし、スナップショットテスト自体を更新されないよう注意 リソースの関連性の抽出 ex) API Gateway を migrate するとき、Lambda Permission が検出できない → 関連しそうなリソースを、生成 AI を利用して検出するのもあり 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 49
トラブルシューティング cdk migrate が失敗する スナップショットテストが合わない IaC ジェネレータ、 cdk import がリソースタイプをサポートしていない
地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 50
cdk migrate が失敗する CDK で対応していないプロパティがある場合エラーになる Migrate failed for `dynamodb`: DynamodbStack
could not be generated because WarmThroughput is not a valid property for resource DynamoDBTableSampleDatastoreTable6900098D1T62J7NNMU9XG of type AWS::DynamoDB::Table 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 51
cdk migrate が失敗する CloudFormation コンソールから、IaC ジェネレータの Template を確認したら、 cdk import
しようとした Template が存在する 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 52
cdk migrate が失敗する Template をローカルにダウンロードし、エラーが出ているプロパティを削除 その後、 --from-path で Template のパスを指定して
cdk migrade を再実行する 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 53
スナップショットテストが合わない L1 → L2 Construct に置き換える時、どうしてもプロパティが合わないことがある - "TimeToLiveSpecification": { -
"Enabled": false, - }, L2 Construct では、不要なプロパティを設定できないように抽象化されていることが ある。 可読性が高い書き方となっているためなので、差分を理解して許容する必要がある。 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 54
IaC ジェネレータ、cdk import がリソースタイプをサポートしていない 公式ドキュメント:リソースタイプのサポート ...実はかなり苦しいです 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK
Conference Japan 2025 55
IaC ジェネレータ、cdk import がリソースタイプをサポートしていない IaC ジェネレータ リソースを削除するとき、削除するリソース名を控えておく L2 Construct に置き換えた時に差分としてでてきていないリソースを
Template に 追加する 生成 AI を利用してリソースの関連性を検証する cdk import 現状は存在しないが、存在したら不可能... 地獄絵図!CDK プロジェクトを手動更新して生まれた大量のプロパティ差分を解消する方法 AWS CDK Conference Japan 2025 56
ありがとうございました! 57