メニュー
AWS CloudFormation
ユーザーガイド (API Version 2010-05-15)

AWS CloudFormation の仕組み

スタックを作成すると、AWS CloudFormation は AWS から基盤となるサービスを呼び出し、リソースをプロビジョニングして設定します。AWS CloudFormation が実行できるアクションはお客さまがアクセス権限を持つものだけであることにご注意ください。たとえば、AWS CloudFormation を使用して EC2 インスタンスを作成するには、インスタンスを作成するアクセス権限が必要です。インスタンスのスタックを削除する場合も同様にインスタンスを削除するアクセス権限が必要です。AWS Identity and Access Management (IAM) を使用してアクセス権限を管理できます。

AWS CloudFormation がおこなう呼び出しは、すべてテンプレートで宣言されます。たとえば、EC2 インスタンスのインスタンスタイプを t1.micro と記述するテンプレートがあるとします。このテンプレートを使ってスタックを作成すると、AWS CloudFormation は Amazon EC2 作成インスタンス API を呼び出し、インスタンスタイプを t1.micro と指定します。次の図は、AWS CloudFormation でスタック作成を作成するワークフローの概要です。

  1. AWS CloudFormation テンプレート (JSON または YAML 形式のドキュメント) は「AWS CloudFormation デザイナー」で設計することも、テキストエディタで記述することもできます。用意されたテンプレートを使用することもできます。テンプレートは必要なリソースとその設定を記述します。たとえば、EC2 インスタンスを作成するとします。テンプレートは次の例のように EC2 インスタンスを宣言してそのプロパティを記述するものになります。

    例 JSON 構文

    Copy
    { "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "A simple EC2 instance", "Resources" : { "MyEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "ami-2f726546", "InstanceType" : "t1.micro" } } } }

    例 YAML 構文

    Copy
    AWSTemplateFormatVersion: '2010-09-09' Description: A simple EC2 instance Resources: MyEC2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-2f726546 InstanceType: t1.micro
  2. テンプレートをローカルまたは S3 バケットに保存します。テンプレートを作成した場合は、.json.yaml、または .txt などのファイル拡張子を使用して保存します。

  3. テンプレートのファイルの場所 (ローカルコンピューターのパスや Amazon S3 の URL など) を指定し、AWS CloudFormation スタックを作成します。テンプレートにパラメーターが含まれる場合は、スタック作成時に入力値を指定できます。パラメーターを使用してテンプレートに値を渡すことで、スタックを作成するたびにリソースをカスタマイズできます。

    AWS CloudFormation コンソールAPI、または AWS CLI を使用してスタックを作成できます。

    注記

    ローカルに保存されたテンプレートファイルを指定する場合、AWS CloudFormation はそれを AWS アカウントの S3 バケットにアップロードします。AWS CloudFormation は各リージョンにテンプレートファイルをアップロードするバケットを作成します。AWS アカウントの Amazon Simple Storage Service (Amazon S3) アクセス権限があれば誰でもこのバケットにアクセスできます。AWS CloudFormation が作成したバケットがすでに存在する場合は、テンプレートはそのバケットに追加されます。

    手動でテンプレートを Amazon S3 にアップロードすることで、独自のバケットを使用してアクセス権限を管理できます。その場合は、スタックを作成または更新するたびに、テンプレートファイルの Amazon S3 URL を指定します。

AWS CloudFormation はテンプレートに記述されている AWS サービスを呼び出して、リソースをプロビジョニングし設定します。

すべてのリソースの作成が完了すると、AWS CloudFormation はスタックが正常に作成されたというレポートを送信します。これで、スタック内のリソースが使用できるようになります。スタックの作成が失敗した場合、AWS CloudFormation は作成したリソースを削除して、変更をロールバックします。

変更セットを使用したスタックの更新

スタックのリソースを更新する必要がある場合、スタックのテンプレートを変更できます。新しいスタックを作成して古いものを削除する必要はありません。スタックを更新するには、元のスタックテンプレートの修正バージョン、異なる入力パラメーター値、またはその両方を送信して変更セットを作成します。AWS CloudFormation は修正済みのテンプレートを元のテンプレートと比較し、変更セットを生成します。変更セットには、変更案がリストされます。変更を確認したら、変更セットを実行してスタックを更新します。更新しない場合は新しい変更セットを作成できます。次の図は、スタックを更新するワークフローの概要です。

重要

更新によって中断が発生する場合があります。更新しているリソースやプロパティによって、既存のリソースが中断されたり、置き換えられる場合もあります。詳細については、「AWS CloudFormation スタックの更新」を参照してください。

  1. AWS CloudFormation スタックテンプレートは AWS CloudFormation デザイナー またはテキストエディタで変更できます。たとえば、EC2 インスタンスのインスタンスタイプを変更する場合、元のスタックのテンプレートの InstanceType プロパティの値を変更します。

    詳細については、「スタックテンプレートの変更」を参照してください。

  2. AWS CloudFormation テンプレートをローカルまたは S3 バケットに保存します。

  3. 更新するスタックおよび修正済みテンプレートの場所 (ローカルコンピューターのパスや Amazon S3 の URL など) を指定し、変更セットを作成します。テンプレートにパラメーターが含まれる場合は、変更セットの作成時に値を指定できます。

    変更セットの作成方法については、変更セットを使用したスタックの更新 を参照してください。

    注記

    ローカルコンピューターに保存されたテンプレートを指定する場合は、AWS CloudFormation は自動的に AWS アカウントの S3 バケットにテンプレートをアップロードします。

  4. 変更セットを参照して、AWS CloudFormation が想定どおりに変更を実行することを確認します。たとえば、AWS CloudFormation が重要なスタック・リソースを置き換えるかどうかなどです。必要な変更が含まれるまで、いくつでも変更セットを作成できます。

    重要

    変更セットでは、スタックの更新が正常に行われるかどうかはわかりません。たとえば、アカウント制限を超過する、更新をサポートしていないリソースを更新しようとしている、リソースの変更に必要なアクセス権限が足りていないなど、スタックの更新が失敗する原因になる可能性があるものを、変更セットでは確認しません。

  5. スタックに適用する変更セットを実行します。AWS CloudFormation では、変更したリソースのみを更新することでスタックを更新し、スタックが正常に更新された信号を送信します。スタックの更新が失敗した場合、AWS CloudFormation は変更箇所をロールバックして、スタックを正常な稼働が確認されている最新の状態に復元します。

スタックの削除

スタックを削除する場合は、削除するスタックを指定します。AWS CloudFormation はそのスタックとスタック内のすべてのリソースを削除します。AWS CloudFormation コンソールAPI、または AWS CLI を使用してスタックを削除できます。

スタックを削除してもその中のいくつかのリソースは保持したい場合には、削除ポリシーを使用してそのリソースを保持できます。

すべてのリソースの削除が完了すると、AWS CloudFormation はスタックが正常に削除されたというシグナルを送信します。AWS CloudFormation がリソースを削除できない場合、スタックは削除されません。削除されなかったリソースは、スタックが正常に削除されるまで保持されます。

その他のリソース

  • AWS CloudFormation テンプレート作成の詳細については、「テンプレートの分析」を参照してください。

  • スタックの作成、更新、または削除の詳細については、スタックの操作を参照してください。