【问题标题】:Run AWS lambda function on existing S3 images在现有 S3 映像上运行 AWS lambda 函数
【发布时间】:2018-12-13 01:25:03
【问题描述】:

我在 Node.js 中编写了一个 AWS lambda 函数来调整图像大小并在图像上传时触发它。 我已经有超过 1,000,000 张图片存在于存储桶中。

我想在这些图像上运行这个 lambda 函数,但到目前为止还没有找到任何东西。

如何在 S3 存储桶的现有映像上运行 AWS lamdba 函数?

注意:-我知道这个问题已经在 Stack Overflow 上问过了,但问题是直到现在还没有给出解决方案

【问题讨论】:

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


    【解决方案1】:

    很遗憾,对于 S3 存储桶中已存在的对象,无法自动触发 Lambda。

    您必须为 S3 存储桶中的每个图像手动调用 Lambda 函数。

    首先,您需要使用 the ListObjectsV2 action 列出 S3 存储桶中的现有对象。

    对于 S3 存储桶中的每个对象,您必须随后 invoke your Lambda function 并将 S3 对象的信息作为 Payload 提供。

    【讨论】:

      【解决方案2】:

      是的,你的 s3 存储桶中已经存在的对象不能触发 lambda 是完全正确的,但是为每个对象手动调用你的 lambda 是一个完全愚蠢的想法。

      通过一些巧妙的技术,您可以轻松地在这些图像上执行任务:

      1. 困难的方法是,在本地创建一个与 lambda 函数完全相同的程序,但还要添加两件事,首先,您必须遍历存储桶中的每个对象,然后在其上执行代码,然后保存它调整大小后到 s3 的目标路径。 即,对于已存储在 s3 存储桶中的所有图像,您不是使用 lambda,而是在计算机中本地调整图像大小并将它们保存回 s3 目标。

      2. 最简单的方法是,首先确保您已将 s3 通知的事件类型配置为 Object Created (All) 作为 lambda 的触发器。

      然后,在此之后,将所有已存储的图像移动到一个新的临时存储桶,然后将这些图像移回原始存储桶,这就是你的 lambda 将如何自动为每个图像触发。您可以使用 AWS 提供的 sdk 轻松完成移动任务。比如python中使用boto3移动文件,可以参考这个link to moving example in python using boto3

      1. 您也可以使用复制和粘贴命令,而不是使用移动,即剪切和粘贴

      【讨论】:

      • 你的意思是我在本地现有图像上运行函数?
      • 可以,但是第二种方法更简单,将图像移动到临时存储桶,然后再移回原始存储桶
      • 可能不是拥有 100 万个现有文件的最佳方法,除非它们以较小的批次完成。
      【解决方案3】:

      除了 Mausam Sharma 的评论之外,您还可以使用 aws cli 在存储桶之间运行副本:

      aws s3 sync s3://SOURCE-BUCKET-NAME s3://DESTINATION-BUCKET-NAME --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME

      从这里: https://medium.com/tensult/copy-s3-bucket-objects-across-aws-accounts-e46c15c4b9e1

      【讨论】:

        【解决方案4】:

        您可以使用 CLI 简单地复制回 same 存储桶,该 CLI 将用自身替换原始文件,然后运行 ​​lambda。

        aws s3 copy s3://SOURCE-BUCKET-NAME s3://SOURCE-BUCKET-NAME --recursive
        

        您还可以包含/排除全局模式,这些模式可用于有选择地针对特定日期或特定扩展等运行。

        aws s3 copy s3://SOURCE-BUCKET-NAME s3://SOURCE-BUCKET-NAME --recursive --exclude "*" --include "2020-01-15*"
        

        值得注意的是,与此处的许多其他答案一样,这会在 s3 上产生读/写等成本,因此如果存储桶包含大量文件,请谨慎应用。

        【讨论】:

          猜你喜欢
          • 2017-02-21
          • 2019-09-09
          • 2021-09-20
          • 2017-03-04
          • 1970-01-01
          • 2022-10-06
          • 1970-01-01
          • 1970-01-01
          • 2021-05-19
          相关资源
          最近更新 更多