背景:
长期以来,创建ECS实例只支持同时加入一个安全组,但是某些友商支持多个安全组,这会增加混合云用户上云成本,比如基于Terraform的国际站用户想迁移到阿里云就要修改大量代码。为此ECS提供了创建实例同时加入多个安全组的功能,此功能一方面可以让上述用户最小成本使用阿里云,另外一方面也降低实例加入多个安全组的复杂度,可以方便的随实例创建同时加入多个安全组。
如何使用
1. RunInstances新增参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
SecurityGroupIds.N | List<String> | 否 | 传入多个随实例创建加入的安全组 |
2. ECS控制台
开发中,敬请期待
限制
- 批量的安全组必须属于同一个VPC,并且与vSwitch属于一个VPC。
- 不能既有普通组又有企业安全组。
- 多安全组功能不支持CLASSIC类型实例。
- SecurityGroupIds.N N的大小受安全组挡位控制。
- 安全组内IP不能超过2000。
- 创建实例下单完成,实例支付生产前删除一个安全组,会生产失败退款。
- SecurityGroupId和SecurityGroupIds.N不能同时使用。
代码示例
# coding=utf-8
# if the python sdk is not install using 'sudo pip install aliyun-python-sdk-ecs'
# if the python sdk is install using 'sudo pip install --upgrade aliyun-python-sdk-ecs'
# make sure the sdk version is 4.16.11, you can use command 'pip show aliyun-python-sdk-ecs' to check
import json
import logging
from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.RunInstancesRequest import RunInstancesRequest
# configuration the log output formatter, if you want to save the output to file,
# append ",filename='ecs_invoke.log'" after datefmt.
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S')
# send open api request
def _send_request(request):
request.set_accept_format('json')
try:
response_str = clt.do_action(request)
logging.info(response_str)
response_detail = json.loads(response_str)
return response_detail
except Exception as e:
logging.error(e)
def run_instances(vSwitchId, securityGroupIds, instanceType, imageId, amount, systemDiskCategory, systemDiskSize):
request = RunInstancesRequest()
request.set_VSwitchId(vSwitchId)
request.set_SecurityGroupIdss(securityGroupIds)
request.set_InstanceType(instanceType)
request.set_ImageId(imageId)
request.set_Amount(amount)
request.set_SystemDiskCategory(systemDiskCategory)
request.set_SystemDiskSize(systemDiskSize)
_send_request(request)
if __name__ == '__main__':
clt = client.AcsClient('Your Access Key Id', 'Your Access Key Secrect', 'cn-shanghai')
vSwitchId = "vsw-xxx"
securityGroupIds = ["sg-xxx", "sg-xxx"]
instanceType = "ecs.g5.large"
imageId = "xxx"
amount = "1"
systemDiskCategory = "cloud_ssd"
systemDiskSize = "40"
run_instances(vSwitchId, securityGroupIds, instanceType, imageId, amount, systemDiskCategory, systemDiskSize)