为了账号安全,请及时绑定邮箱和手机立即绑定

检索 ec2 实例的公共 dns 名称时出错

检索 ec2 实例的公共 dns 名称时出错

牛魔王的故事 2021-05-30 14:15:35
我正在尝试检索 ec2 实例的公共 dns 名称。这是我的python3脚本。import sysimport boto3from botocore.exceptions import ClientErrorinstance_id = "i-03e7f6391a0f523ee"action = 'ON'ec2 = boto3.client('ec2')if action == 'ON':    # Do a dryrun first to verify permissions    try:        ec2.start_instances(InstanceIds=[instance_id], DryRun=True)    except ClientError as e:        if 'DryRunOperation' not in str(e):            raise    # Dry run succeeded, run start_instances without dryrun    try:        response = ec2.start_instances(InstanceIds=[instance_id], DryRun=False)        print(response)    except ClientError as e:        print(e)else:    # Do a dryrun first to verify permissions    try:        ec2.stop_instances(InstanceIds=[instance_id], DryRun=True)    except ClientError as e:        if 'DryRunOperation' not in str(e):            raise    # Dry run succeeded, call stop_instances without dryrun    try:        response = ec2.stop_instances(InstanceIds=[instance_id], DryRun=False)        print(response)    except ClientError as e:        print(e)instance = ec2.Instance('i-1234567890123456')while instance.state['Name'] not in ('running', 'stopped'):        sleep(5)        print("the instance is initializing")#pubdns=instance.PublicDnsName#print ("public dns name"+pubdns)def get_name(inst):    client = boto3.client('ec2')    response = client.describe_instances(InstanceIds = [inst[0].instance_id])    foo = response['Reservations'][0]['Instances'][0]['NetworkInterfaces'][0]['Association']['PublicDnsName']    return foofoo = get_name(instance_id)print (foo)如果我使用ec2 = boto3.client('ec2')在上面的代码中,出现以下错误:AttributeError:“ EC2”对象没有属性“ Instance”如果我用ec2 = boto3.resource('ec2')然后我得到这个错误:AttributeError:“ ec2.ServiceResource”对象没有属性“ start_instances”我想要做的是能够连接到 ec2 实例并检索其 publicdns 名称。但是现在我得到了错误in get_name    response = client.describe_instances(InstanceIds = [inst[0].instance_id])AttributeError: 'str' object has no attribute 'instance_id'
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您将两个想法混为一谈。

boto3.client 创建一个对象,您可以通过该对象查找 ec2 等资源。

一旦有了资源,就可以开始对其进行操作。

ec2 = boto3.client('ec2')

然后

instance = ec2.resource('ec2').instance(instance_id)

第二个从 ec2资源而不是 boto3 ec2 客户端查找您的 ec2 实例。


查看完整回答
反对 回复 2021-06-01
  • 2 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信