资源
必需的 Resources
部分声明您要包含在堆栈中的 Amazon 资源,例如 Amazon EC2 实例或 Amazon S3 桶。
语法
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: {}