如何只获取运行的列表?
How to get the list of running only?
我只需要从 AWS 获取 运行 IP,该函数只提取列为 EIP 的 IP,其中也包括非关联 IP。
def gather_public_ip():
ACCESS_KEY = config.get('aws','access_key')
SECRET_KEY = config.get('aws','secret_key')
regions = ['ap-northeast-1']
all_EIP = []
for region in regions:
client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,)
addresses_dict = client.describe_addresses()
for eip_dict in addresses_dict['Addresses']:
print eip_dict['PublicIp']
return eip_dict['PublicIp']
有人能帮帮我吗??
您可以从以下查询中获得
- 获取 运行 实例的私有 IP 列表
aws ec2 describe-instances --filters "Name=instance-state-code, Values=16" --query "Reservations[*].Instances[*].PrivateIpAddress" --output text
- 获取 运行 个实例的 Public IP 列表
aws ec2 describe-instances --filters "Name=instance-state-code, Values=16" --query "Reservations[*].Instances[*].PublicIpAddress" --output text
要转换为 python 代码,您可以执行类似
的操作
response = client.describe_instances(
Filters=[
{
'Name': 'instance-state-code',
'Values': [
'16',
]
},
],)
然后你需要阅读关于Reservations[*].Instances[*].PrivateIpAddress
和Reservations[*].Instances[*].PublicIPAddress
的JSON输出
instance-state-code
的定义/可能值为
The state of the instance, as a 16-bit unsigned
integer. The high byte is an opaque internal value and should be
ignored. The low byte is set based on the state represented. The valid
values are: 0 (pending), 16 (running), 32 (shutting-down), 48
(terminated), 64 (stopping), and 80 (stopped).
如下所示,您需要通过查看预订/实例数据来过滤掉 运行 个实例。我还添加了检查主机是否有 public ip
e = client.describe_instances()
for r in e['Reservations']:
if r['Instances'][0]['State']['Name'] == 'running'\
and 'PublicIpAddress' in r['Instances'][0]:
print r['Instances'][0]['PublicIpAddress']
关联的EIP会有对应的PrivateIpAddress
。如果没有关联 EIP,eip_dict 将不会有 PrivateIpAddress
。所以只需在您的代码中添加一个额外的检查:
for eip_dict in addresses_dict['Addresses']:
if 'PrivateIpAddress' in eip_dict:
print eip_dict['PublicIp']
这将打印所有关联的弹性 IP 地址——无论实例是否为 运行。如果你真的只想要 运行 个实例的弹性 ip 地址,那么你必须应用另一个过滤器。使用 Vorsprung 提出的解决方案获取 运行 个实例并过滤列表。
我只需要从 AWS 获取 运行 IP,该函数只提取列为 EIP 的 IP,其中也包括非关联 IP。
def gather_public_ip():
ACCESS_KEY = config.get('aws','access_key')
SECRET_KEY = config.get('aws','secret_key')
regions = ['ap-northeast-1']
all_EIP = []
for region in regions:
client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,)
addresses_dict = client.describe_addresses()
for eip_dict in addresses_dict['Addresses']:
print eip_dict['PublicIp']
return eip_dict['PublicIp']
有人能帮帮我吗??
您可以从以下查询中获得
- 获取 运行 实例的私有 IP 列表
aws ec2 describe-instances --filters "Name=instance-state-code, Values=16" --query "Reservations[*].Instances[*].PrivateIpAddress" --output text
- 获取 运行 个实例的 Public IP 列表
aws ec2 describe-instances --filters "Name=instance-state-code, Values=16" --query "Reservations[*].Instances[*].PublicIpAddress" --output text
要转换为 python 代码,您可以执行类似
的操作response = client.describe_instances(
Filters=[
{
'Name': 'instance-state-code',
'Values': [
'16',
]
},
],)
然后你需要阅读关于Reservations[*].Instances[*].PrivateIpAddress
和Reservations[*].Instances[*].PublicIPAddress
instance-state-code
的定义/可能值为
The state of the instance, as a 16-bit unsigned integer. The high byte is an opaque internal value and should be ignored. The low byte is set based on the state represented. The valid values are: 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).
如下所示,您需要通过查看预订/实例数据来过滤掉 运行 个实例。我还添加了检查主机是否有 public ip
e = client.describe_instances()
for r in e['Reservations']:
if r['Instances'][0]['State']['Name'] == 'running'\
and 'PublicIpAddress' in r['Instances'][0]:
print r['Instances'][0]['PublicIpAddress']
关联的EIP会有对应的PrivateIpAddress
。如果没有关联 EIP,eip_dict 将不会有 PrivateIpAddress
。所以只需在您的代码中添加一个额外的检查:
for eip_dict in addresses_dict['Addresses']:
if 'PrivateIpAddress' in eip_dict:
print eip_dict['PublicIp']
这将打印所有关联的弹性 IP 地址——无论实例是否为 运行。如果你真的只想要 运行 个实例的弹性 ip 地址,那么你必须应用另一个过滤器。使用 Vorsprung 提出的解决方案获取 运行 个实例并过滤列表。