【问题标题】:How to Stop EC2 instances automatically without specific tag and value如何在没有特定标签和值的情况下自动停止 EC2 实例
【发布时间】:2021-03-11 09:50:20
【问题描述】:

在 AWS 中,所有没有标签“os”且值为“linux”的实例都应该在区域内关闭?。

有人可以帮忙吗?我试过了,但无法实现。

我发现可以停止带有特定标签的实例,但无法创建 lambda 函数来停止没有特定标签和值的 ec2 实例。

【问题讨论】:

  • 您应该获得所有个实例的列表,然后在您的 AWS Lambda 函数代码中过滤掉所需的实例。

标签: amazon-web-services amazon-ec2 aws-lambda tags


【解决方案1】:

您能否获取所有实例的列表,然后遍历它们,如果它们有标签则拒绝终止?在 Python 中,类似于:

import boto3

def has_tag(instance):
   # check if instance has tag

client = boto3.client('ec2')
response = client.describe_instances(
    Filters=[
        ...
    ],
    ...
)

for instance in response['Reservations']['Instances']:
    if not has_tag(instance):
        #terminate instance

【讨论】:

  • 亲爱的 James Shapiro,单个区域有大约 100 个实例,无法收集和过滤。有什么方法可以在不过滤的情况下终止实例
  • 嗨 Arun,使用 NextToken 的多次调用来列出所有 EC2 实例不能解决这个问题吗?见boto3.amazonaws.com/v1/documentation/api/latest/reference/…
【解决方案2】:

您可以使用资源组标记 API 来获取不具有该值的资源列表。

这将为您提供所有没有“linux”作为任何标签值的 EC2 实例的 ARN 列表:

aws resourcegroupstaggingapi get-resources --resource-type-filters ec2:instance --query 'ResourceTagMappingList[?!(Tags[?Value==`linux`])].ResourceARN'

假设“linux”是一个值用于“os”标签以过滤掉标签不具有该值的任何资源,但您可以根据需要调整JMESPath查询。 p>

【讨论】:

    猜你喜欢
    • 2019-07-11
    • 2018-08-15
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2022-11-18
    • 2011-11-30
    相关资源
    最近更新 更多