【发布时间】:2017-11-10 04:58:30
【问题描述】:
我正在使用下面的代码获取实例列表
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'>
【问题讨论】:
-
从错误中,您似乎正在传递一个嵌套列表。
[ [ inst1, inst2, ...]] 而不是[ inst1, inst2, ...]
标签: python amazon-web-services amazon-ec2 boto3