我有一个现有的AWS Lambda函数,在AWS控制台上测试它运行得很好。我的应用程序会自动创建S3存储桶,因此我需要动态地向这些存储桶添加触发器。
我在AWS SDK PHP文档中找不到这个功能,请帮忙...
我有一个现有的AWS Lambda函数,在AWS控制台上测试它运行得很好。我的应用程序会自动创建S3存储桶,因此我需要动态地向这些存储桶添加触发器。
我在AWS SDK PHP文档中找不到这个功能,请帮忙...
我不是很明白你的问题。提供越多细节,回答会越好。
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内创建文件夹。
createEventSourceMapping()
。在创建S3存储桶后,您可以调用此函数将新的S3存储桶与Lambda函数进行映射。如果需要帮助处理参数,请尝试使用getEventSourceMapping()
或listEventSourceMappings()
查看现有的事件源映射到您的函数。invoke
方法。$result = $client->invoke([
'FunctionName' => 'MyFunctionName', // REQUIRED
'Payload' => 's3-bucket-name'
]);
从你的问题中并不清楚你想要实现什么。
如果没有特定的触发事件,你可以异步调用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 函数。