Amazon EC2中boto3镜像中的Wait_Until_Existes()或Wait_Until_Running()方法的用法 [英] usage of wait_until_exists() or wait_until_running() method in boto3 image in amazon ec2

查看:0
本文介绍了Amazon EC2中boto3镜像中的Wait_Until_Existes()或Wait_Until_Running()方法的用法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Amazon EC2中启动一个实例,(初始状态为停止) 并等待实例状态从正在初始化变为正在运行 根据此处提供的文档https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html

以下是相同的程序

import sys
import boto3


instance_id = "i-03e7f6391a0f523ee"
action = 'ON'

ec2 = boto3.client('ec2')

if action == 'ON':
   response = ec2.start_instances(InstanceIds=[instance_id], DryRun=False)
else:
    response = ec2.stop_instances(InstanceIds=[instance_id], DryRun=False)
print(response)


#resp2=ec2.describe_instances()
#foo = response['Reservations'][0]['Instances'][0]['NetworkInterfaces'][0]['Association']['PublicDnsName']
#filter=[{'Name':'Association','Values':['PublicDnsName']}]

#print (foo)
#instance = ec2.resource('ec2').instance(instance_id)
#while instance.state['Name'] not in ('running', 'stopped'):
#        sleep(5)
#        print("the instance is initializing")
x2=boto3.resource('ec2')
image=x2.Image('instance_id')
foo=image.wait_until_exists('self',Filters=[{'Name':'state','Values':'avaialable'}])
print(foo)
resp=ec2.describe_network_interfaces();
print ("printing pub dns name")
print(resp['NetworkInterfaces'][0]['Association']['PublicDnsName'])

print ("going inside function to demonstrate usage of response returned from describe_instances() method")
def get_name(inst):
    client = boto3.client('ec2')
    response = client.describe_instances(InstanceIds = [instance_id])
    foo = response['Reservations'][0]['Instances'][0]['NetworkInterfaces'][0]['Association']['PublicDnsName']
    return foo


foo = get_name(instance_id)
print (foo)

我遇到的问题在这一行

foo=image.wait_until_exists('self',Filters=[{'Name':'state','Values':'avaialable'}])

我收到错误

Traceback (most recent call last):
  File "D:start3.py", line 28, in <module>
    foo=image.wait_until_exists('self',Filters=[{'Name':'state','Values':'avaialable'}])
  File "E:installation2python3libsite-packagesoto3
esourcesfactory.py", line 369, in do_waiter
    waiter(self, *args, **kwargs)
  File "E:installation2python3libsite-packagesoto3
esourcesaction.py", line 202, in __call__
    response = waiter.wait(**params)
  File "E:installation2python3libsite-packagesotocorewaiter.py", line 53, in wait
    Waiter.wait(self, **kwargs)
  File "E:installation2python3libsite-packagesotocorewaiter.py", line 297, in wait
    response = self._operation_method(**kwargs)
  File "E:installation2python3libsite-packagesotocorewaiter.py", line 84, in __call__
    return self._client_method(**kwargs)
  File "E:installation2python3libsite-packagesotocoreclient.py", line 314, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "E:installation2python3libsite-packagesotocoreclient.py", line 586, in _make_api_call
    api_params, operation_model, context=request_context)
  File "E:installation2python3libsite-packagesotocoreclient.py", line 621, in _convert_to_request_dict
    api_params, operation_model)
  File "E:installation2python3libsite-packagesotocorevalidate.py", line 291, in serialize_to_request
    raise ParamValidationError(report=report.generate_report())
botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid type for parameter Filters[0].Values, value: avaialable, type: <class 'str'>, valid types: <class 'list'>, <class 'tuple'>
我无法理解该错误,我在此处阅读 https://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Image.wait_until_exists但我无法修复该错误。 我还尝试在文档here中使用WAIT_INTHING_RUNNING 而不是WAIT_TABLE_EXISTS()

x2=boto3.resource('ec2')
image=x2.wait_until_running()
foo=image.wait_until_running('self',Filters=[{'Name':'state','Values':'running'}])
print(foo)

这将显示以下错误

start3.py", line 27, in <module>
    image=x2.wait_until_running()
AttributeError: 'ec2.ServiceResource' object has no attribute 'wait_until_running'
有很多代码我已经注释掉了,但这就是我尝试修复此错误的原因,但没有起作用。请查看代码,并让我知道我应该更改哪些内容,以使其按预期工作。 我想在idel shell窗口上打印一些东西 当EC2资源正在等待启动时,即其状态从已停止更改为正在运行。这是我在这里无法实现的。

推荐答案

该异常明确声明Values值必须是列表/元组。应该将有问题的代码行更改为使用如下列表。我也修复了打字错误,尽管这不是您当前问题的根源。

foo=image.wait_until_exists('self',Filters=[{'Name':'state','Values':['available']}])

这篇关于Amazon EC2中boto3镜像中的Wait_Until_Existes()或Wait_Until_Running()方法的用法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