如何使用AWS SDK PHP为AWS Lambda函数添加触发器?

4

我有一个现有的AWS Lambda函数,在AWS控制台上测试它运行得很好。我的应用程序会自动创建S3存储桶,因此我需要动态地向这些存储桶添加触发器。

我在AWS SDK PHP文档中找不到这个功能,请帮忙...


你能发布你的代码吗? - zombie
4个回答

1

我不是很明白你的问题。提供越多细节,回答会越好。

S3不在bucket创建时发布事件。S3确实有针对桶内对象的事件(PUT、POST、DELETE等,但没有GET)。

我能想到的唯一服务,能检测到bucket创建,就是CloudTrail。然后您需要过滤每个API事件,然后在bucket创建时调用Lambda。启用CloudTrail是一个好主意,并默认为所有新的AWS帐户启用。

创建bucket后,您可以在bucket内创建一个对象。这可以触发Lambda函数。但是,您还需要进行过滤,因为您将获得每个对象创建事件的事件。

最好的解决方案可能是John Veldboom的答案,就是您的代码在创建bucket后直接调用Lambda。

注意:您提到正在动态创建buckets。您的AWS帐户每个有100个bucket的限制(可以增加)。更好的方法是在bucket内创建文件夹。


1

1
要调用 Lambda 函数,您需要使用 invoke 方法。
$result = $client->invoke([
    'FunctionName' => 'MyFunctionName', // REQUIRED
    'Payload' => 's3-bucket-name'
]);

0

从你的问题中并不清楚你想要实现什么。

如果没有特定的触发事件,你可以异步调用createBucket方法,然后使用SDK invoke你的lambda函数:

$client->createBucketAsync([/* ... */])->then(
   function($success_response) {
      $client->invoke(
        'FunctionName'   => 'λ_Name',
        'InvocationType' => 'Event',
        'Payload'        => json_encode( $some_data )
   },
   function($error) {
      // something went wrong see $error
   }
);

这将在存储桶成功创建后触发您的 Lambda 函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接