AWS CloudFormation の概念 - AWS CloudFormation

AWS CloudFormation の概念

AWS CloudFormation を使用する際には、テンプレートスタックの作業を行います。テンプレートは、AWS リソースとそのプロパティを記述するために作成します。スタックを作成するたびに、CloudFormation はテンプレートに記述されているリソースをプロビジョニングします。

テンプレート

CloudFormation テンプレートは JSON または YAML 形式のテキストファイルです。これらのファイルは、.json.yaml.template.txt などの拡張子を使用して保存できます。CloudFormation は、AWS リソースを構築するブループリントとしてこれらのテンプレートを使用します。たとえば、テンプレートには、インスタンスタイプ、AMI ID、ブロックデバイスマッピング、Amazon EC2 キーペアの名前など、Amazon EC2 インスタンスの情報を記述できます。スタックを作成する際には、CloudFormation がテンプレートの記述内容を作成するために使用するテンプレートも指定します。

例えば、以下のテンプレートを指定してスタックを作成した場合、CloudFormation は ami-0ff8a91507f77f867 AMI ID、t2.microインスタンスタイプ、testkey キーペアの名前、および Amazon EBS ボリュームを持つインスタンスをプロビジョニングします。

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "A sample template", "Resources": { "MyEC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "t2.micro", "KeyName": "testkey", "BlockDeviceMappings": [ { "DeviceName": "/dev/sdm", "Ebs": { "VolumeType": "io1", "Iops": 200, "DeleteOnTermination": false, "VolumeSize": 20 } } ] } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Description: A sample template Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: t2.micro KeyName: testkey BlockDeviceMappings: - DeviceName: /dev/sdm Ebs: VolumeType: io1 Iops: 200 DeleteOnTermination: false VolumeSize: 20

また単独のテンプレートに複数のリソースを指定し、これらのリソースが連携するように設定できます。例えば、Elastic IP アドレス (EIP) を含めるように、前のテンプレートを修正して、次の例のように Amazon EC2 インスタンスと関連付けできます。

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "A sample template", "Resources": { "MyEC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "t2.micro", "KeyName": "testkey", "BlockDeviceMappings": [ { "DeviceName": "/dev/sdm", "Ebs": { "VolumeType": "io1", "Iops": 200, "DeleteOnTermination": false, "VolumeSize": 20 } } ] } }, "MyEIP": { "Type": "AWS::EC2::EIP", "Properties": { "InstanceId": { "Ref": "MyEC2Instance" } } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Description: A sample template Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: t2.micro KeyName: testkey BlockDeviceMappings: - DeviceName: /dev/sdm Ebs: VolumeType: io1 Iops: 200 DeleteOnTermination: false VolumeSize: 20 MyEIP: Type: 'AWS::EC2::EIP' Properties: InstanceId: !Ref MyEC2Instance

上記のテンプレートは単一の Amazon EC2 インスタンスについて記述したものですが、CloudFormation テンプレートの追加機能により、複雑なリソースセットを構築して、それらのテンプレートを複数のコンテキストで再利用することができます。例えば、CloudFormation スタックの作成時に値を設定できる入力パラメータを追加できます。つまり、インスタンスタイプなどの値を、テンプレート作成時ではなく、スタック作成時に指定することができ、さまざまな状況でテンプレートを再利用しやすくなります。

テンプレートの作成や機能に関する詳細については、「テンプレートの構造分析」を参照してください。

特定のリソースを宣言する詳細については、AWS リソースおよびプロパティタイプのリファレンス を参照してください。

AWS CloudFormation デザイナーで独自のテンプレートを設計するには、https://console.aws.amazon.com/cloudformation/designer を参照してください。

スタック

CloudFormation を使用する際、関連リソースはスタックと呼ばれる単一のユニットとして管理します。スタックを作成、更新、削除することで、リソースのコレクションを作成、更新、削除します。スタック内のすべてのリソースは、スタックの CloudFormation テンプレートで定義されます。Auto Scaling グループ、Elastic Load Balancing ロードバランサー、および Amazon Relational Database Service (Amazon RDS) データベースインスタンスを含むテンプレートを作成したとします。これらのリソースを作成するには、作成したテンプレートを送信することによってスタックを作成します。これにより、CloudFormation によってすべてのリソースがプロビジョニングされます。CloudFormation のコンソールAPIAWS CLI を使用してスタックを操作できます。

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

変更セット

スタックで実行中のリソースに変更を加える必要がある場合は、スタックを更新します。リソースに変更を加える前に、変更案の概要である変更セットを生成できます。変更セットで、変更が実行中のリソース、特に重要なリソースに与える可能性のある影響を、実装前に確認できます。

例えば、Amazon RDS データベースインスタンスの名前を変更すると、CloudFormation によって新しいデータベースが作成され、古いものは削除されます。古いデータベースのデータは、バックアップしていない限り、失われます。変更セットを生成すると、変更によってデータベースが置き換えられることがわかり、スタックを更新する前に対応策を立てることができます。詳細については、「変更セットを使用したスタックの更新」を参照してください。