【问题标题】:Invoking lambda function manually simulating S3 ObjectCreated event trigger? (php aws sdk)手动调用 lambda 函数模拟 S3 ObjectCreated 事件触发器? (php aws SDK)
【发布时间】: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


【解决方案1】:

我想我想通了,复制 python 引用中的数据结构以创建一个基本的有效负载并将其作为事件触发:

$lambda = $awsSvc->getAwsSdkCached()->createLambda();
//    bucket = event['Records'][0]['s3']['bucket']['name']
//    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
$bucket = "mybucket";
$key = "somefolder/someimage.jpg";
$payload_json = sprintf('{"Records":[{"s3":{"bucket":{"name":"%s"},"object":{"key":"%s"}}}]}', $bucket, $key);

$params = array(
        'FunctionName' => 'ThumbnailGenerator',
        'InvocationType' => 'Event',
        'LogType' => 'Tail',
        'Payload' => $payload_json
);
$result = $lambda->invoke($params);

【讨论】:

    猜你喜欢
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    相关资源
    最近更新 更多