我有一個現有的AWS Lambda函數,我在AWS控制檯上測試它,它工作得很好。我的應用程序自動創建S3存儲桶,因此我需要動態添加觸發器到存儲桶。如何使用AWS開發工具包PHP將觸發器添加到AWS Lambda函數?
我在AWS SDK PHP的文檔中找不到這個。 請幫助...
我有一個現有的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