全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网
资源编排

资源(Resources)

更新时间:2017-06-07 13:26:11

描述堆栈中每一个资源的属性和依赖关系。一个资源可以被其他资源和 Outputs 所引用。

语法

资源部分由资源 ID 和资源描述组成。所有资源描述都被括在括号里。如果您声明多个资源,则可用逗号将它们分隔开。以下代码段描述了 Resources 的语法结构:

  1. "Resources" : {
  2. "资源1 ID" : {
  3. "Type" : "资源类型",
  4. "Condition": "是否创建次资源的条件"
  5. "Properties" : {
  6. 资源属性描述
  7. }
  8. },
  9. "资源 2 ID" : {
  10. "Type" : "资源类型",
  11. "Condition": "是否创建次资源的条件"
  12. "Properties" : {
  13. 资源属性描述
  14. }
  15. }
  16. }

资源 ID

资源 ID 在模板中具有唯一性。可使用资源 ID 在模板的其他部分中引用资源。

资源类型

资源类型标识您正在声明的资源的类型。例如,ALIYUN::ECS::Instance 声明阿里云 ECS 实例。有关所有资源的列表,请参阅 资源列表

资源属性

资源属性是可以为资源指定的附加选项。例如,对于每个阿里云 ECS 实例,必须为该实例指定一个 Image ID。如以下代码段所示:

  1. "Resources" : {
  2. "ECSInstance" : {
  3. "Type" : "ALIYUN::ECS::Instance",
  4. "Properties" : {
  5. "ImageId" : "m-25l0rcfjo"
  6. }
  7. }
  8. }

如果资源不需要声明任何属性,那么您可以忽略该资源的属性部分。

属性值可以是文本字符串、字符串列表、布尔值、参数引用或者函数返回的值。如果属性值为文件字符串,该值会被双引号括起来。如果值为任一类型的列表结果,则它会被中括号 ([ ]) 括起来。如果值为内部函数或引用的结果,则它会被大括号 ({ }) 括起来。当您将文字、列表、参考和函数合并起来获取值时,上述规则适用。以下示例说明如何声明不同的属性值类型:

  1. "Properties" : {
  2. "String" : "string",
  3. "LiteralList" : [ "value1", "value2" ],
  4. "Boolean" : "true"
  5. "ReferenceForOneValue" : { "Ref" : "ResourceID" } ,
  6. "FunctionResultWithFunctionParams" : {
  7. "Fn::Join" : [ "%", [ "Key=", { "Ref" : "SomeParameter" } ] ] }
  8. }

DeletionPolicy

利用 DeletionPolicy 属性,用户可以在某个资源的堆栈被删除时保留该资源。如以下代码段所示:

  1. "Resources" : {
  2. "ECSInstance" : {
  3. "Type" : "ALIYUN::ECS::Instance",
  4. "Properties" : {
  5. "ImageId" : "m-25l0rcfjo"
  6. },
  7. "DeletionPolicy" : "Retain"
  8. }
  9. }

在上例中,如果模板对应的堆栈被删除,则会保留 ECSInstance 资源。

DependsOn

使用 DependsOn 属性可以指定特定资源紧跟着另一个资源创建。在您为资源添加 DependsOn 属性时,该资源仅在创建 DependsOn 属性中指定的资源之后创建。

如以下代码段所示,WebServer 将在 DatabaseServer 创建成功后才开始创建:

  1. {
  2. "ROSTemplateFormatVersion" : "2015-09-01",
  3. "Resources" : {
  4. "WebServer": {
  5. "Type": "ALIYUN::ECS::Instance",
  6. "DependsOn": "DatabseServer"
  7. },
  8. "DatabseServer": {
  9. "Type": "ALIYUN::ECS::Instance",
  10. "Properties": {
  11. "ImageId" : "m-25l0rcfjo",
  12. "InstanceType": "ecs.t1.small"
  13. }
  14. }
  15. }
  16. }

Condition

使用 Condition 属性可以指定是否需要正真创建此资源。当只有 Condition 所指定的条件值为 true 时才创建此资源。

如以下代码段所示,根据 MaxAmount 的值判断否创建 WebServer:

  1. {
  2. "ROSTemplateFormatVersion" : "2015-09-01",
  3. "Parameters": {
  4. "MaxAmount": {
  5. "Type": "Number",
  6. "Default": 1
  7. }
  8. },
  9. "Conditions": {
  10. "CreateWebServer": {"Fn::Not": {"Fn::Equals": [0, {"Ref": "MaxAmount"}]}}
  11. }
  12. "Resources" : {
  13. "WebServer": {
  14. "Type": "ALIYUN::ECS::InstanceGroup",
  15. "Condition": "CreateWebServer",
  16. "Properties": {
  17. "ImageId" : "m-25l0rcfjo",
  18. "InstanceType": "ecs.t1.small"
  19. "MaxAmount": {"Ref": "MaxAmount"}
  20. }
  21. },
  22. "DatabseServer": {
  23. "Type": "ALIYUN::ECS::Instance",
  24. "Properties": {
  25. "ImageId" : "m-25l0rcfjo",
  26. "InstanceType": "ecs.t1.small"
  27. }
  28. }
  29. }
  30. }

示例

以下示例显示的是典型的资源声明。

  1. "Resources" : {
  2. "WebServer": {
  3. "Type": "ALIYUN::ECS::Instance",
  4. "Properties": {
  5. "ImageId" : "m-25l0rcfjo",
  6. "InstanceType": "ecs.t1.small",
  7. "SecurityGroupId": "sg-25zwc3se0",
  8. "ZoneId": "cn-beijing-b",
  9. "Tags": [{
  10. "Key": "Department1",
  11. "Value": "HumanResource"
  12. },{
  13. "Key": "Department2",
  14. "Value": "Finance"
  15. }
  16. ]
  17. }
  18. },
  19. "ScalingConfiguration": {
  20. "Type": "ALIYUN::ESS::ScalingConfiguration",
  21. "Properties": {
  22. "ImageId": "ubuntu1404_64_20G_aliaegis_20150325.vhd",
  23. "InstanceType": "ecs.t1.small",
  24. "InstanceId": "i-25xhhcqbu",
  25. "InternetChargeType": "PayByTraffic",
  26. "InternetMaxBandwidthIn": 1,
  27. "InternetMaxBandwidthOut": 20,
  28. "SystemDisk_Category": "cloud",
  29. "ScalingGroupId": "bwhtvpcBcKYac9fe3vd0kv7E",
  30. "SecurityGroupId": "sg-25zwc3se0",
  31. "DiskMappings": [
  32. {
  33. "Size": 10
  34. },
  35. {
  36. "Category": "cloud",
  37. "Size": 10
  38. }
  39. ]
  40. }
  41. }
  42. }
本文导读目录