AWS CloudFormation は、関連する AWS リソースの集約を整った予測可能な方法でプロビジョニングおよび更新し、開発者やシステム管理者が容易にそれらを作成・管理できるようにします。
お客様は、AWS CloudFormation のサンプルテンプレートを使用したり、独自のテンプレートを作成したりして、AWS リソースおよびそのアプリケーションを実行するために必要な関連するすべての依存関係や実行時のパラメータを記述することができます。どの順序で AWS サービスをプロビジョニングする必要があるか、またはそれらの依存関係をどのようにうまく働かせるかの微妙な点を理解する必要はありません。CloudFormation が代わりに行います。一旦デプロイされたら、制御された予測可能な方法で AWS リソースを変更・更新することができるので、これによりお客様はソフトウェアをバージョンコントロールするのと同じ方法で AWS インフラストラクチャをバージョンコントロールすることができます。
お客様は、AWS Management Console、CloudFormation コマンドラインツール、または API を介して、テンプレートおよびそれに関連するリソースの集約(スタックと呼ばれる)をデプロイ・更新することができます。CloudFormation は追加料金なしでご利用いただけ、そのアプリケーションを実行するために必要な AWS リソースの料金のみをお支払いいただきます。
AWS CloudFormation を使用するには単に以下を行ってください:
広範囲の AWS リソースをサポート - AWS CloudFormation は、多くの AWS リソースをサポートしているため、アプリケーションのニーズに合わせて、高可用性、高信頼性、および高拡張性の AWS インフラストラクチャを構築できます。現在 AWS CloudFormation は以下をサポートしています:
簡単使用 – CloudFormation では、展開したい AWS リソースの収集を容易に整理することができ、実行時に渡すことができるどんな依存関係や特殊なパラメータも記述することができます。どの順序で AWS サービスをプロビジョニングする必要があるか、またはそれらの依存関係をどのようにうまく働かせるかの微妙な点を理解する必要はありません。CloudFormation が代わりに行います。そのままでも、または土台としてでも、たくさんある CloudFormation サンプルテンプレートのいずれかを使用することができます。または独自に作成することもできます。
現在 AWS CloudFormation には、以下のようなすぐに実行可能のサンプルテンプレートが付属されています。
ホイールの再発明が不要 – テンプレートはくり返し使って、同じスタックの同一のコピーを作成することができます(または新しいスタックを開始するための基盤として使用することもできます)。Amazon EC2 AMI だけでなく、Amazon Elastic Block Store(EBS)や Amazon RDS スナップショット名など、リージョン固有のインフラの変化をキャプチャし、コントロールすることができます。
透明性が高く、オープン – テンプレートはシンプルな JSON フォーマットのテキストファイルで、通常のソースコントロールメカニズム下に置くことも、Amazon S3 などの公共または私的な場所に格納することも、またEメールを介して交換することもできます。AWS CloudFormation では、「ボンネットを開いて」正確にどの AWS リソースがスタックを作成するために使用されるかを確認することができます。ユーザーが完全にコントロールすることができ、スタックの一部として作成された AWS リソースはすべて変更することができます。
平叙的で柔軟 – 希望するインフラストラクチャを作成するには、テンプレートに必要な AWS リソース、設定値、および相互接続を挙げ、後は AWS CloudFormation にお任せください。ユーザーは AWS Management Console で、またはコマンドラインツールを介して、あるいは API を呼び出して、数回クリックすればよいだけです。それらのサービスの API を介してそれぞれの AWS リソースを作成・相互接続する方法の詳細を覚えている必要はありません。AWS CloudFormation にお任せください。また、AWS CloudFormation に付属している多くのサンプルテンプレートのいずれかを使うのであれば、一からテンプレートを記述する必要もありません。
パラメータを介してカスタマイズ – スタックが構築されると、パラメータにより実行時のテンプレートの側面をカスタマイズすることができます。例えば、RDS データベースのサイズ、EC2 インスタンスのタイプ、データベース、およびウェブサーバーのポート番号は、スタック作成時に AWS CloudFormation に渡すことができます。また、パラメータ化されたテンプレートを使用して、コントロール方法で異なる可能性がある複数のスタックを作成することができます。例えば、カスタマーのトラフィックをヨーロッパよりも米国で多く受信する場合、Amazon EC2 インスタンスタイプ、Amazon CloudWatch アラームのしきい値、および Amazon Relational Database Service(Amazon RDS)リードレプリカの設定は、AWS リージョン間で異なる場合があります。テンプレートパラメータを使用して、各リージョンの設定としきい値を別々に調整でき、かつアプリケーションがリージョンにわたって一貫して展開されていることを確認することができます。
すぐに統合可能 – AWS CloudFormation は AWS Simple Notification Service(SNS)を通じて、イベントの進捗を伝えます。これにより、ユーザーはEメールでスタックの作成・削除の進行状況をトラッキングでき、プログラム的に他のプロセスと統合することができます。
追加料金なし – AWS CloudFormation は追加料金なしで利用可能です。AWS CloudFormation によって作成され、アプリケーションで使用された AWS リソースに対してのみ通常の料金の請求が発生します。
AWS CloudFormation に対する追加料金はありません。AWS リソースを手動で作成した場合も、ユーザーは同じ方法で、AWS CloudFormation を使用して作成した AWS リソース(例: EC2 インスタンス、Elastic Load Balancers など)に対して料金をお支払いいただきます。
AWS CloudFormation がサポートするすべてのサービスに個別にサインアップしなくてもよいよう、AWS CloudFormation へサインアップすると、すべてのこれらのサービスに自動的にサインアップされます。そうすれば、それぞれの AWS サービスが有効になっているかどうかを手動でチェックする必要がなく、AWS CloudFormation のサンプルテンプレートを簡単に使用することができます。すべての AWS サービスに対して、ユーザーには使用時に使用した分だけをお支払いいただきます。最低料金や前払いはありません。
テンプレートはJSON(JavaScript Object Notation)フォーマットのテキストファイルで、アプリケーションまたはサービス、およびそれらの間の相互接続を実行するために必要な AWS インフラストラクチャを記述します。テンプレートはリソースの関係を簡潔にキャプチャします。例えば、Elastic Load Balancer に関連付けられている必要がある EC2 インスタンス、または EBS ボリュームはそれが接続されているインスタンスと同じ EC2 Availability Zone になければならないということなどです。テンプレートはパラメータ化することができ、それによりアプリケーションにスピンアップするインスタンスの数など、異なる設定値を持つ多くのインフラストラクチャのデプロイに単一のテンプレートを使用することができます。また、テンプレートは出力プロパティも提供するので、簡単に設定をコミュニケートしたり、またはテンプレートをデプロイした結果をユーザーに返すために使用できます。例えば、インスタンス化する際には、テンプレートはユーザーが新たにインスタンス化されたアプリケーションへ接続するために使用する Elastic Load Balancer のエンドポイントの URL を提供することもあります。テンプレートのすべての AWS リソースは論理名を使用して識別され、AWS リソース間での名前の衝突を恐れることなく、複数のスタックをテンプレートから作成できるようになっています。
AWS Console、コマンドラインツール、または API の CreateStack オペレーションにテンプレートを入れます。事前に AWS CloudFormation にテンプレートを登録する必要はありません。AWS CloudFormation ではスタックテンプレートのコピーが格納されるので、スタック作成時に適用した正確なリソース設定を AWS Management Console、コマンドラインツール、または API を使って調べることができます。
テンプレートは以下のハイレベルな JSON 構造になっています。
{
"説明" : "テンプレート使用のテキスト記述",
"パラメータ": {
// デプロイごとにテンプレートをカスタマイズするために使用される入力のセット
},
"リソース" : {
// AWS リソースのセットとそれらの関係
},
"出力" : {
// スタック作成者に見えるようにする値のセット
},
"AWSTemplateFormatVersion" : "2010-09-09"
}
以下のテンプレートは、EC2 インスタンスを作成する方法を示す簡単な例です:
{
"説明" : "Amazon Linux 32 ビット AMI を実行している EC2 インスタンスを作成。”
"パラメータ" : {
"KeyPair" : {
"説明" : "SSH のインスタンスへのアクセスを許可する EC2 キーペア",
"タイプ" : "文字列"
}
},
"リソース" : {
"Ec2Instance" : {
"タイプ" : "AWS::EC2::Instance",
"プロパティ" : {
"KeyName" : { "Ref" : "KeyPair" },
"ImageId" : "ami-75g0061f"
}
}
},
"出力" : {
"InstanceId" : {
"説明" : "新しく作成された EC2 インスタンスのInstanceId",
"値" : { "Ref" : "Ec2Instance" }
}
},
"AWSTemplateFormatVersion" : "2010-09-09"
}
テンプレートをインスタンス化することによって生じるリソースの収集は、スタックとして知られています。スタックは、AWS CloudFormation サービスにテンプレートおよび必要なすべてのパラメータを指定することによって作成されます。テンプレートに基づいて、どの順番でどの AWS リソースを作成する必要があるかをサービスが決定します。順序は、テンプレートで示されるリソース間で指定された依存関係によって決定されます。これらの依存関係のいくつかは暗黙的です。例えば、EBS ボリュームを EC2 インスタンスに関連付けるために、EBS ボリュームの名前がインスタンスに渡される必要があります。このためには、EBS ボリュームが最初に作成される必要があり、そうすればそれに名前または識別子が与えられます。他のケースでは依存関係は明示的です。例えば、アプリケーションが Auto Scaling グループを使用してデプロイされ、Amazon Relational Database Service インスタンスにアクセスする必要がある場合は、データベースインスタンスは EC2 インスタンスが作成される前に作成される必要があります。この場合、テンプレートの作成者がリソース間の依存関係を定義することができ、一方が他方の前に作成されることを確実にすることができます。
AWS CloudFormation サービスを使用してスタックを作成、更新、および削除することができます。スタック作成中、AWS CloudFormation は、テンプレートで指定された論理名(例:「myServer」)のインスタンス化されたリソースの実際の名前(例: EC2 インスタンス名「i-19d3ac161」)へのマッピングを記録します。スタックの作成状況とリソース名のマッピングは、シンプルな API を介して利用可能です。加えて AWS CloudFormation は、インスタンスや EBS ボリュームなどの EC2 リソースにスタック名でタグ付けします。
スタックは、スタック内のすべてのリソースの希望する設定を含むテンプレートを指定することによって更新されます。スタック内の既存のリソースのプロパティを変更して、環境または新しいアプリケーション要件の変更に対応させることができます。例えば、スタックで、AWS CloudWatch アラームのアラームしきい値を変更したり、インスタンスで実行されている AMI を更新したりすることができます。AWS CloudFormation は、スタック内の異なるリソースにおける変更の作動を処理します。多くの場合、変更は実行中のアプリケーションに影響を与えることなく行われます。しかし、変更を動的に行うことができない(EC2 インスタンスにおける AMI の更新など)場合、AWS CloudFormation は新しいリソースを作成し、スタックにそれを再配線します。そして、完全なアップデートが正常に行われたことをサービスが確認すると、古いリソースは削除されます。
スタックは完全に作成または変更されるか、またはスタックが完全にインスタンス化または変更できない場合にロールバックされるかのどちらかです。スタック作成中、デバッグのために、ロールバックオペレーションを無効にすることができ、後から手動で有効にすることもできます。
AWS CloudFormation は AWS Management Console から簡単にアクセスできます。ユーザーは、ポイント・アンド・クリックのウェブベースのインターフェイスでデプロイ・管理できます。AWS Management Console 内からいくつかの簡単な手順でアプリケーションを作成、削除、更新することができます。AWS CloudFormation は、使いやすく柔軟性の高い、シンプルな API のセットを提供します。利用可能な AWS CloudFormation API の完全なリストについては、AWS CloudFormation API レファレンスガイド をご参照ください。最も一般的に使用される API とそれらの機能をいくつか以下に記載しています。
AWS CloudFormation は Amazon Simple Notification Service(Amazon SNS)と統合されているため、スタックの作成、更新、および削除が進行するとお客様は通知を受け取ります。進行状況を提供することに加えて、これにより他のプログラムが CloudFormation 内のイベントの存在を認識でき、応答したり、さらにはスタックの設定プロセスに参加することもできます。
AWS CloudFormation テンプレートは、以前からの AWS における経験を活用できるように設計されています。各リソースは、ネイティブ API を介してリソースを作成するために使用された名前と同じ名前を持つパラメータのセットを持っています。以下のテンプレートのスニペットは、Amazon EBS ボリュームを定義する方法を示しています。テンプレート内のボリュームの論理名は 「myVolume」で、そのタイプは 「AWS::EC2::Volume」です。 以前に EBS ボリュームを使用したことがあれば、プロパティは非常になじみやすいものです。
"myVolume" : {
"Type" : "AWS::EC2::Volume",
"Properties" : {
"Size" : "10",
"SnapshotId" : "snap-7b8fd361",
"AvailabilityZone" : "us-east-1a"
}
}
AWS CloudFormation では、EC2 インスタンスにデプロイすることができるヘルパースクリプトがいくつか用意されています。これらのスクリプトは、スタックからリソースのメタデータを読む簡単な方法、およびアプリケーションを構成する、テンプレートにリストされているインスタンスにパッケージとファイルをデプロイする、設定変更やアプリケーション更新といったスタックの更新に反応させるためにそれを使用する簡単な方法を提供します。
以下のスクリプトが利用可能です:
CloudFormation のスクリプトは、スタンドアロンでも、CloudInit と組み合わせても使用することができます。Amazon Linux AMI および他の Linux AMI で利用可能な機能です。アプリケーションのブートストラップおよび設定の更新の詳細については、AWS CloudFormation の白書をご覧ください。
AWS CloudFormation を始める方法として最良なのは、当社の技術文書が含まれている入門ガイドの手順に従うことです。数分で、サンプルテンプレートのいずれかをデプロイし、独自のインフラストラクチャ設定の作成を開始できるようになるでしょう。