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 コンソールAPI、または AWS CLI を使用できます。

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

変更セット

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

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