首页 > 解决方案 > 无法在循环内使用条件(使用 describe_instances)

问题描述

我正在尝试学习 boto3 库并开始自己做一些实验。问题是我正在使用 describe_instances 方法,我可以获得我的实例的信息。到目前为止,我没有任何问题。但是当我提出一个条件时,如果一个实例具有特定的 IAM 角色,那么我想将此实例 ID 添加到列表中。但它返回给我一个空列表。我的错误是什么?谢谢。

ec2_client=boto3.client("ec2")

def describe_instances():
    resp = ec2_client.describe_instances()
    print(resp)

    instance_ids=[]

    for reservations in resp["Reservations"]:
        for instances in reservations["Instances"]:
            if instances["IamInstanceProfile"]=={'Arn': 'arn:aws:iam::723149566365:instance-profile/PublicEC2_S3Access'}:
                instance_ids.append(instances["InstanceId"])


    print(instance_ids)

标签: pythonboto3

解决方案


根据 boto3 docsIamInstanceProfile元素是 a dict,其中包含 2 个键:

  • Arn - 字符串
  • ID - 字符串

因此,当您instances["IamInstanceProfile"]与只有Arn键的 dict 进行比较时,它始终是False.

我建议您将支票更改为:

my_arn = 'arn:aws:iam::723149566365:instance-profile/PublicEC2_S3Access'
for reservations in resp["Reservations"]:
        for instances in reservations["Instances"]:
            if instances["IamInstanceProfile"]["Arn"] == my_arn:
                instance_ids.append(instances["InstanceId"])

推荐阅读