2017-03-07 42 views

回答

0

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

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

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

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

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

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

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

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

0

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

可以异步调用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函数的桶装后成功创建。

相关问题