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 ワークフローをまとめたものです。
-
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
-
テンプレートをローカルまたは Amazon S3 バケットに保存します。テンプレートを作成した場合は、
.json
、.yaml
、または.txt
などのファイル拡張子を使用して保存します。 -
テンプレートファイルの場所 (ローカルコンピュータのパスまたはAmazon S3 の URL など) を指定して CloudFormation スタックを作成します。テンプレートにパラメーターが含まれる場合は、スタック作成時に入力値を指定できます。パラメータは、テンプレートに値を渡すことを可能にして、スタックを作成するたびにリソースをカスタマイズできるようにします。
CloudFormation のコンソール、
CreateStack
API 操作、またはcreate-stack
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 スタックの更新」を参照してください。
-
AWS CloudFormation デザイナー
またはテキストエディタを使用して、CloudFormation スタックテンプレートを修正できます。たとえば、EC2 インスタンスのインスタンスタイプを変更する場合、元のスタックのテンプレートの InstanceType
プロパティの値を変更します。詳細については、「スタックテンプレートの変更」を参照してください。
-
CloudFormation テンプレートをローカルまたは S3 バケットに保存します。
-
更新するスタックおよび修正済みテンプレートの場所 (ローカルコンピューターのパスや Amazon S3 の URL など) を指定し、変更セットを作成します。テンプレートにパラメーターが含まれる場合は、変更セットの作成時に値を指定できます。
変更セットの作成方法については、変更セットを使用したスタックの更新 を参照してください。
注記
ローカルコンピュータに保存されたテンプレートを指定する場合、CloudFormation はテンプレートを自動的に AWS アカウント アカウントの S3 バケットにアップロードします。
-
変更セットを参照して、CloudFormation が想定どおりに変更を実行することを確認します。例えば、CloudFormation が重要なスタックリソースを置き換えるかどうかを確認します。必要な変更が含まれるまで、いくつでも変更セットを作成できます。
-
スタックに適用する変更セットを開始します。CloudFormation は、修正したリソースのみを更新することでスタックを更新し、スタックが正常に更新された旨の信号を送信します。スタックの更新が失敗した場合、CloudFormation は変更箇所をロールバックして、スタックを正常な稼働が確認されている最新の状態に復元します。
スタックの削除
スタックを削除する場合は、削除するスタックを指定します。CloudFormation はそのスタックとスタック内のすべてのリソースを削除します。CloudFormation のコンソール、DeleteStack
API 操作、または delete-stack
AWS CLI コマンドを使用してスタックを削除できます。
スタックを削除してもその中のいくつかのリソースを保持する場合は、削除ポリシーを使用してそのリソースを保持できます。
すべてのリソースの削除が完了すると、CloudFormation はスタックが正常に削除された旨のシグナルを送信します。CloudFormation がリソースを削除できない場合、スタックは削除されません。削除されなかったリソースは、スタックが正常に削除されるまで保持されます。
追加リソース
-
CloudFormation テンプレート作成の詳細については、「テンプレートの構造分析」をご参照ください。
-
スタックの作成、更新、または削除の詳細については、 スタックの操作を参照してください。