【问题标题】:Starting multiple EC2 instances using Boto3使用 Boto3 启动多个 EC2 实例
【发布时间】: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


【解决方案1】:

你更有可能这样称呼它:

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

代替:

response = ec2client.start_instances(InstanceIds=instanceids)

【讨论】:

    【解决方案2】:

    start_instances takes a list of stringsInstanceIds 字段中。不知道你从哪里得到它需要一个逗号分隔的字符串。

    【讨论】:

    • 因为如果我只是将list 从第一种方法传递给start_instances 方法,它会显示Invalid type for parameter InstanceIds[0], value: ['i-ssss', 'i-YYYY', 'i-ZZZZ', 'i-KKKK'], type: <class 'list'>, valid types: <class 'str'>
    • 文档清楚地表明它需要一个列表。也许您使用的是真正旧版本的 boto3?尝试升级到最新版本。
    • 我想我使用的是最新版本aws --version 显示aws-cli/1.11.181 Python/3.6.3 Darwin/16.7.0 botocore/1.7.39pip install boto3 也显示from python-dateutil<3.0.0,>=2.1->botocore<1.8.0,>=1.7.0->boto3
    • 我现在看到了问题,您的代码中的某个地方存在错误,尽管我在您问题的代码中没有看到它。错误消息Invalid type for parameter InstanceIds[0], value: ['i-ssss', 'i-YYYY', 'i-ZZZZ', 'i-KKKK'] 告诉您列表中的第一个元素 本身就是一个列表。看到哪里写着InstanceIds[0]?您正在以某种方式嵌套列表。
    • 你是如何从错误中找出来的?我来自Javaworld。
    猜你喜欢
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 2019-02-25
    • 2016-08-20
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    相关资源
    最近更新 更多