我正在尝试通过 boto3 运行一个已经存在于 amazon ec2 上的实例。
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')
instance=x2.Instance('instance_id')
foo=instance.wait_until_running('self',Filters=[{'Name':'instance-state-name','Values':['running']}])
print ("instance.wait_until_running('self',Filters=[{'Name':'instance-state-name','Values':['running']}]) = "+foo)
但在这一行
foo=instance.wait_until_running('self',Filters=[{'Name':'instance-state-name','Values':['running']}])
我收到错误
File "E:installation2python3libsite-packagesboto3resourcesfactory.py", line 369, in do_waiter
waiter(self, *args, **kwargs)
File "E:installation2python3libsite-packagesboto3resourcesaction.py", line 202, in __call__
response = waiter.wait(**params)
File "E:installation2python3libsite-packagesbotocorewaiter.py", line 53, in wait
Waiter.wait(self, **kwargs)
File "E:installation2python3libsite-packagesbotocorewaiter.py", line 313, in wait
last_response=response
botocore.exceptions.WaiterError: Waiter InstanceRunning failed: Invalid id: "instance_id"
这里的使用有什么问题
foo=instance.wait_until_running('self',Filters=[{'Name':'instance-state-name','Values':['running']}])
我只是想了解此处提到的属性如何可用 https://boto3.readthedocs.io/en/latest/reference/services/ec2.html#instance 可以在程序中使用。像wait_until_running
这样的方法,我无法使用。
好的,我解决了由于使用
instance=x2.Instance('instance_id')
它应该像这样使用
instance=x2.Instance(instance_id)