2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CloudFormationを運用する上で知っておきたかったこと

Posted at

運用してて困った・知っておきたかったことをつらつら書きます
自分が運用してた範囲なので内容は散発的です

基本的にaws-cdkで運用してきてるのでyml/jsonに関する事情はあんまり触れないです

tl;dr

公式のユーザーガイド を隅々まで読もう

DeletionPolicyについて

公式ドキュメント

問題になるケース

  • リソースの削除をしたかったのにDeletionPolicyがデフォルトでRetainになってるケースがあり、リソースが残り続けてしまう
  • うっかり論理名を変更しちゃってデプロイした結果、削除されてほしくないリソースに対して削除→作成が走ってしまう

知っておきたかった

  • そもそもDeletionPolicyという概念が存在する
  • DeletionPolicyがデフォルトで設定されているリソースがある
    • AWS::RDS::DBCluster など
    • aws-cdkの場合、aws-cdkのデフォルト実装でRetainになってテンプレートが生成されるリソースがある( AWS::S3::Bucket などが該当)

Stackの削除保護について

公式ドキュメント

問題になるケース

  • 削除保護をしてないStackを誤って削除してしまう
    • 恐怖

知っておきたかった

  • 存在を知っておきたかった
  • 知ってる諸氏は必ず設定しましょう

スタックのリソースの更新動作について

公式ドキュメント

知っておきたかった

  • リソース更新時の振る舞いとして以下の3つがあること
    • 中断を伴わない更新(Update with No Interruption)
    • 一時的な中断を伴う更新(Updates with Some Interruption)
    • 置換 (Replacement)
  • 状態を持たないリソースは Replacement の変更をしても問題になりにくい
    • 例えばSecurityGroupなどは作り直しになっても問題がない
    • DBClusterやS3::Bucketなどのような状態を持つリソースが Replacement を伴う変更が発生する場合は特別な対応が必要になる

リソース同士の依存関係について

公式ドキュメント

知っておきたかった

  • 基本的にちゃんとCloudFormationの記述をしていればdependsOn属性が必要になることはない
  • 逆に上記ドキュメントにないケースで必要になった場合そもそも書き方が悪い可能性がある
    • CloudFormation側がリソース間の依存関係を解決できるような記述方法に直せるなら直すべき
    • (CloudFormationしぐさみたいなところはありそう)

CFn管理外リソースとの付き合い方

知っておきたかった

  • CFn管理外リソースに依存する場合、Stackを分ける
    • 例えばECSクラスタ、ECSタスク定義、タスク定義をキックするCloudWatchEventというリソースがあり、ECSタスク定義だけがCFn管理外だった場合、ClusterStack,EventStackの用に分離しておく
    • そうすれば、CFnとコンテナのデプロイをそれぞれ独立して運用できる

ECSの例だとわかりやすいが、あまり変更がないタイプのリソース(AWSアカウントをまたいだAssumeRoleのようなもの)だと見落としがちなので注意

問題になるケース

  • CFn管理外リソースに依存する・されるようなStack定義になっていると、0ベースでStack構築ができなくなる
    • たとえばECSタスク定義がないとそのタスク定義に依存するCloudWatchEventは定義できないので、もしECSクラスタとCloudWatchEventを両方同じStackで定義しているとStack構築を0から出来ない

(番外)aws-cdkで定義した論理名について出力されたテンプレート上ではアンダースコアが消し飛ばされている

問題になるケース

  • 論理名に依存した処理(例えば aws ec2 describe-instances コマンドで特定のインスタンスを取得したい、など)でaws-cdkの実装上で定義した名前が使えない

知っておきたかった

  • 論理名はキャメルケースで定義するべし
    • しれっと変換するくらいなら例外吐いて止まってほしい

Outputsの使い方・export/import/get_export

各種Stackの更新ステータスで取るべき対応

(時間切れでした)
(気が向いたら更新したい)


以上でした

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?