如何使用AWS开发工具包PHP将触发器添加到AWS Lambda函数?
我有一个现有的AWS Lambda函数,我在AWS控制台上测试它,它工作得很好。我的应用程序自动创建S3存储桶,因此我需要动态添加触发器到存储桶。如何使用AWS开发工具包PHP将触发器添加到AWS Lambda函数?
我在AWS SDK PHP的文档中找不到这个。 请帮助...
要调用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函数的桶装后成功创建。
你可以发布你的代码吗 – zombie