首页 > 解决方案 > AWS 服务:使用 cloudwatch s3 put 事件触发批处理作业,文件 url 作为环境变量

问题描述

Objective: 每当一个对象存储在桶中时,触发一个批处理作业(aws batch)并将上传的文件url作为环境变量传递

情况:我目前已经设置好了一切。我有带有 cloudwatch 触发批处理作业的 s3 存储桶,但我无法获取完整的文件 url 或设置环境变量。

我遵循了以下教程:https ://docs.aws.amazon.com/batch/latest/userguide/batch-cwe-target.html “创建使用输入转换器的 AWS Batch 目标”。

AWS Cloudwatch 输入变压器

该作业是在 AWS 批处理中创建和处理的,在作业详细信息下,我可以看到收到的参数是:

S3bucket: mybucket
S3key: view-0001/custom/2019-08-07T09:40:04.989384.json

但是环境变量没有改变,文件 URL 不包含所有其他参数,例如访问和过期令牌。

我也没有找到有关输入变压器中可以使用哪些其他变量的任何信息。如果有人有手册的链接,那将是受欢迎的。

另外,在 WAS CLI 文档中,可以在提交作业时设置环境变量,所以我想这里也应该可以?https://docs.aws.amazon.com/cli/latest/reference/batch/submit-job.html

那么问题来了,如何以文件 url 作为环境变量提交作业呢?

标签: amazon-web-servicesamazon-s3amazon-cloudwatchaws-batch

解决方案


您可以通过触发存储桶中的 Lambda 函数并在 Lambda 函数中生成预签名 URL 并从 Lambda 函数启动批处理作业来完成此操作。

但是,更好的方法是使用存储桶和密钥简单地访问批处理函数中的文件。您可以使用适用于您的语言的 AWS 开发工具包或简单地使用 awscli。例如,您可以下载文件:

aws s3 cp s3://$BUCKET/$KEY /tmp/file.json

另一方面,如果您需要 Batch 函数之外的预签名 URL,您可以使用 AWS 开发工具包或awscli生成一个:

aws s3 presign s3://$BUCKET/$KEY

使用这两种方法中的任何一种来访问批处理作业中的文件,您都需要配置批处理计算环境的实例角色,并通过 IAM 访问您的 S3 存储桶。


推荐阅读