【发布时间】:2020-01-03 22:50:45
【问题描述】:
我们让第三方创建了一个基于 python 的图像缩略图脚本,我们将其设置为在 S3 ObjectCreated 事件上触发。然后,我们在测试脚本后导入了近 5,000 张图像的集合,但在导入过程中,图像文件的庞大容量最终填满了 lambda 测试空间,只有大约 12% 的图像最终为它们创建了缩略图。
我们需要为另外 88% 手动创建缩略图。虽然我有一个可以从 EC2 运行的基于 php 的脚本,但它有点慢。我突然想到,我可以“按需”创建它们,并且可以避免为所有在导入期间尚未自动创建的文件创建缩略图。 有些文件可能永远不会被客户再次访问——现有的 lambda 缩略图已经有一点延迟,我在 javascript setTimeout 重试循环中考虑了这一点,但在调用这个循环之前,我可以想象它是否是最近上传的——例如在最后 10 秒内 -- 每当找不到缩略图时,在开始重试循环之前手动触发 lambda。
但要做到这一点,我需要能够使用类似于事件触发器的参数来触发 Lambda 脚本。似乎他们的脚本只是从事件值中访问存储桶名称和键:
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
由于不熟悉 lambda 并且对 sdk 还有些陌生,我不确定如何执行包含这些 python 脚本值的 lambda 触发器。
我可以使用 php sdk 或 javascript sdk。 (甚至是 cli)
感谢任何帮助。
【问题讨论】:
-
"但是在导入过程中,图像文件的绝对体积最终填满了 lambda 测试空间"您必须自己清理临时空间,因为您不需要知道容器是否会在后续调用中被重用......但一次只有一个 Lambda 函数调用可以访问特定的
/tmp目录。 -
注意,我们第三方承包了那件作品。如果我这样做了,我会清理临时文件。 (但我对 python/node 或 lambda 环境不够熟悉)他们现在正在收到该错误后清理临时空间本身。不过现在对我们帮助不大,因为导入已经完成。
标签: amazon-s3 aws-lambda aws-sdk-js aws-php-sdk