根据标签名称筛选实例,并在 Python 中打印特定的标签值



我想根据标签值过滤我的实例。这已经完成,我为每个实例获得了多个标签键和值。

法典:

client = boto3.client("ec2")
response = client.describe_instances(
    Filters=[
        {
            'Name': 'tag:Name',
            'Values': [
                'myapp-*'
            ]
        },
        {
            'Name': 'instance-state-name',
            'Values': [
                'running',
            ]
        }
    ]
)['Reservations']
for ec2_reservation in response:
    for ec2_instance in ec2_reservation["Instances"]:
       print(ec2_instance)

回应:(我故意删除了所有其他字段,只粘贴了下面的标签部分(

'Tags': [{'Key': 'Patch group', 'Value': 'Amazon-Linux'},
          {'Key': 'Name', 'Value': 'myapp-mgmt-1'},
          {'Key': 'environment', 'Value': 'devl'},
          {'Key': 'ssm-managed', 'Value': 'true'},
'Tags': [{'Key': 'Patch group', 'Value': 'Amazon-Linux'},
          {'Key': 'Name', 'Value': 'myapp-web-1'},
          {'Key': 'environment', 'Value': 'devl'},
          {'Key': 'ssm-managed', 'Value': 'true'},

现在,虽然尝试打印键名的值,但我无法做到这一点。以下是我尝试过的。你能帮我解决这个问题吗?可能重复,但无法从其他帖子中找到适当的参考资料。

print(ec2_instance["Tags"][0][{'Name':'tag-key', 'Values':['Name']}])
TypeError: unhashable type: 'dict'

我期待输出为:

'myapp-mgmt-1'
'myapp-web-1'

过了一会儿,我弄清楚了。以下是完整的代码供您参考:

注意:使用 boto3.resource 我必须在实例之间循环以获取它们的标签名称。

client = boto3.client("ec2")
resource = boto3.resource("ec2")
response = client.describe_instances(
    Filters=[
        {
            'Name': 'tag:Name',
            'Values': [
                'myapp-*'
            ]
        },
        {
            'Name': 'instance-state-name',
            'Values': [
                'running',
            ]
        }
    ]
)['Reservations']
instanceList = []
for reservation in response:
    ec2_instances = reservation["Instances"]
    for instance in ec2_instances:
        InstanceId = (instance['InstanceId'])
        #InstanceState = (instance['State']['Name'])
        #InstanceLaunchTime = (instance['LaunchTime'])
        ec2instance = resource.Instance(InstanceId)
        InstanceName = []
        for tags in ec2instance.tags:
            if tags["Key"] == 'Name':
                InstanceName = tags['Value']
        fInstance = (InstanceName, InstanceId)
        InstanceDetails = (",".join(fInstance))
        instanceList.append(fInstance)
print(json.dumps(instanceList, indent=4))

截至目前,这对我有用。如果您有更好的方法,请告诉我。

最新更新