У меня есть функция AWS Lambda, я тестирую ее на консоли AWS, и она отлично работает. мое приложение автоматически создает корзину S3, поэтому мне нужно динамически добавлять триггер к корзинам.
Я не могу найти это в документации AWS SDK PHP.
Пожалуйста помоги…
Я не совсем понимаю ваш вопрос. Чем больше деталей вы предоставите, тем лучше будут ответы.
S3 не публикует событие при создании корзины. S3 имеет события для объектов внутри корзины (PUT, POST, DELETE и т. Д., Но не GET).
Единственный сервис, который я могу придумать, чтобы обнаружить создание сегмента, это CloudTrail. Затем вам нужно будет отфильтровать каждое событие API и затем вызвать вашу лямбду при создании корзины. Включение CloudTrail является хорошей идеей и включено по умолчанию для всех новых учетных записей AWS.
Вы можете создать объект внутри корзины после создания корзины. Это может вызвать вашу лямбда-функцию. Однако вам нужно будет отфильтровать это также, как вы получите событие для каждого события создания объекта.
Вероятно, лучшим решением является ответ Джона Вельдбума, где ваш код просто вызывает Lambda после создания корзины.
Примечание: вы упоминаете, что вы создаете корзины динамически. У вас есть ограничение в 100 корзин для каждой учетной записи AWS (которое может быть увеличено). Я надеюсь, что ваш дизайн не создает много ведер. Лучше всего создать папки внутри корзины.
Для вызова лямбда-функции вам нужно использовать invoke
метод.
$result = $client->invoke([
'FunctionName' => 'MyFunctionName', // REQUIRED
'Payload' => 's3-bucket-name'
]);
Функция, которую вы ищете createEventSourceMapping()
.
После создания сегмента S3 вы можете вызвать эту функцию, чтобы добавить отображение из вашего нового сегмента S3 в функцию Lambda.
Чтобы помочь вам с параметрами, попробуйте использовать getEventSourceMapping()
или же listEventSourceMappings()
чтобы увидеть существующие сопоставления источника событий с вашей функцией.
Из твоего вопроса не ясно, чего ты пытаешься достичь.
Вы можете позвонить createBucket метод асинхронный, и затем invoke
Ваша лямбда-функция с SDK, если для этого нет определенного запускающего события:
$client->createBucketAsync([/* ... */])->then(
function($success_response) {
$client->invoke(
'FunctionName' => 'λ_Name',
'InvocationType' => 'Event',
'Payload' => json_encode( $some_data )
},
function($error) {
// something went wrong see $error
}
);
Это вызвало бы вашу лямбда-функцию после успешного создания сегмента.