我有以下用例:
在 S3 输入存储桶上,我有大量日志文件(例如,100K 对象中的 5 TB)。我需要使用自定义可执行文件来处理这些日志文件,将日志文件转换为另一种格式 - 然后我希望将结果写入输出 S3 存储桶。
这非常简单,可以通过 AWS Lambda 对新添加的日志文件逐个文件执行操作。我还可以对输入存储桶中的所有单独日志文件运行 Lambda 函数,以便为每个输入获取单个输出文件。
但是,我的可执行文件还能够将输入日志文件以 X MB 的块连接在一起。在普通 PC 上,这可以通过为可执行文件提供包含所有文件的输入文件夹来实现。
但是,在 AWS 中我不确定如何实现同等效果。例如AWS Glue 作业或类似作业,看来我需要将所有 5 TB 下载到某个临时目录 - 这当然是不可能/不切实际的。或者,我需要某种方法将输入存储桶“映射”为本地驱动器 - 但 s3fs 是例如在这种情况下也不是一个实用的解决方案,因为我的可执行文件将通过
subprocess.run
语句运行,即除非直接映射到操作系统,否则无法解析 fsspec 对象。
有没有办法在例如内实现这一目标? AWS Glue 作业或 AWS 环境中的其他无服务器服务?
对于长时间运行的作业,我使用了 AWS Batch。凭借正确的权限,您可以访问 S3 存储桶以进行读写以及其他 AWS 资源。就我而言,我有一个传递参数的 .Net Core 可执行文件。使用这些参数,我访问了 S3 对象进行处理,然后移动到另一个 S3 位置。
https://docs.aws.amazon.com/batch/latest/userguide/what-is-batch.html
使用 Lambda 进行 S3 批量操作可能是一个不错的选择。您只需编写一个 lambda 函数,然后提供一个过滤器或对象列表,然后 S3 批量操作将在每个对象上调用 lambda 并提供结果报告。请参阅以下链接了解更多详情
https://docs.aws.amazon.com/lambda/latest/dg/services-s3-batch.html\
https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-invoke-lambda.html