Amazon Web Services ブログ

New – AWS CloudFormation の変更点

AWS CloudFormation を使用すると、AWS リソースのコレクション (「スタック」) を制御された予想可能な方法で作成、管理、および更新できます。CloudFormation を使用して、本番ワークロードを稼働するためのスタックの更新が 1 日に何十万回も実行されています。お客様は、初回のテンプレートを定義した後、要件が変わるとテンプレートを修正します。

通常「コードとしてのインフラストラクチャ」と呼ばれるこのモデルを使用すると、開発者、アーキテクト、および運用担当者の各チームが AWS リソースのプロビジョニングと構成を詳細に制御できるようになります。この制御と説明責任の詳細さは、CloudFormation を使用する際に最もはっきりとわかる利点の 1 つです。ただし、CloudFormation には、それほどはっきりとはわからないものの、同じくらい重要な利点がいくつかあります。

整合性 – CloudFormation チームは、AWS チームと連係して、リソースの作成、更新、および削除のセマンティクスについて、新しく追加されたリソースモデルでも整合性を保つようにしています。また、EBS ボリュームや RDS ボリュームの暗号化用の KMS キーなど、関連リソースの再試行、べき等性、および管理について説明できるようにしています。

安定性 – どのような配信システムでも、結果整合性に関連する問題は頻繁に発生し、必ず対処する必要があります。CloudFormation チームではこのような問題を十分認識しており、変更のプロパゲーションが必要な場合には、配信を実行する前に、自動的にそのプロパゲーションが完了するのを待つ仕組みになっています。多くの場合、CloudFormation チームはサービスチームと連係して、API と成功シグナルが CloudFormation で適切に使用できるよう調整されていることを確認します。

均一性 – CloudFormation では、スタックが更新される際に、インプレース更新とリソース置換のいずれかが選択されます。

この作業はすべて一定の時間がかかり、関連サービスが公開または更新される前にテストを完了できない場合もあります。

更新のサポートの向上
先述のように、AWS の多くのお客様が、本番スタックの更新を管理するのに CloudFormation を使用しています。お客様は、既存のテンプレートを編集 (または新しいテンプレートを作成) した後、CloudFormation の更新スタックオペレーションを実行して、変更を有効にします。

新しいテンプレートやパラメータ値に合わせてスタックが更新される際に CloudFormation が実行する変更の詳細について知りたい、というお問い合わせが、多くのお客様から寄せられています。変更のプレビューを行い、その変更が期待通りであることを確認してから、更新を実行するためです。

CloudFormation のこの重要なユースケースに対応するために、「変更セット」という概念を導入しました。変更セットを作成するための第 1 段階として、お客様は、更新対象のスタックに対する変更内容を送信します。CloudFormation では、更新対象のスタックが新しいテンプレートやパラメータ値と比較され、変更セットが作成されます。お客様は、この変更セットを確認してから、適用 (実行) するかどうかを選択できます。

この新しいモデルにより、変更される可能性のある内容を詳細に知ることができるだけではなく、更新をより詳細に制御できるようにもなります。IAM を使用すると、UpdateStackCreateChangeSetDescribeChangeSet、および ExecuteChangeSet といった CloudFormation の特定の機能の使用を制御できます。例えば、ほとんどの開発者に変更セットの作成とプレビューを許可するものの、実行は経験豊富な開発者で構成される少人数のグループのみに許可する、といった具合です。自動化項目をいくらか追加すると、データベースサーバーやネットワークといった主なリソースを変更しようとするとアラートが発生する、または追加の承認を要求するといった設定を行うこともできます。

変更セットを使用する
変更セットに関連する操作を順を追って見ていきましょう。AWS コマンドラインインターフェイス (CLI)AWS Tools for Windows PowerShell、および CloudFormation API を使用して、通常と同じ機能を利用できます。

今回は、まず、1 つの EC2 インスタンスで LAMP スタックを実行するスタックを作成します。リソースが作成されます。

その後、より複雑なアーキテクチャを利用することにします。同僚から適切なテンプレートをもらいました。「信頼するが確認する」という原則に基づいて、テンプレートを使用するとどうなるかを確認するために、変更セットを作成します。[Create Change Set] をクリックします。

その後、新しいテンプレートをアップロードして、変更セットに名前を割り当てます。テンプレートでパラメータを使用する場合は、ここで値を入力できます。

ここでは、既存のタグを変更することも、新しいタグを追加することもできます。スタックの詳細オプションを設定することもできます (当然、詳細オプションは、変更セットを実際に実行するまで適用されません)。

1、2 回クリックして設定を確定すると、テンプレートが分析され、スタックに適用した場合の結果がチェックされ、変更のリストが表示されます。

変更を有効にするには、ここで [Execute] をクリックします。変更セットの適用を見送ることも、他の方法を探すために変更セットをいくつか作成することもできます。準備が整ったら、変更セットを指定して、実行します。

CloudFormation がアクションを開始し、変更セットに沿って変更が実装されます。

数分後には、スタックの新しい構成が整い、完全に運用できるようになります。

これで完了です。先述のように、実行する変更セットを選択する前に、複数の変更セットを作成して、試してみることができます。この場合、実装しなかった変更セットは不要になるので、破棄します。

ロールバックを管理する
スタックの更新に失敗した場合、可能な限り、更新前の状態にロールバックされます。ロールバックオペレーションは失敗することもあります。多くの場合、ロールバックが失敗する原因は、CloudFormation の範囲外で行われた変更です。最近、ロールバックの結果をより適切に制御できるよう、新しいオプションが公開されました。このオプションの詳細については、Continue Rolling Back an Update for AWS CloudFormation stacks in the UPDATE_ROLLBACK_FAILED state をご覧ください。

今すぐ利用可能
変更点は今すぐ利用できます。ぜひご使用ください。


Jeff