使用Count功能批量创建资源

简介: 本场景将以批量创建ECS实例和EIP,并为ECS实例绑定EIP为例,为您介绍如何使用Count功能。

使用Count功能批量创建资源

1. 编写ROS模板

背景说明

ALIYUN::VPC::EIP类型用于申请弹性公网IP(EIP)。如果需要申请多个弹性公网IP,则需要在模板中编写多个ALIYUN::VPC::EIP资源,这样模板会变得冗长。此时您可以使用Count功能批量创建资源。Count功能详情,请参见Count。此外,使用Count批量创建多组资源时可以通过为资源指定DependsOn并设置参数(ParallelCount)进行资源创建的并发控制。

编写ROS模版

您可以使用Count功能编写模板,创建以下资源:

1个VPC(专有网络)

1个vSwitch(交换机)

1个SecurityGroup(安全组)

4个ECS(按量付费的ECS)

4个EIP(弹性公网IP)

模板说明

当Count取值为4,会创建4个EIP资源。使用Count功能时,ParallelCount取值为2,此时会分两批创建4个EIP资源。通过ROS的预处理,会生成名为Eip[0]和Eip[1](第一批)、Eip[2]和Eip[3](第二批)的4个EIP资源。

当Count取值为4,ParallelCount取值为2,会创建4个EipBind资源,通过ALIYUN::Index伪参数逐一绑定ECS实例和EIP,此时会分两批创建4个EipBind资源。通过ROS的预处理,会生成名为EipBind[0]和EipBind[1](第一批)、EipBind[2]和EipBind[3](第二批)的4个资源。ALIYUN::Index在Count中使用,在预处理时会被替换为相应的数值。本示例中将逐一绑定ECS实例与EIP,即第1个实例绑定Eip[0]、第2个实例绑定Eip[1]、第3个实例绑定Eip[2]、第4个实例绑定Eip[3]。

当Count取值为4。将ALIYUN::ECS::InstanceGroup的MaxAmount指定为Count,取值为4,会创建4台ECS实例。

