リソース - AWS CloudFormation

リソース

必須の Resources セクションでは、スタックに含める Amazon EC2 インスタンスや Amazon S3 バケットなどの AWS リソースを宣言します。

構文

Resources セクションは、キー名 Resources で構成されます。次の擬似テンプレートで、Resources セクションの概要を示します。

JSON

"Resources" : { "Logical ID of resource" : { "Type" : "Resource type", "Properties" : { Set of properties } } }

YAML

Resources: Logical ID of resource: Type: Resource type Properties: Set of properties

リソースフィールド

論理 ID (論理名とも呼ばれます)

論理 ID は英数字(A-Za-z0-9)とし、テンプレート内で一意である必要があります。論理名は、テンプレートの他の部分のリソースを参照するために使用します。たとえば、Amazon Elastic Block Store ボリュームを Amazon EC2 インスタンスにマップする場合、論理 ID を参照してブロックストアをインスタンスに関連付けます。

特定のリソースは、論理 ID の他に物理 ID も持っています。これは、そのリソースに実際に割り当てられている名前です (EC2 インスタンス ID、S3 バケット名など)。AWS CloudFormation テンプレート外のリソースを識別するには物理 ID を使用しますが、リソースが作成された後でだけ使用できます。たとえば、EC2 インスタンスリソースに MyEC2Instance の論理 ID を指定します。AWS CloudFormation がインスタンスを作成すると、AWS CloudFormation は自動的に物理 ID (i-28f9ba55) を生成して、インスタンスに割り当てます。この物理 ID を使用して、Amazon EC2 コンソールでインスタンスを特定したり、そのプロパティ (DNS 名など) を表示したりすることができます。カスタム名をサポートしているリソースの場合は、リソースをすばやく識別するために、独自の名前 (物理 ID) を割り当てることができます。たとえば、ログを保存する S3 バケットに MyPerformanceLogs という名前を指定できます。詳細については、「Name タイプ」を参照してください。

リソースタイプ

リソースタイプは、宣言しているリソースのタイプを識別します。たとえば、AWS::EC2::Instance は EC2 インスタンスを宣言します。すべてのリソースタイプの一覧については、「AWS リソースおよびプロパティタイプのリファレンス」を参照してください。

リソースプロパティ

リソースプロパティは、リソースに対して指定できる追加オプションです。たとえば、EC2 インスタンスごとに、そのインスタンスの Amazon Machine Image (AMI) ID を指定する必要があります。次の例に示すように、AMI ID はインスタンスのプロパティとして宣言します。

例 JSON
"Resources" : { "MyEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "ami-0ff8a91507f77f867" } } }
例 YAML
Resources: MyEC2Instance: Type: "AWS::EC2::Instance" Properties: ImageId: "ami-0ff8a91507f77f867"

プロパティを宣言する必要のないリソースの場合は、そのリソースのプロパティセクションを省略できます。

プロパティの値には、リテラル文字列、文字列のリスト、ブール値、パラメーター参照、疑似参照、または関数によって返される値を使用できます。次の例は、異なるプロパティ値の型を宣言する方法を示しています。

例 JSON
"Properties" : { "String" : "one-string-value", "Number" : 123, "LiteralList" : [ "first-value", "second-value" ], "Boolean" : true, "ReferenceForOneValue" : { "Ref" : "MyLogicalResourceName" } , "FunctionResultWithFunctionParams" : { "Fn::Join" : [ "%", [ "Key=", { "Ref" : "MyParameter" } ] ] } }
例 YAML
Properties: String: OneStringValue String: A longer string value Number: 123 LiteralList: - "[first]-string-value with a special characters" - "[second]-string-value with a special characters" Boolean: true ReferenceForOneValue: Ref: MyLogicalResourceName ReferenceForOneValueShortCut: !Ref MyLogicalResourceName FunctionResultWithFunctionParams: !Sub | Key=%${MyParameter}

条件と関連付けることにより、条件付きでリソースを作成できます。テンプレートのセクションの Conditions に条件を定義する必要があります。

次は、リソース宣言の例を示します。2 つのリソースが定義されています。MyInstance リソースはその MyQueue プロパティの一部として UserData を含んでいます。

JSON

"Resources" : { "MyInstance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", [ "Queue=", { "Ref" : "MyQueue" } ] ] } }, "AvailabilityZone" : "us-east-1a", "ImageId" : "ami-0ff8a91507f77f867" } }, "MyQueue" : { "Type" : "AWS::SQS::Queue", "Properties" : { } } }

YAML

Resources: MyInstance: Type: "AWS::EC2::Instance" Properties: UserData: "Fn::Base64": !Sub | Queue=${MyQueue} AvailabilityZone: "us-east-1a" ImageId: "ami-0ff8a91507f77f867" MyQueue: Type: "AWS::SQS::Queue" Properties: {}