簡體   English   中英

如何根據ec2資源實例獲取public_dns_name?

[英]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的值。

這可能是由於

  1. 實例尚未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)
  1. 您的 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM