使用Boto3启动多个EC2实例

时间:2017-11-09 20:28:23

标签: python amazon-web-services amazon-ec2 boto3

我使用下面的代码获取实例列表

    def list_instances_by_tag_value(self, tagkey, tagvalue):
    ec2client = boto3.client('ec2')
    response = ec2client.describe_instances(
        Filters=[
            {
                'Name': 'tag:'+tagkey,
                'Values': [tagvalue]
            }
        ]
    )
    instancelist = []
    for reservation in (response["Reservations"]):
        for instance in reservation["Instances"]:
            instancelist.append(instance["InstanceId"])
    return instancelist

现在,方法list_instances_by_tag_value会返回List。现在我需要开始EC2 instances列表。所以我正在做类似下面的事情

def start_ec_instances(self, instanceids):
    response = ec2client.start_instances(InstanceIds=instanceids)
    return

其中instanceids是从第一个方法返回的列表。但是ec2client.start_instances只接受String而不接受List

我知道我可以将list转换为String,然后解析它。我需要在instanceID前面附加(')并在每个实例ID之间附加逗号(,)。

问题是,有没有简单的方法可以做到这一点,而不是将列表转换为字符串并执行一些append操作?

需要看起来像'i-XXXXXX', 'i-XXXXX', 'i-XXXXXXX'

编辑:当我从第一个方法将列表传递给start_instances时,它会显示Invalid type for parameter InstanceIds[0], value: ['i-ssss', 'i-YYYY', 'i-ZZZZ', 'i-KKKK'], type: <class 'list'>, valid types: <class 'str'>

2 个答案:

答案 0 :(得分:4)

你更有可能称之为:

response = ec2client.start_instances(InstanceIds=[instanceids])

而不是:

response = ec2client.start_instances(InstanceIds=instanceids)

答案 1 :(得分:1)

start_instances字段中的

InstanceIds takes a list of strings。不知道你在哪里得到一个以逗号分隔的字符串。