如何使用AWS开发工具包PHP将触发器添加到AWS Lambda函数?

问题描述:

我有一个现有的AWS Lambda函数,我在AWS控制台上测试它,它工作得很好。我的应用程序自动创建S3存储桶,因此我需要动态添加触发器到存储桶。如何使用AWS开发工具包PHP将触发器添加到AWS Lambda函数?

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

+0

你可以发布你的代码吗 – zombie

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

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

我真的不明白你的问题。你提供的更好的细节将是答复。

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

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

创建存储桶后,您可以在存储桶内创建一个对象。这可能会触发您的Lambda函数。但是,您也需要过滤该对象,因为您将为每个对象创建事件获取事件。

也许最好的解决方案是John Veldboom的回答,你的代码在创建桶之后调用Lambda。

注意:您提到您正在动态创建存储桶。每个AWS账户最多有100个桶(可以增加)。我希望你的设计不会创造出很多水桶。更好的方法是在存储桶内创建文件夹。

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

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

要帮助您解决参数问题,请尝试使用getEventSourceMapping()listEventSourceMappings()来查看您的现有事件源映射到您的功能。

从你的问题中不清楚你想要达到的目标。

可以异步调用createBucket方法,并然后invoke用,如果有是没有特定的触发事件的SDK您的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函数的桶装后成功创建。