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
showsaws 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
showsaws 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,…]