AWS CloudFormation の仕組み - AWS CloudFormation

AWS CloudFormation の仕組み

スタックを作成するとき、AWS CloudFormation は AWS に基礎となるサービス呼び出しを行い、リソースをプロビジョニングおよび設定します。CloudFormation は、ユーザーが実行するためのアクセス権限を持っているアクションのみを実行できます。例えば、CloudFormation を使用して EC2 インスタンスを作成するには、インスタンスを作成するためのアクセス権限が必要です。インスタンスのスタックを削除する場合も同様にインスタンスを削除するアクセス権限が必要です。AWS Identity and Access Management (IAM) を使用してアクセス権限を管理できます。

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

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

    例 JSON

    { "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "A simple EC2 instance", "Resources" : { "MyEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "ami-0ff8a91507f77f867", "InstanceType" : "t2.micro" } } } }

    例 YAML

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

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

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

    注記

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

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

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

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

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

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

重要

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

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

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

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

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

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

    注記

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

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

    重要

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

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

スタックの削除

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

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

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

その他のリソース

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