资源 - AWS CloudFormation

资源

必需的 Resources 部分声明您要包含在堆栈中的 AWS 资源,例如 Amazon EC2 实例或 Amazon S3 桶。

语法

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 存储桶名称。使用物理 ID 来标识 AWS CloudFormation 模板外部的资源,但是仅在创建了资源之后。例如,假设您为一个 EC2 实例资源指定 MyEC2Instance 的逻辑 ID。当 AWS CloudFormation 创建实例时,AWS CloudFormation 会自动生成物理 ID(如 i-28f9ba55)并将其分配给该实例。您可以使用该物理 ID 来标识实例,可以使用 Amazon EC2 控制台查看其属性 (如 DNS 名称)。对于支持自定义名称的资源,您可以分配自己的名称 (物理 ID) 以帮助您快速标识资源。例如,您可以将存储日志的 S3 存储桶命名为 MyPerformanceLogs。有关更多信息,请参阅 名称类型

资源类型

资源类型标识您正在声明的资源的类型。例如,AWS::EC2::Instance 声明 EC2 实例。有关所有资源的列表,请参阅AWS 资源和属性类型参考

资源属性

资源属性是可以为资源指定的附加选项。例如,对于每个 EC2 实例,您必须为该实例指定一个 Amazon 系统映像 (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 部分中定义此条件。

示例

以下示例显示了资源声明。其中定义了两种资源。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: {}