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

时间:2017-03-07 15:03:06

标签: php amazon-web-services events aws-lambda

我有一个现有的AWS Lambda函数,我在AWS控制台上测试它,效果很好。我的应用程序是自动创建S3存储桶所以我需要动态添加触发器到桶。

我在AWS SDK PHP的文档中找不到这个。 请帮忙......

4 个答案:

答案 0 :(得分:1)

我不能真正理解你的问题。您提供的细节越多,响应就越多。

S3不会在存储桶创建时发布事件。 S3确实有桶内对象的事件(PUT,POST,DELETE等,但不是GET)。

我能想到的唯一可以检测存储桶创建的服务是CloudTrail。然后,您必须过滤每个API事件,然后在存储桶上调用您的Lambda创建。启用CloudTrail是个好主意,默认情况下会为所有新AWS账户启用。

您可以在创建存储桶后在存储桶内创建对象。这可能会触发您的Lambda函数。但是,您需要对每个对象创建事件的事件进行过滤。

可能最好的解决方案是John Veldboom的答案,你的代码在创建存储桶后调用Lambda。

注意:您提到您正在动态创建存储桶。每个AWS账户限制为100个桶(可以增加)。我希望你的设计不会产生很多桶。更好的方法是在存储桶中创建文件夹。

答案 1 :(得分:0)

要调用Lambda函数,您需要使用invoke方法。

$result = $client->invoke([
    'FunctionName' => 'MyFunctionName', // REQUIRED
    'Payload' => 's3-bucket-name'
]);

答案 2 :(得分:0)

您正在寻找的功能是createEventSourceMapping()

创建S3存储桶后,您可以调用此函数以添加从新S3存储桶到Lambda函数的映射。

为了帮助您了解这些参数,请尝试使用getEventSourceMapping()listEventSourceMappings()查看您的功能的现有事件源映射。

答案 3 :(得分:0)

从您的问题中不清楚您要实现的目标。

如果没有特定的触发事件,你可以异步调用createBucket方法,然后然后 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函数。