CloudFormation(クラウドフォーメーション)とは
Cloudを使い始めた情報システムの担当者の多くの方々が感じているのは、「Cloudでは簡単にサーバーを立てたりリソースを増減したりできると聞いたけど、実際やってみると知識は必要だし、面倒で大変」ということでしょう。せっかくコスト削減や変化への対応のためにCloudに移行しても、このような理由で有効活用できていないというケースも多いのが実情です。
そんな状況を改善するための方策の一つとしてAWSが2011年にリリースしたのがCloudFormation(クラウドフォーメーション)というサービスです。
では、CloudFormationとはどのようなサービスなのでしょうか?
CloudFormationとは
CloudFormationとは、AWSが提供している、プロビジョニングおよび一サーバー設定のエリアにおける自動化および構成管理のためのサービスです。
一般的にはIaC(Infrastructure as Code)の一つということもできます。
ベースとなるのはリソースの設定やプロビジョニングをコード化したテンプレートと呼ばれるファイルです。
テンプレートの中では要求するリソース(EC2, RDS, VPCなどAWSが提供しているサービスでユーザー用に作成されるもの)の情報と関係を使用目的ベースのグループで定義することによって、簡単にリソースのプロビジョニングやOSレベルの設定、ソフトウェアの導入まで自動化することができます。
これによってユーザーは何度でも同じ構成のサーバー環境を作成することができ、さらに削除して作り直したり、一部だけ構成を変更したりすることも容易にできます。これによって、AWSの個別のサービスに関しての詳細な知識を持っていない担当者でも、すぐに使用可能なサーバー環境を構築することができます。
CloudFormationの利点
CloudFormationによって、ユーザーは多くの恩恵を受けることができます。ここではそれらの恩恵、すなわちCloudFormationの利点に関してご説明します。
1. 簡単にサーバー環境の作成が行える
テンプレートさえ出来ていれば、ユーザーが個別のリソースの詳細な設定をする必要が無く、サービス間の連携も自動的に行うことができます。さらに、あらかじめ定義した追加ソフトウェアの導入や設定まで行うこともできます。例えば、RDSで設定するデータベースの情報をEC2で導入するWordPress(ブログ等の機能を提供するソフトウェア)の設定ファイルに埋め込んでサーバー起動後にすぐに使用できるようにすることも可能です。
これによって、複雑な環境の構築が飛躍的に速くなります。さらに、グループ単位で削除して作り直すのも簡単に行うことができます。
2. サーバー構築や変更のオペレーションミスが無くなる
ユーザーが手動で設定することが無くなるため、オペレーションミスが無くなり、設定の誤りや整合性の問題での手戻りやスケジュール遅れ、コスト増加も無くなります
3. サーバー構築に専門的な知識が不要になる
前述のように、あらかじめ定義されているテンプレートを用いてサーバーの構築を行うので、ユーザーは全ての処理が終わるのを待つだけになります。
構築担当者には、設定や確認、ソフトウェア導入作業などに関わる専門的な知識は必要ありません。テンプレートを作成するには知識は必要ですが、AWSでは多くのベストプラクティスのテンプレートを提供していますし、テンプレートの作成だけをベンダーに委託することによって社内に専門家を確保する必要はなくなります。
4. サーバー構成情報の集中管理が可能になる
AWSのコンソールで、使用しているテンプレートを参照することによって、どのようなサービスをどのように組み合わせているかが一目瞭然になります。テンプレートはテキストでコーディングされたものなので、一般的なアプリケーションのコードと同様に、変更点の記録やバージョン管理も容易に行うことができます。
また、実際にデプロイしているスタック(テンプレートから作成したサーバー、サービス群、詳細は後述)を参照すれば、現在使用中のリソースの管理も容易になります。
5. サーバーのランニング・コストが下が
CloudFormationを使用することによって、「必要なときに」「必要なリソースだけ」を簡単に作成することができ、使用が終わったら即時に削除できるので、無駄なリソースの使用がなくなり、それによって全体のランニング・コストを削減することができます。
6. 追加料金はかからない
これだけの機能を持つCloudFormationですが、利用するために追加料金はかかりません。料金はCloudFormationによって作成されたリソースの使用料として請求されます。
これらの利点により、管理対象の複雑化やスキルを有する人材の不足という、現在の情報システム部門が抱える大きな課題を解決することができます。そういった意味ではCloudFormationは現在の情報システム部門にとっては必須であると言えます。
CloudFormationの利用例
ここでは、実際に情報システム部門でCloudFormationを利用する場合に具体的にどのようなケースでCloudFormationの利点が生かされるかに関してご説明します
1. 同一構成の複数の環境があるケース
アプリ開発やインフラ・レイヤーのテスト等の要求から開発環境、検証環境、ステージング環境、本稼働環境のように、同じ構成で複数の環境が必要なケースではCloudFormationの利点が生きてきます。
同じテンプレートを使用して、例えばそれぞれの環境に適したEC2インスタンス・タイプを指定することによって全く同じ手順で複数の環境を構築することができます。また、必要がなくなった環境はすぐに削除することができます。
2. 同一環境でのテストを繰り返しやり直すケース
本番移行の検証のために、移行のリハーサルを何度も同じ環境で初期化しなだら繰り返したいというような要求がある場合にもCloudFormationは極めて有効です。
今までであれば時間と工数をかけてサーバーの構築、ソフトウェアの導入やデータの投入などを行う必要があるので、限られたスケジュールの中では限界がありました。しかし、CloudFormationを利用すれば、それらを短時間で簡単に実現することができます。
3. 問題解析のためのサンドボックス環境が必要なケース
ユーザーが使用中の環境で重大な問題が発生し、その環境に影響を与えないで、問題の解析やトライアンドエラーでの解決方法の検証を行いたいようなケースでも、CloudFormationは有効です。
使用中の環境を作ったテンプレートを使用して、全く同じ環境を新たに作成し、そのサンドボックス環境で様々なテストを行うことができます。
このように、今までの環境であれば容易には対応できなかった要求に対しても、CloudFormationを利用することによって簡単に対応できるようになります。
CloudFormationの利用手順
ここでは、実際にCloudFormationを使用してサーバー環境を構築する手順に関して、ご説明します。
テンプレートの準備
まず、必要なのはテンプレートです。テンプレートはJavaScript Object Notation (JSON) あるいはYAMLの標準に準拠したフォーマットで記述されたテキストファイルで、CloudFormationが環境を構築するために必要な情報は全てその中に含まれています。
作成方法として一番簡単なのは、AWSがベストプラクティスとして提供しているテンプレートの中から、構築しようとしている環境に近いものを選択して、そのまま使用するか一部変更して使用する方法です。
また、前述のようにCloudFormationのコンサルティング・サービスを提供しているベンダーに委託して専用のテンプレートを作成してもらうこともできます。今後、この分野のスキルを拡充する方針がある場合は、既存のテンプレートを参考にして自身で作成することももちろん可能です。
作成あるいは変更する場合は、使い慣れたテキスト・エディターで直接編集するか、AWSが提供しているCloudFormationデザイナーの画面を使用して組み立てることもできます。デザイナーを使用すると構成やリソース間の関係がビジュアル化されていてわかりやすいだけではなく、リソース等をドラッグアンドドロップで追加したり編集したりすることもでき、テキストを編集するよりも簡単にテンプレートを作成することができます。
作成したテンプレートはS3ストレージに保存され、自由に呼び出して再利用することができます。
テンプレートに記述する内容
そのテンプレートに記述する内容はセクションに分けられています。セクションの中に別のセクションがあるようなネスト状態で記述するものもあります。
そのなかで最も重要なのは「リソース」セクションです。「リソース」セクションでは使用するAWSサービスのリソース情報を記述します。
Typeとして「AWS::EC2::Instance」と記述すればEC2インスタンスの作成、「AWS::S3::Bucket」と記述すればS3バケット の作成、「AWS::ElasticLoadBalancing::LoadBalance」と記述すればELBの作成を要求できます。
同時にPropertiesとしてインスタンス・タイプや使用するEBS、バケット名、その他多くのリソースのプロビジョニングに必要な情報を指定します。ここはサービスによって指定可能な情報が定義されています。
そして「パラメータ」セクションでは、後述するようにテンプレートからスタックを作成するときに指定可能なパラメータを記述します。これによってテンプレートをより汎用化することができます。「条件」セクションでは。条件によって指示内容を変更したい場合に記述されます。
例えば、パラメータで環境タイプを「prod」つまり本稼働環境であると指定された場合には「リソース」セクションのAvailability Zoneを変更するとか、ストレージのサイズを大きくする等の対応をあらかじめ組み込んでおくことができます。
「メタデータ」セクションには「リソース」セクション内で「AWS::CloudFormation::Init」を使用してプロビジョンを行ったサーバーのOS上にパッケージの導入を行うとか、OS上のファイルの内容を変更するような特殊な処理を付加する場合に使用します。
CloudFormer によるテンプレートの作成
現在はベータ版として提供されているサービスですが、CloudFormerを使用することによって、使用中の既存のリソースから、CloudFormationテンプレートを作成することができます。これによって、使用中の環境がCloudFormationによって構築されたものでない場合でも容易にCloudFormationによる管理に移行することができます。
使用する場合はCloudFormerをCloudFormationスタックとして起動します。テンプレート作成後はCloudFormerのスタックは削除することができます。
スタックの作成
スタックとは、テンプレートに沿ってプロビジョニングや設定が行われたAWSサービスのリソース群です。CloudFormationでは、テンプレートからスタックを作成することでサーバー環境の構築を行うことができます。
スタックの作成はAWS CloudFormationコンソールからだけではなく、APIやAWS CLIを使用して行うこともできます。AWS提供のテンプレートのほとんどには、ユーザー入力の定義(前述の「パラメータ」)が含まれており、スタック作成の際に表示される入力画面上で最終的なパラメータを入力する形になっています。
これらには例えばEC2のインスタンス・タイプの選択やRDSのデータベース名や管理ユーザーのパスワードなど、同じテンプレートを使用していても変更する場合が多いパラメータがここで決定されます。スタック作成のリクエストを行うと、画面上にはそのスタックに含まれるAWSサービスごとのリソースのステータス(作詞中、作成済み、削除等)が表示され、状況が一目でわかるようになっています。
スタックのリソースリストから個別のサービスのコンソールにジャンプすることもできます。
スタックの削除および変更
スタックの画面からは、スタックの削除も簡単に行うことができます。使用しなくなった環境や、内容を大幅に変更したい環境は、スタック単位で削除することによって、そこに含まれるリソースはまとめて削除することができます。
もし、稼働しているスタックに変更したい部分がある場合には、削除して作り直すこともできますが。テンプレートの変更を行なって、そこからスタックの変更のみを適用することもできます。
より詳細な情報が必要な場合はAWSから提供されているユーザーガイドを参照してくだい。また、初心者のための情報やチュートリアル等も公開されています。
最後に
ここまで述べてきたように、現在AWS Cloudを利用する情報システム部門にとってCloudFormationは必須と言ってもよいサービスです。CloudFormationによって、管理する環境をコード化して迅速で正確な構築が可能になるだけではなく、スキル不足や複雑な環境の管理工数の増大などの課題も解決してくれます。
いますぐCloudFormationを使い始めましょう。
早く始めたいが何から始めたら良いかわからないような場合は、CloudFormationのコンサルティング・サービスを提供しているベンダーにコンタクトするのも良いでしょう。