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.
→
るおん
January 19, 2025
550
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
2.6k
20260401_blog_training.pdf
ryu20202
0
410
20260325_backlog_completion_notifier.pdf
ryu20202
0
380
LINEミニアプリからサービスメッセージを送信してみよう
ryu20202
0
440
全てのコンテキストを集約し真の仕様駆動を実現。プロジェクト全体の開発を高速化する方法
ryu20202
4
3.1k
【本日リリース】LINE Touchの詳細と使い方について世界最速で解説!LINE Touchの世界を体験してみよう!
ryu20202
0
18k
LINEミニアプリでのJPKIユースケースのご紹介
ryu20202
0
560
LINE Messaging API × OpenAI APIで入力音声の文字起こしBot作ってみた
ryu20202
0
600
クイック入力で実現するシームレスな会員登録
ryu20202
0
610
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
8
710
Skip the Path - Find Your Career Trail
mkilby
1
150
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
360
How to Think Like a Performance Engineer
csswizardry
28
2.6k
Claude Code のすすめ
schroneko
67
230k
Scaling GitHub
holman
464
140k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
RailsConf 2023
tenderlove
30
1.5k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
390
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