CloudFormationの中で、UserData書きまくって、エラーハンドリングせずにノーガード戦法デプロイしていませんか?

AWS, CloudFormation

この記事は最終更新日から1年以上が経過しています。

CloudFormationを使った環境構築、デプロイを行っているのだが、
テンプレートの中で、UserDataを使って、S3からコードを取得したり、環境にあわせて、設定ファイルを書き換えたりという処理を行っている。

このUserDataの中で、例えばS3からのデータの取得に失敗した場合どうなるの??
取得コマンドだけ書いているだけだと、そのまま処理は走り、Stackのステータスが「CREATE_COMPLETE」になってしまう。
つまり、デプロイ失敗したままコンプリートを迎えてしまうわけです。

これが、Blue-Green Deploy手法をとっている場合は、GreenのStackの生成を行い、正しく作成が成功しているのを見届けてから、BlueからGreenに切り替えるので、必ずGreenのチェックが入る。だから、そこまで影響はないと考えられる。あった方がいいけど。

しかし、動的にstackを立ち上げたり、stackを落としたりというシステムを作成した場合は、
人間の目のチェックが入らないところで、勝手に起動、削除が動いているので、エラーハンドリングは入れておきたい。

もしS3で取得失敗した場合等は、正しく「ROLLBACK_COMPLETE」になってほしい。
これを実現するためには、CloudFomationで用意されているヘルパー関数を利用する。

cfn-initとcfn-signalを利用します。

AWSの公式ドキュメントだと、以下がサンプルコード。

cfn-signalに「-e」オプションで「0」を与えると、正しく生成成功したことを意味し、それ以外を与えると、ロールバックしてくれます。
これで、エラーハンドリグができるので、突っ走って「CREATE_COMPLETE」にならないようにできます!

この記事を書いた人

にょこた

PM(プロダクトマネージャー)目指して奮闘中、プログラムから、アーキテクト設計、サービス検討から、チームマネジメント、DevOps、いろいろやってます。

AWS, CloudFormation