Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据ec2资源实例获取公共\u dns\u名称?_Python_Amazon Web Services_Amazon Ec2_Boto3 - Fatal编程技术网

Python 如何根据ec2资源实例获取公共\u dns\u名称?

Python 如何根据ec2资源实例获取公共\u dns\u名称?,python,amazon-web-services,amazon-ec2,boto3,Python,Amazon Web Services,Amazon Ec2,Boto3,现在,我想获得public_dns_名称,然后登录到aws实例以获取CPU利用率。我知道我可以使用cloudwatch进行检查,但现在我不想依赖amazon提供的功能直接基于Linux进行检查。我怎样才能得到它 ec2 = boto3.resource('ec2', aws_access_key_id=settings.AWS.get("aws_access_key_id"), aws_secret_access

现在,我想获得public_dns_名称,然后登录到aws实例以获取CPU利用率。我知道我可以使用cloudwatch进行检查,但现在我不想依赖amazon提供的功能直接基于Linux进行检查。我怎样才能得到它

ec2 = boto3.resource('ec2',
                     aws_access_key_id=settings.AWS.get("aws_access_key_id"),
                     aws_secret_access_key=settings.AWS.get("aws_secret_access_key"),
                     region_name=settings.AWS.get("region_name"))

user_data_script = """#cloud-config
   runcmd:
    - sudo systemctl start docker
    - cd /srv/app/kfquantum
    - sudo docker run --env broker=%s \
                      --env result=redis://10.0.0.245:6379/0 \
                      --env host=kf-db.cluster-crietao0wrdu.rds.cn-northwest-1.amazonaws.com.cn \
                      --env user=db \
                      --env pw=y6y83aGagY8hgXZ \
                      -w /kfquantum -d --restart unless-stopped --name kf-celery kf-celery \
                      celery -A kfquantum worker --pool=solo -l info
   """ % settings.BROKER_URL
instance_type = "c5.large"
instance = ec2.create_instances(
    BlockDeviceMappings=[
        {
            "DeviceName": "/dev/xvda",
            'Ebs': {
                'DeleteOnTermination': True,
                'VolumeSize': 8
            },
        },
    ],
    ImageId="ami-09feea664bfc54194",
    MinCount=1,
    MaxCount=1,
    Placement={'AvailabilityZone': 'cn-northwest-1a'},
    InstanceType=instance_type,
    UserData=user_data_script,
    NetworkInterfaces=[
        {
            'DeviceIndex': 0,
            'SubnetId': "subnet-093161e8b00deb367",
            'AssociatePublicIpAddress': True
        },
    ]
)
instance = instance[0]
print("1",instance.private_ip_address)
print("2",instance.public_dns_name)
控制台

1,10.0.0.73
2

尚未分配
public\u dns\u name
的值

这可能是由于

  • 该实例尚未运行。一旦调用
    create\u instances
    方法,您就试图获取DNS名称。实例需要几秒钟才能达到运行状态。在实例达到运行状态之前,
    public\u dns\u name
    不可用。在尝试获取公共DNS名称之前,请检查实例状态并等待其运行
  • 一个不干扰代码其余部分的简单修复方法是

    更新:
    实例
    对象必须在等待后重新加载,才能检测更新的实例属性

    instance = instance[0]
    instance.wait_until_running()
    instance.reload()
    print("1",instance.private_ip_address)
    print("2",instance.public_dns_name)
    
  • 您的VPC中未启用DNS主机名

  • 尚未分配
    public\u dns\u name
    的值

    这可能是由于

  • 该实例尚未运行。一旦调用
    create\u instances
    方法,您就试图获取DNS名称。实例需要几秒钟才能达到运行状态。在实例达到运行状态之前,
    public\u dns\u name
    不可用。在尝试获取公共DNS名称之前,请检查实例状态并等待其运行
  • 一个不干扰代码其余部分的简单修复方法是

    更新:
    实例
    对象必须在等待后重新加载,才能检测更新的实例属性

    instance = instance[0]
    instance.wait_until_running()
    instance.reload()
    print("1",instance.private_ip_address)
    print("2",instance.public_dns_name)
    
  • 您的VPC中未启用DNS主机名

  • 试试这个

    instance= instance[0]
    print('***Success!! instance:', instance.id, 'created, and instance-state-name:', instance.state['Name'])           
    
    instance.wait_until_running()           
    instance.reload()
    
    print('***instance:', instance.id, 'is now up, and instance-state-name:', instance.state['Name'])
    print('***private ipa:', instance.private_ip_address)
    print('***public ipa:', instance.public_dns_name)
    
    希望它能帮助…
    r0ck


    试试这个

    instance= instance[0]
    print('***Success!! instance:', instance.id, 'created, and instance-state-name:', instance.state['Name'])           
    
    instance.wait_until_running()           
    instance.reload()
    
    print('***instance:', instance.id, 'is now up, and instance-state-name:', instance.state['Name'])
    print('***private ipa:', instance.private_ip_address)
    print('***public ipa:', instance.public_dns_name)
    
    希望它能帮助…

    r0ck

    Thx,我试过了,我在aws控制台中看到,3秒钟后,这个实例已经运行,然后我花了几秒钟获得了public\u dns\u name,仍然没有得到。我想问一下,如何通过boto.resource和create_实例的方法获得public_dns_名称?有代码可供参考吗?(我知道客户端创建的实例比较容易获取,但是资源方法比较难,它是高级aws实例)你在控制台检查时,它有没有分配一个公共DNS名称?是的,它有公共DNS名称,就像这个ec2-52-82-27-49.cn-northwest-1.compute.amazonaws.com.cn。现在我想从我的python代码中得到这个。当然,在此之前,你可以更新问题中的代码,以显示在尝试获取DNS之前,你是如何等待实例达到运行状态的?没有错误,但仍然没有返回任何错误,需要添加“instance.reload()”,无论如何谢谢:)Thx,我尝试过了,我在aws控制台中看到,3秒后,这个实例一直在运行,然后我花了几秒钟获得了public_dns_name,仍然没有得到。我想问一下,如何通过boto.resource和create_实例的方法获得public_dns_名称?有代码可供参考吗?(我知道客户端创建的实例比较容易获取,但是资源方法比较难,它是高级aws实例)你在控制台检查时,它有没有分配一个公共DNS名称?是的,它有公共DNS名称,就像这个ec2-52-82-27-49.cn-northwest-1.compute.amazonaws.com.cn。现在我想从我的python代码中得到这个。当然,在此之前,您可以更新问题中的代码,以显示在尝试获取DNS之前您是如何等待实例达到运行状态的?没有错误,但仍然没有返回任何错误,需要添加“instance.reload()”,无论如何,谢谢:)