开发者社区> wangyue> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

资源编排模板详解

简介:
+关注继续查看

资源编排中的模板,是对一组资源的定义和描述。您可以按照模板语法和资源的属性,编写自己的模板,也可以直接使用阿里云提供的模板样例。目前,支持20多种阿里云资源的编排服务。本文将对阿里云资源和资源编排模板分别进行介绍。

1. 资源

开始编写模板之前,您需要对所需的资源有所了解。

资源Type

一个资源类型,对应一种阿里云资源,是每种资源的唯一标识。您可以查阅资源类型列表

图1

例如,阿里云云服务器的资源类型是 ALIYUN::ECS::Instance

资源Properties

列出了当前资源支持的所有可配置属性。

图2

如上图所示,云服务器的可配置属性有 SecurityGroupId, InstanceType, ImageId等。归根结底,编写模板就是编辑资源,您可以通过配置资源的属性来自定义资源。在元数据中,清楚了描述了每个属性的特性。下面介绍几个比较重要的特性:

  • key: 属性关键字。通过它来标识您要配置当前资源的哪个属性。
  • type: 表明当前属性值是什么类型。您在给属性赋值的时候,类型一定要匹配。否则在创建模板的时候,语法检查会不通过。
  • required: 表明此属性是否是必须配置项。如果某项属性被标记为 requiredtrue,那么这个属性是必须要配置的。例如,资源 ALIYUN::ECS::InstanceSecurityGroupId, InstanceTypeImageId 三个属性都被标记为 required ,那么当您编辑 ALIYUN::ECS::Instance 类型的资源的时候,这三个属性的配置是不能省略的。
  • constraints: 表明当前属性是否有其他约束。例如,DiskMappings 的constraints如下:

    [ { "length": { "max": 4 } } ]

    表明DiskMappings的值的长度不能超过4,同时DiskMappings的type为list,那么当您给DiskMappings赋值时,要配置成长度不好过4的数组。

资源Attributes

Attributes 枚举了当前资源的所有可获取属性,以及属性的描述信息。

图3

如上图所示,云服务器的可获取属性有 InstanceId, ZoneId等。可获取属性,可以在 ResourcesOutputs 两部分中进行获取。例如,下面模板片段定义了一个名为WebServer的 ALIYUN::ECS::Instance 资源,在Outputs部分通过Fn::GetAtt方法,获取到WebServer的实例ID。

"Resources" : {
  "WebServer": {
    "Type": "ALIYUN::ECS::Instance",
    "Properties": {
      "ImageId" : {"Ref": "ImageId"},
      "InstanceType": {"Ref": "InstanceType"},
      "SecurityGroupId": {"Ref": "SecurityGroupId"}
    }
  }
},
"Outputs": {
  "InstanceId": {
       "Value" : {"Fn::GetAtt": ["WebServer","InstanceId"]}
  }
}

2. 模板

接下来,会对资源编排模板进行详细的介绍。模板是一个 JSON 格式的文本文件。一般而言,模板分为六个部分:ROSTemplateFormatVersion, Description, Parameters, Mappings, ResourcesOutputs。 格式如下:

{
  "ROSTemplateFormatVersion" : "2015-09-01",

  "Description" : "模板描述",

  "Parameters" : {
  },

  "Mappings" : {
  },

  "Resources" : {
  },

  "Outputs" : {
  }
}

其中,只有 ROSTemplateFormatVersion必须指定 的部分。

  • ROSTemplateFormatVersion: 指定模板格式的版本,目前仅支持值 2015-09-01
  • Description: 模板的描述信息

下面对 Parameters, Mappings, Resources, Outputs 逐一说明。

2.1 Resources

描述资源栈中每个资源,以及资源之间的关系。一个资源可以被其他资源和 Outputs 所引用。

Resources 语法

