amazon-web-services - 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 批处理中创建和处理的,在作业详细信息下,我可以看到收到的参数是:
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 作为环境变量提交作业呢?
解决方案
您可以通过触发存储桶中的 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 存储桶。
推荐阅读
- php - Guzzle concurrent requests - which is the requested url from the response
- python - OSError: [Errno 8] 运行 subprocess.Popen 时执行格式错误
- unix - If you can dynamically change the font in the terminal like you can with CSS
- android - 从 Android 中的 Async 类调用 Async 类不起作用?
- ruby-on-rails - 如何使用复选框而不是下拉列表显示 f.select
- java - 我尝试连接到 SQL Server 2014 但总是出现错误,如何解决
- python - 如何用鸭子png制作精灵鸭子?
- node.js - 电子制造商:EACCES:权限被拒绝
- c# - Click element within Data Grid Column Header
- javascript - 延迟点击网页上的所有类似按钮