【问题标题】:AWS download file to s3 on a scheduleAWS 按计划将文件下载到 s3
【发布时间】:2019-04-28 12:36:32
【问题描述】:

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

【问题讨论】:

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


    【解决方案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/*
    

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

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

    选项 1:完全无服务器

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

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

    计划的 Lambda 函数可以使用 EC2 的 API 来启动一个实例。作业脚本可以使用userdata (a script the instance will execute at boot time) 传递给实例。该脚本可以在工作完成后调用TerminateInstance 以杀死自己并停止为此收费。 缺点是您必须为该实例的运行时间付费(您可以拥有 750 小时/月 for freet2.micro 实例) 好处是您可以使用 AWS CLI 和 GZIP 等标准命令行工具,并且您将拥有大量本地存储来完成您的任务。

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

    【讨论】:

    • 如果网页返回了 4GB 的数据怎么办?
    • 这就是 Lambda 的极限。我会用选项更新答案
    • 是的,需要一段时间才能使流式传输正常工作,但正在将下载流式传输到正在写入 tmp 文件夹的 gzip,然后我从 tmp 文件夹上传到 s3。谢谢
    猜你喜欢
    • 2019-02-16
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多