"Resources" : {
    "资源 ID" : {
        "Type" : "资源类型",
        "Properties" : {
        },
        "DeletionPolicy" : "Retain",
        "DependsOn": "资源"
    }
}
  • 资源 ID: 是资源在当前模板中的唯一标识,可以被其他的部分引用。您可以任意设置。
  • Type: 标识当前资源的类型,参考资源类型
  • Properties:

    • 您可以给此资源配置任意多个属性,做为创建物理资源的参数和值。每种资源的可配置属性,可以通过 ROS控制台 -> 资源类型 -> 属性数据 来查看。例如,ECS Instance 的 Properties 地址
    • 属性值类型可以是字符串、字符串列表、布尔值,也可以引用Parameters。下面是一个简单的例子,资源WebServer的属性 ImageId 和 SecurityGroupId 分别引用参数 ImageIdRef 和 SecurityGroupId 参数。有关 Parameters详解见下节
      {
        "ROSTemplateFormatVersion" : "2015-09-01",
        "Description": "ecs实例,指定imageId",
        "Parameters" : {
          "ImageIdRef": {
            "Type" : "String",
            "Description": "镜像文件 ID,表示启动实例时选择的镜像资源"
          },
          "SecurityGroupId": {
            "Type": "String",
            "Description": "安全组Id"
          }
        },
        "Resources" : {
          "WebServer": {
            "Type": "ALIYUN::ECS::Instance",
            "Properties": {
              "ImageId" : {"Ref": "ImageIdRef"},
              "InstanceType": "ecs.t1.small",
              "SecurityGroupId": {"Ref": "SecurityGroupId"}
            }
          }
        }
      }
    
  • DeletionPolicy: 配置此属性,可以在资源栈被删除时 保留 该资源
  • DependsOn: 指定资源的创建顺序。下面是一个简单的例子,DatabaseServer 将在 WebServer 创建成功后才开始创建。

{
  "ROSTemplateFormatVersion" : "2015-09-01",
  "Description": "先创建DBServer, 再创建WebServer",
  "Parameters" : {
    "SecurityGroupId": {
      "Type": "String",
      "Description": "安全组Id"
    }
  },
  "Resources" : {
    "WebServer": {
      "Type": "ALIYUN::ECS::Instance",
      "DependsOn": "DatabseServer"
    },
    "DatabseServer": {
      "Type": "ALIYUN::ECS::Instance",
      "Properties": {
        "ImageId" : "m-25l0rcfjo",
        "InstanceType": "ecs.t1.small",
        "SecurityGroupId": {"Ref": "SecurityGroupId"}
      }
    }
  }
}

2.2 Parameters

把可能会变化的值,放到Parameter中,让模板变得更灵活。详细描述请参考帮助文档注意,这里仅仅是把易变项抽象为参数而已,在创建资源栈的时候需要给每个参数赋值。

Parameters 语法

通过文档可知 Parameters 可以配置的属性比较多,不过只有 Type 这个属性是 必须设置 的。 格式如下:

"Parameters" : {
    "参数 ID" : {
        "Type" : "参数类型"
    }
}
  • 参数 ID: 参数唯一标识,可以在 Resources 部分引用。
  • Type: 参数的数据类型。支持 String, Number, CommaDelimitedList, Json, Boolean 五种数据类型。
  • Default: 给参数配置缺省值。创建资源栈的时候,如果您没有显示的给参数赋值,那么将采用 Default值
  • AllowedValues: 配置合法的参数值列表。您可以配置此项,来约束参数值的可选值。
  • MaxLength 和 MinLength: 当参数的Type为 String 类型时,可以通过这两个配置项来限定参数值的长度。
  • MaxValue 和 MinValue: 当参数的Type为 Number 类型时,可以通过这两个配置项来限定参数值的大小。
  • NoEcho: 如果您希望调用查询资源栈时隐藏参数值,可以设置 NoEcho: true

Parameters 示例

以下 Parameters 部分示例声明两个参数。

  • InstanceType 参数类型是 String 类型,默认值是 ecs.t1.small ,允许值是 ecs.t1.small 和 ecs.t1.xsmall 两种值。
  • SecurityGroupPriority 参数类型是 Number ,可指定的最大值是 100 ,最小值是 1。
"Parameters" : {
    "InstanceType": {
      "Type": "String",
      "Default": "ecs.t1.small",
      "Description": "实例的资源规格",
      "AllowedValues": [
        "ecs.t1.xsmall",
        "ecs.t1.small"
      ]
    },
    "SecurityGroupPriority": {
      "Default": 1,
      "Description": "生成的安全组的优先级,优先级可选范围为1-100,默认值为1,即最高优先级。",
      "Type": "Number",
      "MinValue": 1,
      "MaxValue": 100
    }
}

2.3 Mappings

Mappings 部分,您可以配置多个枚举值或者映射表。在模板的 ResourcesOutputs 部分可以使用 Fn::FindInMap 内部函数,通过给定 key 获取 value。

Mappings 语法

映像部分由 Key-Value 对组成。其中 Key 和 Value 可以为字符串类型或者数字类型。筛选某个值,搜索深度为3。定义 Mappings,格式如下:

