AWS CloudFormation

CloudFormationはテキストのテンプレートからAWSのインフラストラクチャリソースを簡単に作成できるAWSの自動化サービスのひとつ。JSONかYAMLのテンプレートを作成してCloudFormationに渡すだけで、今まで手作業で行っていたユーザー作成、ポリシー設定、インスタンス作成などを全て自動で行うことができる。同じ構成を複数のアカウントで構築する際にも有用。

※ CloudFormationはAWSリソースをテンプレートから作成できるサービスであり、AWSのサービスを全く知らない初学者が始めに学ぶサービスではないことに注意。

ユースケース

例えば、CloudFormationは次のようなケースで利用される。

  • AWSリソースの環境構築を効率化
  • 複数のアカウントに同環境を構築
  • 開発標準に基づいてインフラの作成・更新
  • セキュリティ対応のテンプレート化
  • リソースの依存関係やプロビジョニングの順序を明確かつ確実に
  • ソフトウェアのように、インフラもバージョン管理

または、

  • AWSリソースを駆使してサービスを立ち上げる全てのシチュエーション

CloudFormationでは実に簡単にEC2やELBなどAWSリソースを作成でき、多くの作業を効率化・自動化できる。公式が配布しているサンプルテンプレートも多く、ユーザーはCloudFormationを利用することで様々なシチュエーションに合ったベストプラクティスな環境を即座に立ち上げることもできるだろう。例えば、RDSのMulti-AZ配置など。

テンプレートがテキスト形式であることの利点には、インフラをコード(YAMLやJSON)で管理できることや、作成した環境の更新・削除・複製が容易であり、作業者の技術力に依存しない環境構築を可能としている点が挙げられる。

テンプレートの書き方やCloudFormationの使い方は覚えておいて損が無く、むしろAWSを頻繁に利用するのであれば覚えておきたいサービスの1つ。

欠点

大変便利なCloudFormationではあるが、利用している中での欠点はいくつか発見した。大きくまとめると2つ。

  • S3とVPC周りのリソースが非常に消しにくい
  • 新しいAWSサービスは未対応のことがある

まず、S3バケットの作成を含むスタックを削除する場合は、事前にバケットを空にしておかないとスタックの削除(バケットの削除)に失敗する。これはスタックを削除する前にバケットを空にしておく他に、そのバケット自体を削除しておくことでも対応できるが、多少面倒くさい。

この症状で特に面倒臭いのは、CloudTrailのログをS3に保存している時だ。CloudTrailは設定でログを指定のS3バケットに保存できるのだが、これは即ち、ログファイルを消してバケットを空にしても忽ちに新しいログファイルが生成され、永遠にCloudFormationのスタックを削除できないということだ。この場合はファイルが生成されるまでの一瞬の隙間を狙ってスタックを削除するか、手動でバケットを削除するしか手段はない。他バケットのアクセスログを削除対象のS3バケットに保存している場合も同じ現象が起きる。

これと同じように、VPCリソース周りでは頻繁にスタックの DELETE_FAILED が発生する。作成時には問題なくとも、スタックの削除時に依存関係などが原因で削除に失敗する場合が多い。(依存関係とは、VPCに対してのSubnet、Subnetに大してのRouteTableなど。)これを回避するには、削除の順番を守らせるため、いくつかの必要なコンポーネントに対して DependsOn を付けておけばよい。ここで上げたもの以外でも、VPC周りではちょっとした変更を直接してしまいがちだ。スタック削除の失敗を引き起こしてしまわないよう、変更は必ずCloudFormationのテンプレートから行おう。

そしてわかりやすく一番困る部分が、比較的新しいサービスはCloudFormationから作成できない点だ。例えばこれには RekognitionKinesis Video Streams などが該当する。この場合は手動で作成するか、リソースの削除が面倒くさいがAWS CLIかSDKを利用していいかんじに作成するしかない。(Rekognitionより後に出たEKSのクラスターはもうCloudFormationで作成できるので、対応の順序は不明だ。)

results matching ""

    No results matching ""