说明:请注意本模版创建的资源均属于付费云产品资源,请您体验完成后及时释放,避免造成资产浪费。

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Parameters": {
    "Count": {
      "Type": "Number",
      "Default": 4
    },
    "ZoneId": {
      "Type": "String"
    },
    "InstanceType": {
      "Type": "String",
      "Default": "ecs.c6.large"
    },
    "Password": {
      "Type": "String",
      "Default": "Abc1****",
      "NoEcho": true
    },
    "ParallelCount": {
      "Type": "Number",
      "Default": 2
    },
    "SystemDiskCategory": {
      "Type": "String"
    }
  },
  "Metadata": {
    "ALIYUN::ROS::Interface": {
      "ParameterGroups": [
        {
          "Parameters": [
            "Count",
            "ZoneId",
            "InstanceType",
            "Password",
            "ParallelCount",
            "SystemDiskCategory"
          ],
          "Label": {
            "default": {
              "zh-cn": "基础配置",
              "en": "Basic Configuration"
            }
          }
        }
      ],
      "TemplateTags": [
        "acs:example:云起实验室:使用Count功能批量创建资源"
      ]
    }
  },
  "Resources": {
    "Vpc": {
      "Type": "ALIYUN::ECS::VPC",
      "Properties": {
        "CidrBlock": "10.0.0.0/8",
        "VpcName": "test-resource-count"
      }
    },
    "VSwitch": {
      "Type": "ALIYUN::ECS::VSwitch",
      "Properties": {
        "CidrBlock": "10.0.10.0/24",
        "ZoneId": {
          "Ref": "ZoneId"
        },
        "VpcId": {
          "Ref": "Vpc"
        }
      }
    },
    "SecurityGroup": {
      "Type": "ALIYUN::ECS::SecurityGroup",
      "Properties": {
        "SecurityGroupName": "test-resource-count",
        "VpcId": {
          "Ref": "Vpc"
        }
      }
    },
    "Eip": {
      "Type": "ALIYUN::VPC::EIP",
      "Count": {
        "Ref": "Count"
      },
      "DependsOn": {
        "Fn::Select": [
          {
            "Fn::Calculate": [
              "1-{0}//{1}",
              0,
              [
                {
                  "Fn::Min": [
                    {
                      "Ref": "ALIYUN::Index"
                    },
                    {
                      "Ref": "ParallelCount"
                    }
                  ]
                },
                {
                  "Ref": "ParallelCount"
                }
              ]
            ]
          },
          [
            {
              "Fn::Replace": [
                {
                  "index": {
                    "Fn::Calculate": [
                      "{0}-{1}",
                      0,
                      [
                        {
                          "Ref": "ALIYUN::Index"
                        },
                        {
                          "Ref": "ParallelCount"
                        }
                      ]
                    ]
                  }
                },
                "Eip[index]"
              ]
            }
          ]
        ]
      },
      "Properties": {
        "Bandwidth": 5
      }
    },
    "Servers": {
      "Type": "ALIYUN::ECS::InstanceGroup",
      "Properties": {
        "ImageId": "centos_7",
        "InstanceType": {
          "Ref": "InstanceType"
        },
        "VpcId": {
          "Ref": "Vpc"
        },
        "VSwitchId": {
          "Ref": "VSwitch"
        },
        "SecurityGroupId": {
          "Ref": "SecurityGroup"
        },
        "Password": {
          "Ref": "Password"
        },
        "AllocatePublicIP": false,
        "MaxAmount": {
          "Ref": "Count"
        },
        "SystemDiskCategory": {
          "Ref": "SystemDiskCategory"
        }
      }
    },
    "EipBind": {
      "Type": "ALIYUN::VPC::EIPAssociation",
      "Count": {
        "Ref": "Count"
      },
      "DependsOn": {
        "Fn::Select": [
          {
            "Fn::Calculate": [
              "1-{0}//{1}",
              0,
              [
                {
                  "Fn::Min": [
                    {
                      "Ref": "ALIYUN::Index"
                    },
                    {
                      "Ref": "ParallelCount"
                    }
                  ]
                },
                {
                  "Ref": "ParallelCount"
                }
              ]
            ]
          },
          [
            {
              "Fn::Replace": [
                {
                  "index": {
                    "Fn::Calculate": [
                      "{0}-{1}",
                      0,
                      [
                        {
                          "Ref": "ALIYUN::Index"
                        },
                        {
                          "Ref": "ParallelCount"
                        }
                      ]
                    ]
                  }
                },
                "EipBind[index]"
              ]
            }
          ]
        ]
      },
      "Properties": {
        "InstanceId": {
          "Fn::Select": [
            {
              "Ref": "ALIYUN::Index"
            },
            {
              "Fn::GetAtt": [
                "Servers",
                "InstanceIds"
              ]
            }
          ]
        },
        "AllocationId": {
          "Fn::Select": [
            {
              "Ref": "ALIYUN::Index"
            },
            {
              "Ref": "Eip"
            }
          ]
        }
      }
    }
  },
  "Outputs": {
    "InstanceIds": {
      "Value": {
        "Fn::GetAtt": [
          "Servers",
          "InstanceIds"
        ]
      }
    },
    "AllocationIds": {
      "Value": {
        "Ref": "Eip"
      }
    },
    "EipAddresses": {
      "Value": {
        "Fn::GetAtt": [
          "Eip",
          "EipAddress"
        ]
      }
    }
  }
}

2. 创建资源栈

以下操作需登录阿里云账号,在资源编排控制台完成以下操作流程。

访问资源编排控制台

1. 进入资源编排控制台

访问资源栈页面

2. 在资源编排控制台左侧导航栏中单机资源栈。

选择资源创建地域

3. 在页面左上角的地域下拉列表,选择资源栈的所在地域(例如:华北2:北京)。

创建资源栈

4. 在资源栈列表页面,单击创建资源栈,然后在下拉列表中选择使用新资源(标准)

输入模板

5. 在选择模板页面,选择已有模板:选择输入模板方式,然后将上述示例模板内容复制到模板内容输入框内。然后单击下一步

模板参数配置

6. 在配置模板参数页面,配置资源栈名称及其余参数,然后单击下一步

资源栈参数说明

参数

说明

ZoneId

专有网络下的交换机可用区ID。

InstanceType

ECS实例的规格。

请选用有效的实例规格。更多信息,请参见实例规格族

SystemDiskCategory

ECS系统盘的类型。取值:

  • cloud_efficiency:高效云盘。
  • cloud_ssd:SSD云盘。
  • cloud_essd:ESSD云盘。
  • cloud:普通云盘。
  • ephemeral_ssd:本地SSD盘。

更多信息,请参见云盘概述

Password

ECS实例的密码。

Count

创建ECS与EIP的个数

ParallelCount

每批并发处理资源的数量

资源栈信息配置

配置项

说明

