AWS CloudFormation

AWS CloudFormation は、関連する AWS リソースの集約を整った予測可能な方法でプロビジョニングおよび更新し、開発者やシステム管理者が容易にそれらを作成・管理できるようにします。

お客様は、AWS CloudFormation のサンプルテンプレートを使用したり、独自のテンプレートを作成したりして、AWS リソースおよびそのアプリケーションを実行するために必要な関連するすべての依存関係や実行時のパラメータを記述することができます。どの順序で AWS サービスをプロビジョニングする必要があるか、またはそれらの依存関係をどのようにうまく働かせるかの微妙な点を理解する必要はありません。CloudFormation が代わりに行います。一旦デプロイされたら、制御された予測可能な方法で AWS リソースを変更・更新することができるので、これによりお客様はソフトウェアをバージョンコントロールするのと同じ方法で AWS インフラストラクチャをバージョンコントロールすることができます。

お客様は、AWS Management Console、CloudFormation コマンドラインツール、または API を介して、テンプレートおよびそれに関連するリソースの集約(スタックと呼ばれる)をデプロイ・更新することができます。CloudFormation は追加料金なしでご利用いただけ、そのアプリケーションを実行するために必要な AWS リソースの料金のみをお支払いいただきます。

サインアップが簡単、
使用料金は従量課金制です
の利用を申し込む

このページには下記のカテゴリの情報が含まれています。下へジャンプしたい場合はクリックしてください。

AWS CloudFormation の機能性

AWS CloudFormation を使用するには単に以下を行ってください:

  • AWS CloudFormation にサインアップします。AWS CloudFormation がサポートするすべてのサービスにも自動的にサインアップされます。使用したリソース分のみに課金されます。一旦サインアップしたら、 AWS Management Console、コマンドラインツール、または API を介して AWS CloudFormation の使用を開始することができます。
  • CloudFormation スタックを作成し、アプリケーションで必要なリソースの収集をプロビジョニングします。以下の2つの簡単な手順を行います: まず、AWS Management Console の CloudFormation タブで使用するテンプレートを選択します。AWS CloudFormation には、人気の高いオープンソースのアプリケーション用のサンプルテンプレートが付属されており、これはすぐにデプロイできます。当社のサンプルテンプレートは、地理的な冗長性、スケールアウト、アラームのためのベストプラクティスに従い、複数の AWS リソースを相互接続して合わせて使用する方法を示しています。また、独自のカスタムテンプレートを読み込むこともでき、それは Amazon Simple Storage Service(Amazon S3)またはローカルのハードドライブに格納しておけます。次に、テンプレートのパラメータを上書きしてスタックをカスタマイズする(例えば、データベースやアプリケーションユーザー名、パスワード、ポート番号、Amazon EC2 インスタンスのタイプなど)か、またはテンプレート作成者によって提供されたデフォルト値をそのまま使うかを決定します。完了したら、AWS CloudFormation が AWS リソースをプロビジョニングし、スタックを作成します。
  • AWS Management Console で、各スタックに含まれるすべての AWS リソースを表示してください。
  • 作成した既存のテンプレートを使用するか、サンプルテンプレートのいずれかから選択するか、またはまったくゼロから新しいものを作成するかして、(必要に応じて)追加のスタックを作成します。テンプレートはテキストファイルであるため、CloudFormation 外で作成・管理することができ、Eメール、ソース管理リポジトリ、または Amazon S3 などのサービスを介して簡単に共有することができます。
  • 実行中のスタックへ変更や更新を行うことにより、その存続期間中アプリケーションを管理するために必要なソフトウェアのアップデートや設定変更に対応することができます。2つの簡単な手順で行うことができます: まず、スタック内のすべてのリソースに必要な設定変更で、テンプレートを変更します。テンプレートでバージョンコントロールおよび変更管理のベストプラクティスを使用することができるので、AWS インフラストラクチャで動作しているソフトウェアへの変更を管理するのと同じ方法で、AWS インフラストラクチャの設定変更を管理することができます。第二に、AWS Management Console、コマンドラインツール、または API を介して、AWS CloudFormation に更新されたテンプレートを送信します。後は、AWS CloudFormation が制御された予測可能な方法でスタックの設定変更に対処して、すべてを処理します。

サービス概要

広範囲の AWS リソースをサポート - AWS CloudFormation は、多くの AWS リソースをサポートしているため、アプリケーションのニーズに合わせて、高可用性、高信頼性、および高拡張性の AWS インフラストラクチャを構築できます。現在 AWS CloudFormation は以下をサポートしています:

  • Amazon EC2 インスタンス
  • Amazon Elastic Block Store(EBS)ボリューム
  • Elastic Load Balancers
  • Elastic IP Address
  • Amazon EC2 セキュリティグループ
  • Auto Scaling グループ
  • Amazon Relational Database Service(RDS)インスタンス
  • Amazon RDS セキュリティグループ
  • Amazon ElastiCache クラスタ
  • Amazon ElastiCache セキュリティグループ
  • Amazon ElastiCache パラメータグループ
  • AWS Elastic Beanstalk
  • Amazon CloudWatch アラーム

  • Amazon Simple Storage Service(S3)バケット
  • Amazon Simple DB ドメイン
  • Amazon Simple Queue Service(SQS)キュー
  • Amazon Simple Notification Service(SNS)トピック
  • Amazon SNS サブスクリプション
  • Amazon Route 53 DNS レコード
  • Amazon CloudFront 配信
  • AWS Identity and Access Management ユーザーおよびグループ
  • AWS Identify and Access Management ポリシー
  • Amazon Virtual Private Cloud VPC、サブネット、ゲートウェイ、ルートテーブル、およびネットワーク ACL


