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
本文介绍了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屋!
查看全文