2017-03-07 39 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函數的桶裝後成功創建。

相關問題