在每个S3存储桶上获取最新更新的对象



我正在尝试获取未使用的S3存储桶的列表。为此,我在每个bucket上获取最新更新的对象,并将上次修改的日期与给定的日期进行比较。我收到内容上的密钥错误。这是我的密码。

import json
import boto3
from datetime import datetime
import csv
def lambda_handler(event, context):
# connect to S3
s3 = boto3.client(service_name='s3',
region_name='my region')
# Declaring required variables
column_list = ["Bucket_Name", "Object_Name", "Last_Modified_Date"]
result_list = []
date_to_compare = datetime(2021, 12, 24).strftime('%Y-%m-%d')
# Last modified object for each s3 bucket
Bucket_list = s3.list_buckets()
for bucket in Bucket_list['Buckets']:
objectlist = s3.list_objects_v2(Bucket=bucket["Name"])
latest_updated = max(objectlist["Contents"],key=lambda x: x['LastModified'])
if(latest_updated['LastModified'].strftime('%Y-%m-%d') < date_to_compare):
values = [bucket["Name"], latest_updated["Key"],latest_updated["LastModified"].strftime('%Y-%m-%d')]
result_list.append(values)

file = open('s3_buckets_unused.csv', 'w+', newline='')
# writing the data into the file
with file:
write = csv.writer(file)
write.writerow(column_list)
write.writerows(result_list)

这在我的本地系统上运行得很好,但在AWS Lambda上则不然。我收到以下错误。有什么见解吗?

响应{"errorMessage":"'内容";,"errorType":"KeyError";,"requestId":"e981bffb-61da-4bc3-8078-29c13018e659〃;,"stackTrace":["文件"/"var/task/lambda_function.py";,第17行,在lambda_handler中\n latest_updated=max(objectlist["Contents"],key=lambda x:x["LastModified"](;]}

如果一个bucket为空,则它将没有Contents。你必须检查一下:

import json
import boto3
from datetime import datetime
import csv
def lambda_handler(event, context):
# connect to S3
s3 = boto3.client(service_name='s3',
region_name='my region')
# Declaring required variables
column_list = ["Bucket_Name", "Object_Name", "Last_Modified_Date"]
result_list = []
date_to_compare = datetime(2021, 12, 24).strftime('%Y-%m-%d')
# Last modified object for each s3 bucket
Bucket_list = s3.list_buckets()
for bucket in Bucket_list['Buckets']:
objectlist = s3.list_objects_v2(Bucket=bucket["Name"])

if 'Contents' not in objectlist: continue

latest_updated = max(objectlist["Contents"],key=lambda x: x['LastModified'])
if(latest_updated['LastModified'].strftime('%Y-%m-%d') < date_to_compare):
values = [bucket["Name"], latest_updated["Key"],latest_updated["LastModified"].strftime('%Y-%m-%d')]
result_list.append(values)

file = open('s3_buckets_unused.csv', 'w+', newline='')
# writing the data into the file
with file:
write = csv.writer(file)
write.writerow(column_list)
write.writerows(result_list)

最新更新