😎

CloudFormationの超詳細解説 3/4 実行編

2023/11/13に公開

はじめに

この記事はDevOps on AWS大全の一部です。
DevOps on AWS大全の一覧はこちら

この記事ではCloudFomationの実行に関連する内容を超詳細にまとめています。

具体的には以下流れで説明します。

  • Drift
  • ChangeSets
  • Rollback
  • Service Role
  • Stack Policy
  • DeletionPolicy

AWSの区分でいう「Level 200:トピックの入門知識を持っていることを前提に、ベストプラクティス、サービス機能を解説するレベル」の内容です。

この記事を読んでほしい人

  • CloudFormationがどういうサービスか説明できるようになりたい人
  • CloudFormationを採用するときのベストプラクティスを説明できるようになりたい人
  • AWS Certified DevOps Engineer Professionalを目指している人

Drift

DriftはCloudFormationで管理しているリソースがCloudFormationテンプレートの記述通りの状態で存在しているかを確認する機能です。

例えば、すべてのインフラストラクチャをCloudFormationテンプレートで管理してるプロジェクトがあるとします。
そのプロジェクトルールを知らない新規参画者がSecurityGroupをマネジメントコンソールで変更してしまいました。
という場合、CloudFormationテンプレートと実環境に差分が発生してしまいます。

この差分を見つけるために使うのがDrift機能です。
CloudFormationでスタック更新をする際には、念のためDriftを実行するのがベストプラクティスです。

なぜなら、トラブルシューティングなどで修正を最優先してCloudFormationテンプレートへの反映漏れがある、というのはよくある話だからです。
万が一Driftを実行しないと、トラブルシューティングで行った変更がすべて消え、再びトラブルを引き起こすことになります。

ただし、Driftはすべてのリソースで対応しているわけではないので自分たちが使っているリソースでも使えるかはAWS公式で確認をお願いします。

ChangeSets

ChangeSetsはスタック更新を実施するときに、変更の前後でどういった差分が出るかを一覧化したものです。
スタック更新をするときにChangeSetsを作るか作らないか聞かれるので、必ずChangeSetsを作って意図しない変更が入らないかを確認してからスタック更新を行うようにしましょう。

Rollback

RollbackとはCloudFormationのスタック作成あるいはスタック更新が失敗したときに、以前の状態に自動で切り戻す機能です。

スタック作成が失敗した場合のRollbackは作成成功していたリソースも含めスタックで管理しているすべてのリソースが削除され、作成前の状態に切り戻されます。

スタック更新が失敗した場合には作成成功していたリソースも含めスタックで管理しているすべてのリソースが切り戻しあるいは削除され、一番最近の成功したスタックの状態に切り戻されます。

どちらの場合でもログに失敗原因が出力されるので、Rollbackしたらログから原因調査を行いトラブルシューティングします。

Service Role

Service RoleはCloudFormationにスタックリソースを作成/更新/削除することを許可するIAMロールです。

IAMユーザにCloudFormationの細かい権限を設定するのではなく、CloudFormationというサービスがどういう権限かを設定します。

これにより、最小権限の原則を実現するためにスタックを操作するために必要なすべての権限をユーザーに与えたくないがCloudFormationのスタックを操作できるようにしたいという要件をクリアできるようになります。

Stack Policy

Stack PolicyはCloudFormationのスタック更新でアップデートを許可/禁止するリソースを定義するためのポリシーです。

CloudFormationのスタック更新について、デフォルトではすべてのリソースに対するすべてのアクションが許可されています。

しかし、特定のリソースだけは絶対に更新されたくない、という場合にStack Policyで該当リソースの更新を禁止します。

ただし、スタックポリシーは、スタックの更新時のみ適用され、IAMポリシーのようなアクセスコントロールは提供しない点に注意しましょう。

DeletionPolicy

スタック削除をするときに各リソースを残すのか、削除するのかをていぎできるのがDeletionPolicyです。
例えば、スタック削除するが、EBSはスナップショットを取っておきたい、という場合に利用できます。

DeletionPolicy スタック削除時の挙動 備考
Retain スタック削除時にリソースは保持されます なし
Snapshot スタック削除時にSnapshotを取得しリソースは終了します なし
Delete スタックを削除するとリソースも削除されます DeletionPolicyを指定しない場合のデフォルト動作です。
RDSのDBクラスターはデフォルトがSnapshotです。
S3バケットは中身が空でないと削除できません。

まとめ

この記事ではCloudFomationの実行に関連する内容を超詳細にまとめました。

  • Drift
  • ChangeSets
  • Rollback
  • Service Role
  • Stack Policy
  • DeletionPolicy

次回はCloudFormationの超詳細解説 4/4 Stack編です。

Discussion