Я пытаюсь найти ключи и значения в экземпляре AWS. Если ключ присутствует, я хочу, чтобы скрипт сообщал о значении, если оно существует, или сообщал None
, если ключ не имеет значения.
Я делаю это для нескольких пар ключ-значение, и все они работают, кроме одной .
Эти пары ключ / значение сообщают None
, если для ключа нет значения:
instance_list = ec2.describe_instances()
for reservation in instance_list["Reservations"]:
for instance in reservation.get("Instances", []):
if instance['PublicDnsName']:
public_dns_name = instance['PublicDnsName']
else:
public_dns_name = None
if 'KeyName' in instance:
key_name = instance['KeyName']
else:
key_name = None
Это всегда показывает пустое значение вместо None
. Он сообщает значение, когда их ключ имеет значение:
if 'PrivateDnsName' in instance:
private_dns = instance['PrivateDnsName']
else:
private_dns = None
Вот значение instance
для идентификатора экземпляра, который показывает пустую запись для private_dns
:
{'AmiLaunchIndex': 0, 'ImageId': 'ami-062f7200baf2fa504', 'InstanceId': 'i-02fa5c552a10ddfca', 'InstanceType': 't2.micro', 'KeyName': 'sncr-timd', 'LaunchTime': datetime.datetime(2020, 1, 14, 22, 25, tzinfo=tzutc()), 'Monitoring': {'State': 'disabled'}, 'Placement': {'AvailabilityZone': 'us-east-1b', 'GroupName': '', 'Tenancy': 'default'}, 'PrivateDnsName': '', 'ProductCodes': [], 'PublicDnsName': '', 'State': {'Code': 48, 'Name': 'terminated'}, 'StateTransitionReason': 'User initiated (2020-01-15 14:43:16 GMT)', 'Architecture': 'x86_64', 'BlockDeviceMappings': [], 'ClientToken': '', 'EbsOptimized': False, 'EnaSupport': True, 'Hypervisor': 'xen', 'NetworkInterfaces': [], 'RootDeviceName': '/dev/xvda', 'RootDeviceType': 'ebs', 'SecurityGroups': [], 'StateReason': {'Code': 'Client.UserInitiatedShutdown', 'Message': 'Client.UserInitiatedShutdown: User initiated shutdown'}, 'VirtualizationType': 'hvm', 'CpuOptions': {'CoreCount': 1, 'ThreadsPerCore': 1}, 'CapacityReservationSpecification': {'CapacityReservationPreference': 'open'}, 'HibernationOptions': {'Configured': False}, 'MetadataOptions': {'State': 'pending', 'HttpTokens': 'optional', 'HttpPutResponseHopLimit': 1, 'HttpEndpoint': 'enabled'}}
Вот как выглядит результат, когда instance
имеет клавишу private_dns
и значение:
Private DNS: ip-172-31-37-19.us-east-2.compute.internal
Так выглядит instance
, когда существует private_dns
:
{'AmiLaunchIndex': 0, 'ImageId': 'ami-02ccb28830b645a41', 'InstanceId': 'i-069e87e16db1bf49b', 'InstanceType': 't2.micro', 'KeyName': 'sncr-timd', 'LaunchTime': datetime.datetime(2020, 1, 14, 22, 27, 17, tzinfo=tzutc()), 'Monitoring': {'State': 'disabled'}, 'Placement': {'AvailabilityZone': 'us-east-2c', 'GroupName': '', 'Tenancy': 'default'}, 'PrivateDnsName': 'ip-172-31-37-19.us-east-2.compute.internal', 'PrivateIpAddress': '172.31.37.19', 'ProductCodes': [], 'PublicDnsName': 'ec2-18-223-15-106.us-east-2.compute.amazonaws.com', 'PublicIpAddress': '18.223.15.106', 'State': {'Code': 16, 'Name': 'running'}, 'StateTransitionReason': '', 'SubnetId': 'subnet-22038f6e', 'VpcId': 'vpc-859c5aee', 'Architecture': 'x86_64', 'BlockDeviceMappings': [{'DeviceName': '/dev/xvda', 'Ebs': {'AttachTime': datetime.datetime(2020, 1, 14, 22, 27, 18, tzinfo=tzutc()), 'DeleteOnTermination': True, 'Status': 'attached', 'VolumeId': 'vol-08f30292b9a7039bc'}}], 'ClientToken': '', 'EbsOptimized': False, 'EnaSupport': True, 'Hypervisor': 'xen', 'NetworkInterfaces': [{'Association': {'IpOwnerId': 'amazon', 'PublicDnsName': 'ec2-18-223-15-106.us-east-2.compute.amazonaws.com', 'PublicIp': '18.223.15.106'}, 'Attachment': {'AttachTime': datetime.datetime(2020, 1, 14, 22, 27, 17, tzinfo=tzutc()), 'AttachmentId': 'eni-attach-0937973380674deef', 'DeleteOnTermination': True, 'DeviceIndex': 0, 'Status': 'attached'}, 'Description': '', 'Groups': [{'GroupName': 'launch-wizard-1', 'GroupId': 'sg-08b8c8a89bcc3c692'}], 'Ipv6Addresses': [], 'MacAddress': '0a:d9:9b:03:a7:a8', 'NetworkInterfaceId': 'eni-0bfcd12253ecf87ec', 'OwnerId': '565241749827', 'PrivateDnsName': 'ip-172-31-37-19.us-east-2.compute.internal', 'PrivateIpAddress': '172.31.37.19', 'PrivateIpAddresses': [{'Association': {'IpOwnerId': 'amazon', 'PublicDnsName': 'ec2-18-223-15-106.us-east-2.compute.amazonaws.com', 'PublicIp': '18.223.15.106'}, 'Primary': True, 'PrivateDnsName': 'ip-172-31-37-19.us-east-2.compute.internal', 'PrivateIpAddress': '172.31.37.19'}], 'SourceDestCheck': True, 'Status': 'in-use', 'SubnetId': 'subnet-22038f6e', 'VpcId': 'vpc-859c5aee', 'InterfaceType': 'interface'}], 'RootDeviceName': '/dev/xvda', 'RootDeviceType': 'ebs', 'SecurityGroups': [{'GroupName': 'launch-wizard-1', 'GroupId': 'sg-08b8c8a89bcc3c692'}], 'SourceDestCheck': True, 'VirtualizationType': 'hvm', 'CpuOptions': {'CoreCount': 1, 'ThreadsPerCore': 1}, 'CapacityReservationSpecification': {'CapacityReservationPreference': 'open'}, 'HibernationOptions': {'Configured': False}, 'MetadataOptions': {'State': 'applied', 'HttpTokens': 'optional', 'HttpPutResponseHopLimit': 1, 'HttpEndpoint': 'enabled'}}
Мне интересно, почему это так. Как мне это исправить?