【问题标题】:Latest AMI ID in a given Region using a set of filters使用一组过滤器在给定区域中的最新 AMI ID
【发布时间】:2019-01-08 20:16:16
【问题描述】:

我正在尝试运行下面的代码,但是执行时出现错误,请您告知更改。

latest-ami

    [ec2-user@ip-XXXXXXXX ~]$ python latest-ami.py us-west-2
{u'Images': [], 'ResponseMetadata': {'RetryAttempts': 0, 'HTTPStatusCode': 200, 'RequestId': '01ef1583-e7bc-4279-9081-28cbf9345f7c', 'HTTPHeaders': {'date': 'Wed, 01 Aug 2018 12:00:01 GMT', 'content-length': '219', 'content-type': 'text/xml;charset=UTF-8', 'server': 'AmazonEC2'}}}
[ec2-user@ip-172-31-19-75 ~]$ python latest-ami.py us-west-1
{u'Images': [], 'ResponseMetadata': {'RetryAttempts': 0, 'HTTPStatusCode': 200, 'RequestId': 'e61cdeb3-e44b-4e4e-bf4e-ed4681529757', 'HTTPHeaders': {'date': 'Wed, 01 Aug 2018 12:06:00 GMT', 'content-length': '219', 'content-type': 'text/xml;charset=UTF-8', 'server': 'AmazonEC2'}}}
[ec2-user@ip-XXXXXXXXXXX ~]$

我期待像下面这样的输出:

$ latest-ami.py us-west-2
ami-b04e92d0

我的代码现在看起来像原始 latest-ami 的最后三行以下

source_image = newest_image(response['Images'])
#print(source_image['ImageId'])
print(response)

过滤器如下:

filters = [ {
        'Name': 'name',
        'Values': ['amzn-ami-hvm-*']
    },{
        'Name': 'description',
        'Values': ['Amazon Linux AMI*']
    },{
        'Name': 'architecture',
        'Values': ['x86_64']
    },{
        'Name': 'owner-alias',
        'Values': ['amazon']
    },{
        'Name': 'owner-id',
        'Values': ['000000000000']
    },{
        'Name': 'state',
        'Values': ['available']
    },{
        'Name': 'root-device-type',
        'Values': ['ebs']
    },{
        'Name': 'virtualization-type',
        'Values': ['hvm']
    },{
        'Name': 'hypervisor',
        'Values': ['xen']
    },{
        'Name': 'image-type',
        'Values': ['machine']
    } ]

response = client.describe_images(Owners=['amazon'], Filters=filters)

【问题讨论】:

  • 我的朋友“我有很多错误”对任何人都没有帮助。描述您遇到的错误,也许有人可以帮助您。
  • 文件“test2”,第 8 行,在 region = sys.argv[1] IndexError: list index out of range
  • @Jack 相应地更新问题
  • 该错误表明脚本正在执行并且需要命令行参数。你通过了吗?
  • 是的,在我将 sys.argv[1] 更改为 sys.argv[0] 后,我遇到了另一个错误,例如 botocore.vendored.requests.exceptions.ConnectionError: HTTPSConnectionPool(host='ec2.latest-ami.py.amazonaws.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Cannot connect to proxy.', error('Tunnel connection failed: 503 Service Unavailable',)))

标签: python amazon-web-services amazon-ec2 amazon-cloudformation amazon-ami


【解决方案1】:

当您执行脚本时,您的脚本正在从命令行中寻找参数值。

第 8 行: region = sys.argv[1]

sys.argv 存储脚本运行期间提供的命令行值以及脚本名称。

sys.argv[0]:脚本名称

sys.argv[1]: 第一个命令行值

尝试像这样运行您的代码:python latest-ami.py us-east-1

根据你想在哪个区域运行代码来更改我为区域提供的值。

要获取图像 ID:print(source_image['ImageId']) 将此命令添加到您的代码中

【讨论】:

  • 非常感谢@RhythemAggarwal,我现在有一个空错误
  • 我不确定该选择哪个区域。 us-east-1 为您工作了吗?
  • 非常完美!!如果您的问题得到解决,请关闭问题:)
  • 谢谢@RhythemAggarwal,我应该为新错误打开一个新线程,还是我们可以继续这个
  • 使用新错误编辑您的问题,如果它是针对相同的代码
猜你喜欢
  • 2020-10-29
  • 2016-02-03
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
相关资源
最近更新 更多