如何从篮子中获取最后一个文件名或文件 S3 随着活动 triggered lambda

我是一家在服务中的新手 AWS 我只有一周的经验,使用较短的架构工作,我的要求是在安装事件触发器后立即将新文件加载到特定桶中时,我的要求 Lambda 必须获取有关最后一个文件的详细信息,例如创建的名称,大小和日期。

源每次将此文件加载到新文件夹中并调用当前日期文件夹。

到目前为止,我可以破解如何创建我的功能 Lambda 并听触发事件。

这是我的代码。


import boto3
import botocore
import datetime
import logging

def lambda_handler/event, context/:
logging.info/'Start function'/
s3 = boto3.resource/'s3'/
DATE = datetime.datetime.today//.strftime/'%Y-%m-%d'/
BUCKET_NAME = 'monkey-banana-dev'
KEY = '/banana/incoming/daily/{}'.format/DATE/
logging.info/'Getting file from {}'.format/KEY//
try:
s3.Bucket/BUCKET_NAME/.download_file/KEY, 'name_of_my_file'/
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
print/"The object does not exist."/
else:
raise


在这里,我知道它将是今天的日期,所以我使用
datetime

, 得到确切的 KEY, 但文件名始终是不同的。 虽然我知道它将是一个带有后缀的文本文件 .txt, 我无法围绕如何从触发器获取最后一个下载的文件和其他详细信息的问题。
已邀请:

石油百科

赞同来自:

你有
http://docs.aws.amazon.com/lam ... 3-put
, 它包含钥匙 "Records", 这是一个列表。

您可以过滤条目 eventName 'ObjectCreated:Put', 然后按键对列表进行排序 "eventTime", 获取有关事件的最新数据。


def lambda_handler/event, context/:
records = [x for x in event.get/'Records', []/ if x.get/'eventName'/ == 'ObjectCreated:Put']
sorted_events = sorted/records, key=lambda e: e.get/'eventTime'//
latest_event = sorted_events[-1] if sorted_events else {}
info = latest_event.get/'s3', {}/
file_key = info.get/'object', {}/.get/'key'/
bucket_name = info.get/'bucket', {}/.get/'name'/

裸奔

赞同来自:

如上所述,此链接具有信息
http://docs.aws.amazon.com/lam ... 3-put
您需要做的是使用该对象

活动

, 它传输到该功能。 这包含链接中列出的详细信息。 正如您在链接的示例中看到的,则需要访问

钥匙

. 它将包含一个完整路径,包括指定的日期,因为密钥是文件的完整路径。

要帮助调试它,请始终使用该功能将事件值打印到控制台

打印

在 Python.

小明明

赞同来自:

'Key' 将包含文件的所有路径。
一个例子-


import boto3
import os
s3 = boto3.resource/'s3'/
bucket=s3.Bucket/'hcss-heavyjob-raw-tables'/
for key in bucket.objects.all//:
if key.key.startswith/'heavyjob/EMPMAST'/:
print/key.key/'


出口-

heavyjob/EMPMAST/20190524-165352044.csv

heavyjob/EMPMAST/20190529-153011532.csv

heavyjob/EMPMAST/LOAD00000001.csv

您可以使用文件的名称
basename


key.key

或者


head,tail = os.path.split/key.key/
print/tail/

要回复问题请先登录注册