我想安排aws s3 sync s3://bucket1 s3://bucket2
命令在定义的时间(例如凌晨3点)每天运行。
我们必须使用lambda等AWS资源来安排此计划的哪些选项?
我看到许多人使用Windows调度程序,但是由于这是s3到s3同步,因此使用服务器的Windows调度程序通过cli运行此命令不是更好的选择。
答案 0 :(得分:1)
这听起来像是The X-Y Problem的情况。也就是说,可能“计划运行一个AWS CLI命令”不是您的根本问题。我敦促您考虑您的问题是否实际上是“获取一个S3存储桶以完全复制另一个存储桶的内容”。
至此,您有多个选择。这些大致分为两类:
主动将对象从存储桶A同步到存储桶B。可以使用已经提到的许多方法来完成此操作,包括您计划AWS CLI命令的想法。
依靠S3's built-in replication ,这可能就是您想要的。
AWS实现S3复制的原因是为了完全解决此问题。除非您有其他考虑(如果您有其他考虑,请更新您的问题,以便我们更好地回答它:))复制可能是您最好,最简单,最可靠的选择。
答案 1 :(得分:0)
执行此操作的方法有很多,我将详细说明使用的方法。
Cloudwatch 事件可触发执行任务的所有操作。您可以像使用crontab一样使用它。
Lambda函数: 1-给lambda函数一个IAM角色,该角色允许从bucket1读取并写入bucket2,然后调用api。 2-由于aws cli是python工具,因此您可以将aws cli嵌入为python依赖项,并在您的内部使用它。
这里是教程的链接: https://bezdelev.com/hacking/aws-cli-inside-lambda-layer-aws-s3-sync/
Docker + ECS Fargate: 0-选择任何预安装了{-{3}}的aws-cli的docker映像 1-创建ECS Fargate集群(将不花任何费用) 2-创建一个ECS任务定义,并在其中使用您在步骤0中选择的图像,并在命令中放置“ aws s3 sync bucket1 bucket2” 3-创建一个计划,该计划将使用在步骤2中创建的任务定义
其他注意事项: 这些是我会使用的。您还可以让cloudwatch触发一个cloudformation,该Cloudformation将创建一个ec2实例并使用userdata字段运行同步,还可以在/ etc / rc上创建一个ec2的ami。local具有sync命令,然后是halt命令,以及其他几种可行的选择。但是我建议您使用lambda选项,除非您的同步作业花费超过15分钟的时间(这是lambda的超时时间),否则我会选择docker选项。