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
650
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
3.1k
20260401_blog_training.pdf
ryu20202
0
580
20260325_backlog_completion_notifier.pdf
ryu20202
0
530
LINEミニアプリからサービスメッセージを送信してみよう
ryu20202
0
700
全てのコンテキストを集約し真の仕様駆動を実現。プロジェクト全体の開発を高速化する方法
ryu20202
4
3.6k
【本日リリース】LINE Touchの詳細と使い方について世界最速で解説!LINE Touchの世界を体験してみよう!
ryu20202
0
19k
LINEミニアプリでのJPKIユースケースのご紹介
ryu20202
0
790
LINE Messaging API × OpenAI APIで入力音声の文字起こしBot作ってみた
ryu20202
0
820
クイック入力で実現するシームレスな会員登録
ryu20202
0
810
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
A better future with KSS
kneath
240
18k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
400
KATA
mclloyd
PRO
35
16k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Git: the NoSQL Database
bkeepers
PRO
433
67k
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