"Mappings" : {
    "ValidMapping" : {
        "TestKey1" : { "key1" : "value1" }
    }
}

获取枚举值的方法如下:

{ "Fn::FindInMap" : [ "ValidMapping", { "Ref" : "TestKey1" }, "key1"]}

Mappings 示例

以下示例,展示类型是 ALIYUN::ECS::Instance 的资源 WebServer,其属性 ImageId 根据 region 以及操作系统位数进行映射。

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Parameters": {
    "regionParam": {
        "Description": "选择创建ECS的区域",
        "Type": "String",
        "AllowedValues": ["hangzhou", "beijing"]
    },
    "sysTypeParam": {
        "Description": "操作系统位数",
        "Type": "Number",
        "AllowedValues": [32, 64]
    },
    "SecurityGroupId": {
      "Type": "String",
      "Description": "安全组Id"
    }de
  },
  "Mappings" : {
    "RegionMap" : {
      "hangzhou" : { "32" : "m-25l0rcfjo", "64" : "m-25l0rcfj1" },
      "beijing" : { "32" : "m-25l0rcfj2", "64" : "m-25l0rcfj3" }
    }
  },
  "Resources": {
    "WebServer": {
      "Type": "ALIYUN::ECS::Instance",
      "Properties": {
        "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "regionParam" }, { "Ref" : "sysTypParam" }]},
        "InstanceType": "ecs.t1.small",
        "SecurityGroupId": {"Ref": "SecurityGroupId"}
      }
    }
  }
}

2.4 Outputs

当您调用查询资源栈详情接口的时候,资源编排服务会根据 Outputs 部分返回对应的值,往往用来获取资源的属性值。

Outputs 语法

输出部分由 输出ID输出值表达式 组成。格式如下:

"Outputs" : {
    "输出 ID" : {
        "Description" : "输出的描述",
        "Value" : {输出值表达式}
    }
}

其中,输出值表达式,使用内部函数 Fn::GetAtt 来获取资源的属性值。格式如下:

{"Fn::GetAtt": ["resourceId", "attributeId"]}

Outputs 示例

在以下示例中,分别获取资源 WebServer 的 InstanceId 属性和 PublicIp 属性。

"Outputs": {
  "InstanceId": {
       "Value" : {"Fn::GetAtt": ["WebServer","InstanceId"]}
  },
  "PublicIp": {
       "Value" : {"Fn::GetAtt": ["WebServer","PublicIp"]}
  }
}

更多模板示例,请参考 ROS 模板样例

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Idea 中图片资源无法加载问题
Idea 中图片资源无法加载问题
143 0
资源编排ROS之资源场景
# 背景 [资源编排服务](https://help.aliyun.com/document_detail/28852.html)(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎
54 0
资源编排ROS之资源场景
资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。 基于IaC的理念,可以标准化基础设施,但是这也意味着需要对模板语法足够熟悉。有些时候,我们只想要简单地对资源进行复制、迁移等操作,而不想花时间去写模板;或者,已经有一批资源,希望能够自动根据这批资源生成模板。这个时候不妨使用ROS的资源场景功能,它一定会让你觉得对资源的操作是如此简单。
79 0
人力资源管理系统和oa的区别?
人力资源管理系统和OA系统都是企业常用的两款线上管理辅助工具,由于这两款系统的功能高度重合,常常被人们误以为是一个系统。但只要我们仔细去观察的话,这两款系统的功能和作用还是有很大的不同,而且从命名上人们把他们分为两个系统,也就证明这二者有着本质上的区别。下面就来详细介绍一下~
154 0
阿里云资源编排之异步通知
资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。 ROS资源编排接入了大量的阿里云资源,目前涉
543 0
资源整合贴
由于百度网盘分享的资源, 经常莫名其妙的挂掉, 我把资源都转存到Github仓库里, 有Github账户的大佬, 取资源之间, 给个星哈~ Python为图片素材起个英文名 Github地址:https://github.
1335 0
解决ORA-00054资源正忙的问题
有时候在drop表或者其他对象的时候,会遇到ORA-00054:资源正忙,要求指定NOWAIT(中文字符集)或者ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired错误(英文字符集),Oracle官...
1422 0
国外程序员推荐的免费编程书籍资源
  StackOverflow 上有位网友(xenoterracide)提问: 我正试着搜集整理一个可在网上免费阅读的计算机编程书籍列表。
1358 0
+关注
18
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载