[英]How to get public_dns_name according to ec2 resource instance?
現在想獲取public_dns_name,然后登錄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_dns_name
的值。
這可能是由於
running
。 您正在嘗試在調用create_instances
方法后立即獲取 DNS 名稱。 實例進入running
狀態需要幾秒鍾的時間。 public_dns_name
在實例達到running
狀態之前不可用。 檢查實例狀態並等待它運行,然后再嘗試獲取公共 DNS 名稱。在不干擾其余代碼的情況下,一個簡單的解決方法是,
更新: instance
對象必須在等待檢測到更新的實例屬性后重新加載。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.