资源 - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

资源

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

Syntax

Resources 部分包括键名称 Resources。以下伪模板概述了 Resources 部分:

JSON

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

YAML

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

资源类型

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

资源属性

资源属性是可以为资源指定的附加选项。例如,对于每个 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: {}