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

CloudFormationで管理されたシステムの変更でエラー連発した話

97b3cca999b52cb5296675ac0a5c12cd?s=47 emi
July 23, 2021

 CloudFormationで管理されたシステムの変更でエラー連発した話

20210722(木)「JAWS-UG CLI専門支部 #188R CloudFormation入門」でのLTで発表したものです。(私がCFn好きな人に見えるとご指摘いただきましたので微修正しております。私はCFn苦手です)

波多野さんのスライドダイジェスト版ではメリットデメリットあわせてもっと深く言及されています↓
CloudFormationの理想と現実 〜 冷静にCloudFormationを考える/20210722-jawsug-cli-cloudformation
https://speakerdeck.com/opelab/20210722-jawsug-cli-cloudformation

97b3cca999b52cb5296675ac0a5c12cd?s=128

emi

July 23, 2021
Tweet

Transcript

  1. CloudFormationで管理された システムの変更で エラー連発した話 2021/07/22(木) JAWS-UG CLI専門支部 #188R CloudFormation入門

  2. 目次 • 背景 • 奮闘記 • ここまで試行錯誤して • CloudFormation難点 •

    CloudFormationのユースケース
  3. 背景 好きなAWSサービスは CloudFormationです! ←私 • よくLTで聞くセリフ

  4. 経緯 • 前任者異動済み、システムについて何も知らない システムを利用する ユーザが変わったり 増えたりするので、 アクセス元IPの 変更をお願いします 奮闘記

  5. • マネジメントコンソールからEC2にとんで~ セキュリティグループ変えよう 奮闘記

  6. セキュリティグループ変えよう 実機とCFnテンプレートに 差異が出たらまずそう AWSソリューションアーキテクトアソシ エイトの勉強で「ドリフト」という単語 は知っていた (前任者の神の声) CloudFormationテンプレートが あるのでそれを変更 してください

    奮闘記
  7. CFnテンプレートを変更して適用 しよう • Systems Managerのパラメータを定義している yamlファイルあり • このパラメータのNWセグメントを追加・変更 すればいいんだ! 奮闘記

    既に探すのが つらい
  8. もちろんエラー • SSMパラメータで定義したNWセグメントがセ キュリティグループで使用されている(紐づい ている)ためエラー 192.168.10.0/24 奮闘記 ~in useなんちゃらというエラーが出ます

  9. もちろんエラー • SSMパラメータで定義したNWセグメントがセ キュリティグループで使用されている(紐づい ている)ためエラー いったん変更する必要がある パラメータを使っている部分 をコメントアウトします 奮闘記 めんどくさい

    やり方これで あってる?
  10. セキュリティルールを追加したら… • 既存のセキュリティグループのルール数が多す ぎてセキュリティルールを追加したらなんと上 限60超えた • AWSに上限緩和申請している時間がなかった • とりあえずセキュリティグループをもう一つ作 成してEC2に適用することにした

    (公式ドキュメント) Amazon VPC クォータ https://docs.aws.amazon.com/ja_j p/vpc/latest/userguide/amazon- vpc-limits.html 奮闘記
  11. セキュリティグループを追加してEC2 のスタックを更新しようとしたら… • EC2を置換(既存EC2を削除して新しいEC2を作 ろうとする挙動)しそうになった 奮闘記 本番で動いてるインスタンス削除 したら大事故になるのでは…? またどこか紐づいてる… •

    試しに検証環境でスタック更新を回したところ、 EC2のIPアドレスが別のパラメータと紐づいて いたため結局エラーで止まる
  12. • セキュリティグループの紐づけだけ手動で実施 した • CFnテンプレートはドリフトしないのでこれで よしとした セキュリティグループを追加してEC2 のスタックを更新しようとしたら… 奮闘記

  13. ここまで試行錯誤して • エラーを起こさないようにCFnテンプレートの 変更と環境変更を実施するには 1. 変更すべきパラメータを探し出す 2. 変更すべきパラメータに紐づいた部分を コメントアウトしスタック変更 3.

    パラメータを変更してスタック変更 4. コメントアウトした部分を戻してスタック変更 ↑これを初手でやるのはきつい ベストプラクティスではなさそう…
  14. 「ドリフト検出」 • 実環境とCFnテンプレートでリソースの差分を検出す る機能 • 手動で修正した箇所に差異がないかチェックするの に便利なツールではある • 差分を自動で修正してくれる機能はないので結局自 分で修正する必要がある

    • ドリフト検出サポートしていないサービスもあるら しい 使える機能 (公式ドキュメント) インポートおよびドリフト検出オペ レーションをサポートするリソース https://docs.aws.amazon.com/ja_jp/AW SCloudFormation/latest/UserGuide/reso urce-import-supported-resources.html
  15. 使える機能 「ロールバック設定」 • 本番環境に予期せぬ変更が加わらないようあらかじ めアラームを仕込んでおく • 一番最初にそこまで見越して作りこんでいるシステ ムに私はまだ出会っていない

  16. CloudFormation難点 • 解読・修正にスキルと慣れが必要 • 追跡つらい

  17. CloudFormationのユースケース ★CFnが適しているケース • 必ず実施すべきセキュリティ設定をテンプレートにしておく  「CloudTrail証跡有効化する」  「ルートアカウントのMFAを有効化しアクセスキーを削除する」 等 •

    ハンズオン • 本番環境の変更作業の前に検証環境を一発展開して検証  実際は本番と全く同じ環境を検証のためにデプロイできることは 少ない  検証用のSWのライセンスがない、大量インスタンスを展開すると 課金 ★CFnだとつらいケース • すべてをCFnだけで管理しようとする • いろんなパラメータがスタック間で紐づいている • 巨大なシステム
  18. • よくLTで聞くセリフ おわり 好きなAWSサービスは CloudFormationです! ←私 CloudFormation 苦手です!