AWS按计划将文件下载到s3

时间:2019-04-25 18:23:35

标签: amazon-web-services cron aws-lambda

现在我有一份每天执行一次的cron作业。它将curl命令传递到一个文件中,对该文件进行gzip压缩,然后将其上传到s3存储桶。我想将其从服务器移到AWS工具中。目前推荐的方法是什么?做一个lambda函数并安排它每天运行?

1 个答案:

答案 0 :(得分:1)

最具成本效益的选择就是您所描述的选择:

aws lambda add-permission --function-name my-function\
                          --action 'lambda:InvokeFunction' --principal events.amazonaws.com
                          --statement-id events-access \
                          --source-arn arn:aws:events:*:123456789012:rule/*

[更新]:如果要下载的文件是4Gb怎么办?

在这种情况下,您将有两个选择。一种工作量更多但更具成本效益的方法。一个更容易实现,但可能会花费更多。

选项1:完全无服务器

您可以设计您的AWS Lambda函数来下载4GB内容和stream it to S3 by 5 Mb chuncks并逐个压缩chunck。我不是压缩专家,但是我敢肯定一定有可能找到一个为您处理的库。 缺点是您需要编写特定的代码,这不像将AWS CLI和GZIP命令行工具结合起来那样容易。

选项2:在工作期间启动EC2实例

预定的Lambda函数可以使用EC2的API启动实例。可以使用userdataa script the instance will execute at boot time)将作业脚本传递到实例。完成工作以杀死自己并停止为此充电时,该脚本可以调用TerminateInstance。 缺点是您必须为该实例的运行时间付费(您每月for freet2.micro实例中有750小时) 肯定的是,您可以使用标准命令行工具(例如AWS CLI和GZIP),并且您将有大量本地存储用于执行任务。

以下是如何从Python启动实例:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.start_instances