使用 lambda boto3 检查 ec2 是不是存在

Posted

技术标签:

【中文标题】使用 lambda boto3 检查 ec2 是不是存在【英文标题】:Check ec2 exist with lambda boto3使用 lambda boto3 检查 ec2 是否存在 【发布时间】:2022-01-04 18:40:55 【问题描述】:

我有 1 个来自 s3 的列表实例 ID,我想使用来自 EC2 服务的实例 ID 检查来自 s3 的每个实例 ID,以检查 ec2 是否存在。你能帮我建议一些解决方案吗?谢谢

def lambda_handler(event, context):
#Get all ec2 information - The current list in AWS
ins_inf = ec2_client.describe_instances()
for reservation in ins_inf['Reservations']:
    for ins_cur in reservation['Instances']:
        #Get all instance ID from ec2
        ins_cur_id = ins_cur["InstanceId"]
        #Get instance ID list from s3
        for ins_f_s3 in line_stream(s3_objload.get()['Body']):
            #Remove /n
            ins_f_s3_re=ins_f_s3.strip()
            #Compare instance ID from s3 with current instance ID in aws
            if ins_cur_id == ins_f_s3_re:
                print (ins_f_s3_re + ' found')
            else:
                print(ins_f_s3_re + ' not found in aws ')

这就是结果

i-0a959c122fd51581e not found in aws
i-0a959c122fd51581f not found in aws 
i-0a959c122fd51581e found
i-0a959c122fd51581f not found in aws 

也许您可以在比较时看到“i-0a959c122fd51581e”显示 2 条消息。它不正确。有人可以帮我这个案子吗?非常感谢

【问题讨论】:

每次文件中的当前行不匹配时,您都在打印not found in aws。只有在任何行中都找不到它时,您才想打印它。我还建议将文件加载到内存中,而不是为保留列表中的每个实例从 S3 重新获取文件。 你好 Jordanm,谢谢你的想法。现在我的 python 已经运行良好了。谢谢 【参考方案1】:

从 S3 中预先读取您感兴趣的 EC2 实例列表并将它们存储在列表中。然后简单地测试从 DescribeInstances 调用返回的每个实例 ID,看看它是否在 S3 列表中(就像 @jordanm 在上面的评论中建议的那样)。

s3_list = [x.strip() for x in line_stream(s3_objload.get()['Body'])]

ins_inf = ec2_client.describe_instances()

for reservation in ins_inf['Reservations']:
    for ins_cur in reservation['Instances']:

        # Get instance ID from ec2
        ins_cur_id = ins_cur["InstanceId"]
       
        if ins_cur_id in s3_list:
            print(ins_cur_id + ' found')
        else:
            print(ins_cur_id + ' not found')

【讨论】:

您好 Jarmod,感谢您的建议。现在我可以做到了。非常感谢

以上是关于使用 lambda boto3 检查 ec2 是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

AWS lambda 使用启动模板和 boto3 创建 ec2 实例,仅使用所需的权限

在 lambda (boto3) 上创建的卷未显示在控制台中

boto3 EC2 脚本电子邮件:所有状态检查的一封电子邮件

使用 boto3 检查 s3 的存储桶中是不是存在密钥

用于检查特定标签是不是不存在的 Lambda 函数-python

使用 BOTO3 检索 EC2 实例的公共 dns