如何从boto3获取当前实例ID?
How to obtain current instance ID from boto3?
有没有等同于
curl http://169.254.169.254/latest/meta-data/instance-id
用boto3获取当前运行实例instance-id in python?
没有api,没有。有 InstanceMetadataFetcher
,但目前仅用于获取 IAM 角色进行身份验证。
任何类型的 GET
都应该为您服务。 Botocore 使用 python requests
库非常好。
import requests
response = requests.get('http://169.254.169.254/latest/meta-data/instance-id')
instance_id = response.text
还没有boto3api可以做。但是如果你当前的实例是Linux系统,那么你可以使用下面的python3代码得到instance_id:
import subprocess
cmd='''set -o pipefail && sudo grep instance-id /run/cloud-init/instance-data.json | head -1 | sed 's/.*\"i-/i-/g' | sed 's/\",//g\''''
status, instance_id = subprocess.getstatusoutput(cmd)
print(status, instance_id)
我参加晚会迟到了,但在遇到这个问题并且对没有令人满意的基于 boto3 的答案来获取当前 ec2 的 instanceid 感到失望后,我着手解决这个问题。
您使用套接字获取主机名(也是 PrivateDnsName),并将其输入过滤器以查询 describe_instances,并使用它来获取 InstanceId。
import socket
import boto3
session = boto3.Session(region_name="eu-west-1")
ec2_client = session.client('ec2')
hostname = socket.gethostname()
filters = [ {'Name': 'private-dns-name',
'Values': [ hostname ]}
]
response = ec2_client.describe_instances(Filters=filters)["Reservations"]
instanceid = response[0]['Instances'][0]['InstanceId']
print(instanceid)
您的实例将需要通过 IAM 授予的 EC2 读取权限。授予您的实例角色的策略 AmazonEC2ReadOnlyAccess 适用于此。
事实上,放弃那个答案。你只需要 ec2-metadata
https://github.com/adamchainz/ec2-metadata
pip3 install ec2-metadata
from ec2_metadata import ec2_metadata
print(ec2_metadata.instance_id)
有没有等同于
curl http://169.254.169.254/latest/meta-data/instance-id
用boto3获取当前运行实例instance-id in python?
没有api,没有。有 InstanceMetadataFetcher
,但目前仅用于获取 IAM 角色进行身份验证。
任何类型的 GET
都应该为您服务。 Botocore 使用 python requests
库非常好。
import requests
response = requests.get('http://169.254.169.254/latest/meta-data/instance-id')
instance_id = response.text
还没有boto3api可以做。但是如果你当前的实例是Linux系统,那么你可以使用下面的python3代码得到instance_id:
import subprocess
cmd='''set -o pipefail && sudo grep instance-id /run/cloud-init/instance-data.json | head -1 | sed 's/.*\"i-/i-/g' | sed 's/\",//g\''''
status, instance_id = subprocess.getstatusoutput(cmd)
print(status, instance_id)
我参加晚会迟到了,但在遇到这个问题并且对没有令人满意的基于 boto3 的答案来获取当前 ec2 的 instanceid 感到失望后,我着手解决这个问题。
您使用套接字获取主机名(也是 PrivateDnsName),并将其输入过滤器以查询 describe_instances,并使用它来获取 InstanceId。
import socket
import boto3
session = boto3.Session(region_name="eu-west-1")
ec2_client = session.client('ec2')
hostname = socket.gethostname()
filters = [ {'Name': 'private-dns-name',
'Values': [ hostname ]}
]
response = ec2_client.describe_instances(Filters=filters)["Reservations"]
instanceid = response[0]['Instances'][0]['InstanceId']
print(instanceid)
您的实例将需要通过 IAM 授予的 EC2 读取权限。授予您的实例角色的策略 AmazonEC2ReadOnlyAccess 适用于此。
事实上,放弃那个答案。你只需要 ec2-metadata
https://github.com/adamchainz/ec2-metadata
pip3 install ec2-metadata
from ec2_metadata import ec2_metadata
print(ec2_metadata.instance_id)