Python 使用Boto3启动多个EC2实例

Python 使用Boto3启动多个EC2实例,python,amazon-web-services,amazon-ec2,boto3,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, 'Val

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

    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\u instances\u by\u tag\u value
返回一个
list
。现在我需要启动
EC2实例的列表
。所以我在做下面的事情

def start_ec_instances(self, instanceids):
    response = ec2client.start_instances(InstanceIds=instanceids)
    return
其中,
instanceId
是从第一个方法返回的列表。但是
ec2client.start\u实例
只接受
字符串
,而不接受
列表

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

问题是,除了将列表转换为字符串并执行一些
append
操作之外,还有什么简单的方法可以做到这一点吗

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


编辑:当我将列表从第一个方法传递到
start\u instances
时,它在
InstanceIds
字段中显示
参数InstanceIds[0]的无效类型,值:['I-ssss','I-YYYY','I-ZZZZ','I-KKKK'],类型:,有效类型:
start\u instances
。不确定从何处获取,它使用逗号分隔的字符串。

InstanceIds
字段中的
start\u实例。不确定从何处得到的是逗号分隔的字符串。

您更可能将其称为:

response = ec2client.start_instances(InstanceIds=[instanceids])
而不是:

response = ec2client.start_instances(InstanceIds=instanceids)

你更可能称之为:

response = ec2client.start_instances(InstanceIds=[instanceids])
而不是:

response = ec2client.start_instances(InstanceIds=instanceids)

因为如果我只是将
列表
从第一个方法传递到
start\u instances
方法,它会说
参数instanceId[0]的类型无效,值:['I-ssss','I-YYYY','I-ZZZZ','I-kkk'],类型:,有效类型:
文档清楚地说它需要一个列表。也许你使用的是boto3的一个非常旧的版本?尝试升级到最新版本。我想我使用的是最新版本
aws--version
shows
aws cli/1.11.181 Python/3.6.3 Darwin/16.7.0 botocore/1.7.39
pip install boto3
也显示了
来自Python dateutil=2.1->botocore=1.7.0->boto3
我现在看到了问题,您的代码中有一个bug,虽然我在你问题的代码中没有看到。错误消息
参数instanceId[0]的类型无效,值:['i-ssss','i-YYYY','i-ZZZZ','i-kkk']
告诉您列表中的第一个元素是列表本身。查看它在哪里显示
InstanceIds[0]
?您正在以某种方式嵌套列表。您是如何从错误中发现的?我来自
Java
world。因为如果我将
list
从第一个方法传递到
start\u instances
方法,它会说
参数instanceId[0]的类型无效,值:['I-ssss','I-YYYY','I-ZZZZ','I-kkk'],类型:,有效类型:
文档清楚地说它需要一个列表。也许你使用的是boto3的一个非常旧的版本?尝试升级到最新版本。我想我使用的是最新版本
aws--version
shows
aws cli/1.11.181 Python/3.6.3 Darwin/16.7.0 botocore/1.7.39
pip install boto3
也显示了
来自Python dateutil=2.1->botocore=1.7.0->boto3
我现在看到了问题,您的代码中有一个bug,虽然我在你问题的代码中没有看到。错误消息
参数instanceId[0]的类型无效,值:['i-ssss','i-YYYY','i-ZZZZ','i-kkk']
告诉您列表中的第一个元素是列表本身。查看它在哪里显示
InstanceIds[0]
?您正在以某种方式嵌套列表。您是如何从错误中发现的?我来自
Java
world。从错误中可以看出,您正在传递一个嵌套列表<代码>[[inst1,inst2,…]
]与错误中的
[inst1,inst2,…]
不同,您传递的似乎是嵌套列表<代码>[[inst1,inst2,…]]而不是
[inst1,inst2,…]