Python 如何根据ec2资源实例获取公共\u dns\u名称?
现在,我想获得public_dns_名称,然后登录到aws实例以获取CPU利用率。我知道我可以使用cloudwatch进行检查,但现在我不想依赖amazon提供的功能直接基于Linux进行检查。我怎样才能得到它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
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)
尚未分配
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)
试试这个
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)
希望它能帮助…r0ckThx,我试过了,我在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()”,无论如何,谢谢:)