我有一个现有的AWS Lambda函数,我在AWS控制台上测试它,效果很好。我的应用程序是自动创建S3存储桶所以我需要动态添加触发器到桶。
我在AWS SDK PHP的文档中找不到这个。 请帮忙......
答案 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函数。