簡単使用 – CloudFormation では、展開したい AWS リソースの収集を容易に整理することができ、実行時に渡すことができるどんな依存関係や特殊なパラメータも記述することができます。どの順序で AWS サービスをプロビジョニングする必要があるか、またはそれらの依存関係をどのようにうまく働かせるかの微妙な点を理解する必要はありません。CloudFormation が代わりに行います。そのままでも、または土台としてでも、たくさんある CloudFormation サンプルテンプレートのいずれかを使用することができます。または独自に作成することもできます。

現在 AWS CloudFormation には、以下のようなすぐに実行可能のサンプルテンプレートが付属されています。

  • WordPress(ブログ)
  • Tracks(プロジェクトトラッキング)
  • Gollum(GitHub によって使用される wiki)
  • Drupal(コンテンツマネジメント)

  • Joomla(コンテンツマネジメント)
  • Insoshi(ソーシャルアプリ)
  • Redmine(プロジェクトマネジメント)
  • 個々の AWS リソースおよび機能の使用を示す多くのシンプルなテンプレート


ホイールの再発明が不要 – テンプレートはくり返し使って、同じスタックの同一のコピーを作成することができます(または新しいスタックを開始するための基盤として使用することもできます)。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 サービスに対して、ユーザーには使用時に使用した分だけをお支払いいただきます。最低料金や前払いはありません。


詳しい説明

AWS CloudFormation テンプレートの作成

テンプレートは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 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 とそれらの機能をいくつか以下に記載しています。

  • CreateStack: 新しいスタックの作成を開始します。呼び出しへの入力パラメータには、スタック名とソーステンプレートのファイル名(または S3 URL)が含まれます。スタック作成プロセスが正常に完了すると、スタックは CREATE_ COMPLETE 状態になります。スタックの作成に失敗した場合は、ユーザーがデバッグのためにこれらの要素を保持するフラグを指定していない限り、AWS CloudFormation は以前に作成したリソースを削除します。
  • ListStacks: アカウント内のスタックのすべてをリストします。これにより、スタック一式、およびそれらが作成・更新中か準備完了かどうかを示す現在の状態を見ることができます。
  • ListStackResources: スタック作成の一環として作成されたすべての AWS リソース名と識別子をリストします。これは、スタックによって作成されたリソースを表示するために使用することもでき、またそれがデプロイされる環境を理解するために AWS CloudFormation 対応のアプリケーションによって使用することもできます。
  • DescribeStackEvents: AWS CloudFormation により生成されたすべてのオペレーションとスタックのイベントをリストします。これにより、作成または削除の進行状況を確認することができます。
  • UpdateStack: 既存のスタックの更新プロセスを開始します。呼び出しへの入力パラメータには、更新されたテンプレートのスタック名とファイル名(または S3 URL)が含まれます。スタック更新プロセスが正常に完了すると、スタックは CREATE_ COMPLETE 状態になります。スタックの更新に失敗すると、AWS CloudFormation は行われたすべてのリソースの変更をロールバックするため、スタックは元のテンプレートに記述されている状態に戻ります。

AWS CloudFormation は Amazon Simple Notification Service(Amazon SNS)と統合されているため、スタックの作成、更新、および削除が進行するとお客様は通知を受け取ります。進行状況を提供することに加えて、これにより他のプログラムが CloudFormation 内のイベントの存在を認識でき、応答したり、さらにはスタックの設定プロセスに参加することもできます。

AWS リソースでの作業

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 インスタンスにデプロイすることができるヘルパースクリプトがいくつか用意されています。これらのスクリプトは、スタックからリソースのメタデータを読む簡単な方法、およびアプリケーションを構成する、テンプレートにリストされているインスタンスにパッケージとファイルをデプロイする、設定変更やアプリケーション更新といったスタックの更新に反応させるためにそれを使用する簡単な方法を提供します。

以下のスクリプトが利用可能です:

  • cfn-get-metadata: テンプレート内のリソースに付いているメタデータを取得します。
  • cfn-init: テンプレートに記述されているパッケージおよびファイルをダウンロードしてインストールします。
  • cfn-signal: アプリケーションが起動し実行されていて、トラフィックを通す準備ができていることを、スタックの作成ワークフローに知らせます。
  • cfn-hup: AWS コンソール、コマンドラインツール、または 直接 API を介してなされたスタックの更新に従い、アプリケーション固有のフックがそれらの変化に反応するようにするデーモン。

CloudFormation のスクリプトは、スタンドアロンでも、CloudInit と組み合わせても使用することができます。Amazon Linux AMI および他の Linux AMI で利用可能な機能です。アプリケーションのブートストラップおよび設定の更新の詳細については、AWS CloudFormation の白書をご覧ください。

ドキュメント

AWS CloudFormation を始める方法として最良なのは、当社の技術文書が含まれている入門ガイドの手順に従うことです。数分で、サンプルテンプレートのいずれかをデプロイし、独自のインフラストラクチャ設定の作成を開始できるようになるでしょう。


使用目的と制約

このサービスのご利用には、Amazon Web Services カスタマーアグリーメントが適用されます。

©2011, Amazon Web Services LLC or its affiliates. All rights reserved.