Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CDKコマンド誤用による環境リソースの損失を防ぐ方法

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for るおん るおん
January 19, 2025
440

 CDKコマンド誤用による環境リソースの損失を防ぐ方法

Avatar for るおん

るおん

January 19, 2025
Tweet

Transcript

  1. ⾃⼰紹介 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)
  2. AWS CDKとは 3 • インフラストラクチャをプログラミング⾔語で定義できるIaCツール • TypeScript, Python, Java, C#などの⼀般的なプログラミング⾔語でAWSリ

    ソースを定義可能 • 最終的にCloudFormationテンプレートに変換される 【主なメリット】 ✅ TypeScriptやPythonなどの親しいプログラミング⾔語でインフラ定義可能。 ループ処理や条件分岐などプログラミング⾔語特有の書き⽅ができる。 ✅ 環境構築の⾃動化と標準化。 ✅再利⽤性が⾼く素早い作成と破棄。 【主なコマンド】 デプロイ:cdk deploy リソース削除:cdk destroy
  3. • cdk deployで復旧を試みる → 予想外の事態発⽣... • cdk deploy しても以下の理由で失敗 ◦

    Retain属性を有効にしていたリソースが、destroy時に残って しまっており、同じ名前のS3バケットやDynamoDBテーブ ル、CloudWatchロググループをデプロイしようとして競合 発⽣。 ◦ Parameter storeに保存していたリソースのarnなどが変更さ れて依存関係が崩壊 AWS CDKならすぐ復元できるのでは? 7
  4. 1. Retain属性を持つリソースの⼿動削除 • 対象: DynamoDBテーブル、S3バケットやCloudWatchロググ ループ 2. SSMパラメータ更新 • Parameter

    Storeに保存し、参照していたリソースのarnなどを 設定し直す 3. 設定ファイルの更新 • アプリケーションの環境変数を設定するconfigファイル修正 • CognitoユーザープールIDや AppSyncのapiUrlなども変更 復旧作業 8
  5. • 追加開発においてDynamoDBの新しいテーブルを作成 ◦ 実装段階でパーティションキーを変更したくなった ◦ 既存のテーブルのパーティションキーは変更できないため、⼀度 テーブルを削除する必要があった。 ◦ cdk destory

    -all • 原因分析: ◦ CDKコマンドの影響範囲の理解不⾜。 ◦ 開発環境をチームで共有しているという認識が薄かった。 そもそも何故destroyコマンドを打とうと思ったのか 9 → チームで再発防⽌策を模索
  6. • のんピ 「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