资源(Resources)用于描述资源栈中每个资源的属性和资源之间依赖关系。一个资源可以被其它资源和Outputs所引用。

语法

Resources由资源ID和资源描述组成。资源描述用大括号括起。如果声明多个资源,用逗号分隔开。Resources的语法结构示例代码段如下:

"Resources" : {
    "资源1 ID" : {
        "Type" : "资源类型",
        "Condition": "是否创建此资源的条件",
        "Properties" : {
            资源属性描述
        }
    },
    "资源 2 ID" : {
        "Type" : "资源类型",
        "Condition": "是否创建此资源的条件",
        "Properties" : {
            资源属性描述
        }
    }
}
参数说明如下:
  • 资源ID在模板中具有唯一性。在创建模板其它部分时,可以通过资源ID引用该资源。
  • 资源类型(Type)表示正在声明的资源的类型。例如,ALIYUN::ECS::Instance表示阿里云ECS实例。有关ROS支持的所有资源类型列表和详细信息,请参见资源类型索引
  • 资源属性(Properties)是为资源指定的附加选项。例如,必须为每个阿里云ECS实例指定一个Image ID。

示例

"Resources" : {
  "ECSInstance" : {
    "Type" : "ALIYUN::ECS::Instance",
    "Properties" : {
      "ImageId" : "m-25l0rcfjo"
    }
  }
}

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

属性值可以是文本字符串、字符串列表、布尔值、引用参数或者函数返回值。如果属性值为文本字符串,该值会被双引号(" ")括起来。如果属性值为任一类型的字符串列表,则会被中括号([ ])括起来。如果值为内部函数或引用的参数,则会被大括号({ })括起来。当您将文字、列表、引用参数和函数返回值合并起来取值时,上述规则也适用。

声明不同的属性值类型示例如下:

"Properties" : {
    "String" : "string",
    "LiteralList" : [ "value1", "value2" ],
    "Boolean" : "true"
    "ReferenceForOneValue" :  { "Ref" : "ResourceID" } ,
    "FunctionResultWithFunctionParams" : {
        "Fn::Join" : [ "%", [ "Key=", { "Ref" : "SomeParameter" } ] ] }
}

DeletionPolicy

在模板中,设置DeletionPolicy属性,可以声明在资源栈被删除时保留某个资源。例如,设置在资源栈删除时,保留ECS实例。可按照以下代码段进行声明:
"Resources" : {
  "ECSInstance" : {
    "Type" : "ALIYUN::ECS::Instance",
    "Properties" : {
      "ImageId" : "m-25l0rcfjo"
    },
    "DeletionPolicy" : "Retain"
  }
}

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

DependsOn

在模板中,设置DependsOn属性,可以指定特定资源紧跟着另一个资源后创建。为某个资源添加DependsOn属性后,该资源仅在DependsOn属性中指定的资源之后创建。

注意 允许DependsOn依赖的资源ConditionFalse,为False时不影响该资源的创建。
用法示例包括以下两种:
  • 依赖单个资源:
    "DependsOn": "ResourceName"
  • 依赖多个资源:
    "DependsOn": [
                   "ResourceName1",
                   "ResourceName2"
                 ]   
如以下代码段所示,WebServer将在DatabaseServer创建成功后才开始创建:
{
  "ROSTemplateFormatVersion" : "2015-09-01",
  "Resources" : {
    "WebServer": {
      "Type": "ALIYUN::ECS::Instance",
      "DependsOn": "DatabseServer"
    },
    "DatabseServer": {
      "Type": "ALIYUN::ECS::Instance",
      "Properties": {
        "ImageId" : "m-25l0rcfjo",
        "InstanceType": "ecs.t1.small"
      }
    }
  }
}        

Condition

在模板中,使用Condition属性可以指定是否需要创建此资源。只有Condition所指定的条件值为True时,才会创建此资源。

如以下代码段所示,根据MaxAmount的值判断否创建WebServer:
{
  "ROSTemplateFormatVersion" : "2015-09-01",
  "Parameters": {
    "MaxAmount": {
      "Type": "Number",
      "Default": 1
    }
  },
  "Conditions": {
    "CreateWebServer": {"Fn::Not": {"Fn::Equals": [0, {"Ref": "MaxAmount"}]}}
  }
  "Resources" : {
    "WebServer": {
      "Type": "ALIYUN::ECS::InstanceGroup",
      "Condition": "CreateWebServer",
      "Properties": {
        "ImageId" : "m-25l0rcfjo",
        "InstanceType": "ecs.t1.small"
        "MaxAmount": {"Ref": "MaxAmount"}
      }
    },
    "DatabseServer": {
      "Type": "ALIYUN::ECS::Instance",
      "Properties": {
        "ImageId" : "m-25l0rcfjo",
        "InstanceType": "ecs.t1.small"
      }
    }
  }
}

资源声明示例

典型的资源声明示例如下:

"Resources" : {
    "WebServer": {
      "Type": "ALIYUN::ECS::Instance",
      "Properties": {
        "ImageId" : "m-25l0rcfjo",
        "InstanceType": "ecs.t1.small",
        "SecurityGroupId": "sg-25zwc3se0",
        "ZoneId": "cn-beijing-b",
        "Tags": [{
            "Key": "Department1",
            "Value": "HumanResource"
        },{
            "Key": "Department2",
            "Value": "Finance"
        }
        ]
      }
    },
    "ScalingConfiguration": {
      "Type": "ALIYUN::ESS::ScalingConfiguration",
      "Properties": {
        "ImageId": "ubuntu1404_64_20G_aliaegis_20150325.vhd",
        "InstanceType": "ecs.t1.small",
        "InstanceId": "i-25xhhcqbu",
        "InternetChargeType": "PayByTraffic",
        "InternetMaxBandwidthIn": 1,
        "InternetMaxBandwidthOut": 20,
        "SystemDisk_Category": "cloud",
        "ScalingGroupId": "bwhtvpcBcKYac9fe3vd0kv7E",
        "SecurityGroupId": "sg-25zwc3se0",
        "DiskMappings": [
            {
                "Size": 10
            },
            {
                "Category": "cloud",
                "Size": 10
            }
        ]
      }
    }
}