资源栈策略

取值:

  • 无资源栈策略:不设置资源栈策略。
  • 输入资源栈策略:上传文件或在文本框手动输入资源栈策略。

关于资源栈策略的更多信息,请参见资源栈策略

失败时回滚

取值:

  • 已启用:创建资源栈失败时,启用回滚策略。
  • 已禁用:创建资源栈失败时,禁用回滚策略。

超时设置

如果所有资源的创建或更新没有在该时间内完成,系统将自动回滚到创建或更新之前的状态。

取值范围:10~1440。

单位:分钟。

删除保护

防止资源栈被意外删除。取值:

  • 已启用:启用删除保护。
  • 已禁用:禁用删除保护。

RAM角色

您可以创建可信实体为资源编排服务的RAM角色,然后根据ROS模板中资源所需最小权限为RAM角色授权。

标签

由一对键值对组成,方便您对资源栈进行分类。

您可以单击添加,然后在编辑标签绑定对话框设置标签键标签值,最后单击确定

资源组

您可以选择资源栈所在的资源组。如果不指定资源组,资源栈将加入默认资源组。

关于如何创建资源组,请参见创建资源组

创建资源栈

7. 在检查并确认页面,单击创建。

3. 查看资源栈

本步骤将指导您在完成创建资源栈操作后,如何查询资源栈详情。

1. 进入资源编排控制台

2. 在左侧导航栏单击资源栈

3. 在页面左上角的地域下拉列表,选择资源栈的所在地域。

4. 在资源栈列表页面,找到需要查看的资源栈,单击资源栈名称列的资源栈ID

查看资源栈资源

5. 单击资源页签,查看资源栈创建涉及到的资源。

说明:本场景创建的云产品资源涉及扣费,体验完成后为避免资产浪费,请您及时释放。您可以点击资源列表下的EcsInstance栏中的ECS实例ID,即可跳转至ECS控制台查看本次创建的ECS资源信息。

4. 释放资源栈

本步骤将指导您如何释放通过资源编排控制台创建资源内容。

进入资源栈列表

1. 在资源栈列表页面,找到您创建的资源栈,单击操作列下的删除。

选择资源栈删除方式并删除

2. 在删除资源栈对话框中,删除方式选择释放资源,单击确定。

实验链接:https://developer.aliyun.com/adc/scenario/c98b50eb66ab4e03b5df44d13150cb0c

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
UE4 更新资源时修改导入设置
UE4 更新资源时修改导入设置
121 0
|
7月前
|
JSON 数据中心 数据格式
Terraform 系列 - 批量创建资源时如何根据某个字段判断是否创建
Terraform 系列 - 批量创建资源时如何根据某个字段判断是否创建
|
BI 数据处理 开发工具
【批量创建,删除工作表】
【批量创建,删除工作表】
|
编译器 C语言 C++
【C++11】 列表初始化 auto 范围for 新增关键字 新增容器
【C++11】 列表初始化 auto 范围for 新增关键字 新增容器
91 0
|
存储 开发框架 前端开发
ModStartCMS v5.5.0 页面标签支持,用户逻辑优化
ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。
流程定义查询和删除
流程定义查询流程定义查询和删除
SAP MM MB21 创建预留界面批量为多个行项目勾选M标记
SAP MM MB21 创建预留界面批量为多个行项目勾选M标记
SAP MM MB21 创建预留界面批量为多个行项目勾选M标记
|
关系型数据库 MySQL
有数据进行更新 没有进行新增 怎么操作
有数据进行更新 没有进行新增
313 0
|
弹性计算 运维 监控
基于标签(TAG)批量管理资源
如何基于标签实现批量管理资源的实践?比如:基于标签中指定环境(key=env)为预发(value=pre)加应用名称(key=appname, value=alipay)的资源来批量启动;批量安装插件;批量启动机器;批量更换操作系统;批量升级带宽;批量删除资源等等。
2284 0
基于标签(TAG)批量管理资源
【产品功能】创建实例支持同时加入多个安全组
背景: 长期以来,创建ECS实例只支持同时加入一个安全组,但是某些友商支持多个安全组,这会增加混合云用户上云成本,比如基于Terraform的国际站用户想迁移到阿里云就要修改大量代码。为此ECS提供了创建实例同时加入多个安全组的功能,此功能一方面可以让上述用户最小成本使用阿里云,另外一方面也降低实例加入多个安全组的复杂度,可以方便的随实例创建同时加入多个安全组。
1196 0