AWS CloudFormationを使うと、アプリケーションスタック全体(アプリ、ミドルウェア、インフラを含む複合体をアプリケーションスタックと呼ぶ)を表現できるテンプレートを記述し保存できるので、アプリケーションスタック全体の起動を、ボタン数クリックもしくはスクリプト起動のみで行えるようになります。このテンプレート形式では起動時にパラメーターを利用することもできるので、クラウドリソースを全体の起動を、「再現可能」にし、使いまわしできます。
( こちらの例では、プロジェクト管理ツールのRedmineを立ち上げるテンプレートを再利用することで、インフラ、アプリケーションを含めて、ボタン数クリックで立ち上げている様子をスライド付で紹介していますので、まだCloudFormationを使ったことの無い方にとっては分かりやすいかもしれません。また、以前のCloudFormationの発表記事は下記をご覧ください: AWS CloudFormation: 複雑なシステムもクラウドレシピからワンクリックで作成可能に )
本日の発表により、このCloudFormationに対して、大幅な機能拡張を行いました。新しいブートストラップ機能を追加し、テンプレートによって起動される各EC2インスタンスの設定を完全にコントロールすることができます。
下記が新しい機能の一覧です。
テンプレート・コンポジション (Template Composition) - CloudFormationのテンプレートの中から、URLを用いて他のテンプレートを参照することが可能になりました。これは、手続き型プログラミング言語の関数コールに似ています(CloudFormationのテンプレート自体は宣言型ですが)。この機能を用いることで、特定の責務を持った、再利用できるテンプレートを一式作っておき、それを組み合わせることができます。例えば、特定のパッケージをインストールするものや、ロードバランサーやデータベース等の特定のアーキテクチャコンポーネントを立ち上げるものを作っておくことが考えられるでしょう。
IAMインテグレーション (IAM Integration) - CloudFormationを用いて、IAM (Identity and Access Management)のユーザー、グループ、ポリシー等を作成できます。既存のCloudFormationで、ユーザーの属性(アクセスキーや、シークレットキー等)にアクセスすることはすでに可能でした。 ちなみに、アプリケーションスタックに関連するユーザー、グループ、ポリシーは、スタックを削除したときに一緒に削除されます。もちろん、明示的に削除されないように設定しておくことも可能です。
スタック・アップデート (Stack Updating) - CloudFormationによって起動して稼働しているスタックをアップデートすることができます。CloudFormationは、新しいテンプレートにマッチするように、既存のリソースをアップデートします。変更のないリソースはそのまま保たれます。変更した属性を伴うリソースは、できるだけそのままでアップデートされ、必要なときのみ入れ替えが行われます。このアップデート機能は現時点で次のリソースタイプのアップデートをサポートします: AutoScaling GroupsとLaunch Configuration、CloudWatchアラーム、EC2インスタンス、ロードバランサー、DBインスタンス、Route53のレコードセット。詳細はこちら(英語)をご覧ください
アプリケーション・ブートストラッピング (Application Bootstrapping) - 起動するEC2インスタンス上で稼働するアプリケーションのブートストラップ(インストールと設定)に関して多くの選択肢を持てるようになりました。これまで通り、必要なOSと全てのアプリケーションを備えた設定済みのAMIを作ってそれを利用することも、もちろんできます。もしくは、下記のようないずれの方法を利用することもできるでしょう。
ブート時にCloudInitパッケージを用いて、シェルスクリプトを走らせる。このシェルスクリプトは、EC2のユーザーデータ機能を用いて受け渡しができます。
- 設定用メタデータをCloudFormationテンプレートの中に埋め込み、インスタンス上で走るCloudFormationのヘルパースクリプトを用いてこのメタデータにアクセスします。cfn-initスクリプトを用いて、アーカイブファイルのダウンロード、インストール、そして、ファイル作成やサービスの設定などを行えます。
- OpscodeのChefを用いて、インスタンスの設定を行います。設定データ(cookbooks)はローカルから提供することも(Chef Solo)、ChefサーバーやHosted Chefから行うこともできます。より詳細が知りたい方は、Integrating AWS CloudFormation with Opscode Chef(英語)を参照ください。
- Puppet LabsのPuppetマスターサーバーに設定データを保存し、Puppetクライアントを用いてインスタンスを設定します。より詳細が知りたい方は、Integrating AWS CloudFormation with Puppet(英語)を参照ください。
CloudFormationを用いたブートストラッピングのガイドとして、Bootstrapping Applications via AWS CloudFormation(英語)を用意しました。この文書は、上記の4つのアプローチを説明しています。各アプローチには長所、短所がありますので、場合によって使い分けるのが良いでしょう。
既存のドキュメントにもアップデートを行いました。入門ガイド(英語)も是非チェックし、Template Basic(英語)もご覧になってください。AWS CloudFormation ユーザーガイド(英語)にも新しいセクションが追加されています。
これまで、物理サーバーを使っていた方が、EC2のような仮想サーバーを使いはじめるときは当初は抵抗があったかもしれません。しかし、新しいパラダイムに入ると、享受できるメリットに驚いたことでしょう。CloudFormationはEC2を含むクラウドリソースを大規模に利用しはじめた際に新しく課題として浮上してきた、大量のクラウドリソースの管理、再利用、再現可能な起動に対処した、新しいパラダイムといえるでしょう。当初は抵抗があるかもしれませんが、仮想サーバーを含むクラウドリソースを、記述済みのテンプレートで動的に起動できるようになると、そのパワフルさに驚くことになるでしょう。是非、今から少しずつ使いはじめて、じっくり時間をかけて使いこなしてみてください。さらなるITのニューワールドが開けてくることに違いありません!!
玉川憲 (@KenTamagawa)