2 回答
TA贡献1845条经验 获得超8个赞
您可以使用 S3 复制功能。这将允许您复制第一个 S3 中的信息并将其复制到不同的 AWS 区域(跨区域复制),或者您可以在同一 AWS 区域中跨存储桶复制对象。此功能在 S3 中可用,如下图所示。
现在,Lambda 中的 15 分钟限制是硬性限制。此外,如果您的代码持续时间超过 15 分钟,那么 lambda 就不是一个合适的解决方案。
TA贡献1876条经验 获得超7个赞
一个非常简单的解决方案是使用 Amazon EC2 实例而不是 AWS Lambda 函数。
如果您可以将文件放在第一个存储桶中一段时间,那么您可以简单地定期运行该实例(例如一天两次)。如果您需要它更快地工作,您可以使用Lambda 函数在出现新文件时启动 EC2 实例。
Amazon EC2 实例实际上成本非常低。只有一个t2.nano
实例$0.0058 per Hour
,您只需按秒付费。
流程将是:
创建新对象时触发Amazon S3 事件,该对象运行 AWS Lambda 函数
AWS Lambda 函数启动现有的 Amazon EC2实例
EC2 实例有一个脚本,在
/var/lib/cloud/scripts/per-boot/
每次启动时自动执行(不仅仅是第一次启动):
aws s3 mv --recursive . s3://target-bucket/
aws s3 mv --recursive . s3://target-bucket/
sudo shutdown now -h
这会将文件移动到目标存储桶,这意味着文件将被复制然后删除。如果多个文件彼此靠近上传,则不会出错,因为 Lambda 函数只会尝试启动一个已经启动的实例。该mv
行是有意复制的,以便在复制期间上传更多文件时再次运行。(它可以写得更聪明以检查文件并保持循环。)
虽然t2.nano
实例的网络带宽有限,但它应该足以复制大型对象,因为它只是将CopyPart()
消息发送到 S3,而不是传输数据本身。
添加回答
举报