Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CDKコマンド誤用による環境リソースの損失を防ぐ方法
Search
るおん
January 19, 2025
620
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CDKコマンド誤用による環境リソースの損失を防ぐ方法
るおん
January 19, 2025
More Decks by るおん
See All by るおん
「見せて決める」要件定義 Claude Design × Claude Code × Figma
ryu20202
0
3k
20260401_blog_training.pdf
ryu20202
0
530
20260325_backlog_completion_notifier.pdf
ryu20202
0
500
LINEミニアプリからサービスメッセージを送信してみよう
ryu20202
0
650
全てのコンテキストを集約し真の仕様駆動を実現。プロジェクト全体の開発を高速化する方法
ryu20202
4
3.6k
【本日リリース】LINE Touchの詳細と使い方について世界最速で解説!LINE Touchの世界を体験してみよう!
ryu20202
0
19k
LINEミニアプリでのJPKIユースケースのご紹介
ryu20202
0
760
LINE Messaging API × OpenAI APIで入力音声の文字起こしBot作ってみた
ryu20202
0
780
クイック入力で実現するシームレスな会員登録
ryu20202
0
780
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
HDC tutorial
michielstock
2
870
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
320
The Limits of Empathy - UXLibs8
cassininazir
1
670
Writing Fast Ruby
sferik
630
63k
Scaling GitHub
holman
464
140k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Invisible Side of Design
smashingmag
301
52k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Transcript
2025/01/17 クラスメソッドのAWS CDK事情⼤公開スペシャル#2 クラスメソッド株式会社 リテールアプリ共創部 Takagaki Ryuhei CDKコマンド誤⽤による環境リソースの 損失を防ぐ⽅法
⾃⼰紹介 2 • 2019年 4⽉ ⼤阪⼤学⼊学 ◦ 外国語学部中国語専攻 • 2022~2024年3⽉
アパレル系⾃社開発企業(イン ターン) ◦ toC向けLIFFアプリ ◦ 社内アプリ開発 • 2024年4⽉ クラスメソッド株式会社⼊社 ◦ LINEミニアプリ運⽤保守‧追加開発 • 実績 • 部署 ◦ クラスメソッド株式会社 ◦ リテールアプリ共創部 ◦ 24新卒 • 名前(ニックネーム) ◦ Takagaki Ryuhei ◦ X:るおん(@ruonp24) • 担当業務 ◦ LINEミニアプリ ◦ フロントエンド(React/Next.js) ◦ バックエンド(Node.js/Lambda) ◦ サーバレス構築(AWS CDK)
AWS CDKとは 3 • インフラストラクチャをプログラミング⾔語で定義できるIaCツール • TypeScript, Python, Java, C#などの⼀般的なプログラミング⾔語でAWSリ
ソースを定義可能 • 最終的にCloudFormationテンプレートに変換される 【主なメリット】 ✅ TypeScriptやPythonなどの親しいプログラミング⾔語でインフラ定義可能。 ループ処理や条件分岐などプログラミング⾔語特有の書き⽅ができる。 ✅ 環境構築の⾃動化と標準化。 ✅再利⽤性が⾼く素早い作成と破棄。 【主なコマンド】 デプロイ:cdk deploy リソース削除:cdk destroy
実運⽤中のプロジェクトでdestroyコマンドを打つとどうなるか? 4 • 当たり前ですが環境のリソースは全て失われ、動いている アプリケーションは動作しなくなります。 • 流⽯にこれをやってしまうエンジニアはいないはずです。 しかし、世の中にはこのDestroyコマンドを何も考えずに実⾏ してしまう⼈がいるんですよね...
cdk destroy実⾏ 5 何を隠そう、私です。 * 影響範囲は開発環境のみで、ステージン グ環境と本番環境にはユーザー影響なし。
影響 6 • 復旧期間:2⽇ • その間追加開発ができな かった。 • システム調査などもするこ とができなかった。
• ⼀部S3やDynamoDBのデー タが失われた
• cdk deployで復旧を試みる → 予想外の事態発⽣... • cdk deploy しても以下の理由で失敗 ◦
Retain属性を有効にしていたリソースが、destroy時に残って しまっており、同じ名前のS3バケットやDynamoDBテーブ ル、CloudWatchロググループをデプロイしようとして競合 発⽣。 ◦ Parameter storeに保存していたリソースのarnなどが変更さ れて依存関係が崩壊 AWS CDKならすぐ復元できるのでは? 7
1. Retain属性を持つリソースの⼿動削除 • 対象: DynamoDBテーブル、S3バケットやCloudWatchロググ ループ 2. SSMパラメータ更新 • Parameter
Storeに保存し、参照していたリソースのarnなどを 設定し直す 3. 設定ファイルの更新 • アプリケーションの環境変数を設定するconfigファイル修正 • CognitoユーザープールIDや AppSyncのapiUrlなども変更 復旧作業 8
• 追加開発においてDynamoDBの新しいテーブルを作成 ◦ 実装段階でパーティションキーを変更したくなった ◦ 既存のテーブルのパーティションキーは変更できないため、⼀度 テーブルを削除する必要があった。 ◦ cdk destory
-all • 原因分析: ◦ CDKコマンドの影響範囲の理解不⾜。 ◦ 開発環境をチームで共有しているという認識が薄かった。 そもそも何故destroyコマンドを打とうと思ったのか 9 → チームで再発防⽌策を模索
CloudFormationの削除保護を設定しましょう CloudFormation削除保護とは 公式ドキュメントによると > スタックの削除保護を有効にして、スタックが誤って削除されるのを防ぐことができます。削除保護を有効にした 状態でスタックを削除しようとすると、削除は失敗し、ステータスを含め、スタックが変更されることはありません。 終了保護は、スタック作成時に有効にすることができます。デフォルトでは、スタックの削除保護は無効です。ス タックの削除保護は、任意のステータスで設定できます ([DELETE_IN_PROGRESS] または
[DELETE_COMPLETE] を除く)。 対策 10
たった⼀⾏で設定可能! スタックの引数に`terminationProtection: true`を追加す るだけ CDKで実装すると 11 今⽇からできる!
有効化されているかを確認 12 削除保護がアクティブになっていることを確認
• リソース削除を防いでくれる! `Stack [TestStack] cannot be deleted while TerminationProtection is
enabled` この状態でdestroyコマンドを打つと 13
CloudFormation削除保護を有効化しておきましょう! 14 • 有効にするタイミング ◦ 初期開発時はdestroyをすることがあるかも知れません が、運⽤保守段階に⼊ったアプリケーションは全て削除 保護を有効にしておくのが良さそう。 • 有効にする環境
◦ 運⽤時のヒヤリハットを防ぐため開発環境のみでなくス テージング環境‧本番環境では有効にしておきましょ う。
まとめ 15 • CDKは便利だけど、実務レベルのアプリケーションで destroyした環境は簡単には復旧できない • CloudFormation削除保護を有効にしてヒヤリハットを 防ぎましょう。
• のんピ 「AWS CDKで管理しているスタックの削除保護を有効化してみた」, Developers.IO, 2022年3月12日, https://dev.classmethod.jp/articles/enable-delete-protection-for-stacks-managed- by-aws-cdk/ • AWS
Documentation 「CloudFormation スタックの削除を防⽌する」, AWS CloudFormation ユーザーガイド, https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide /using-cfn-protect-stacks.html 参考資料 16
None