Я звоню в aws cloudWatchEvent putRule & PutTarget api через aws sdk, чтобы создать правило CloudWatch и прикрепить к нему цель. Моя цель - это лямбда-функция, правило создается, цель привязана к правилу, но когда правило запускается на основе его расписания, целевая лямбда-функция не запускается. Поэтому я посмотрел дальше и узнал, что источник события в функции лямбда не добавлен, что делает его не срабатывающим. Если я создаю правило и цель через AWS-консоль, источник события будет создан, и все будет работать, но не будет.AWS Cloudwatch Event putTargets, не добавляющий источники событий Lambda
ответ
Насколько я понимаю, в настоящее время это невозможно в SDK, источники событий CloudWatch могут быть добавлены только в lambdas через консоль, как вы сказали, или используя CLI. Если я ошибаюсь, мне бы хотелось узнать, что возможно, но документация здесь, похоже, согласна. http://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html
После добавления цели вам необходимо вызвать лямбда add-permission
.
То есть (через boto3 для меня):
- создать лямбда
- создать правило
- создать Мишени
- вызова лямбда
add-permission
с лямбда-ARN
см. boto3 documentation или cli doc.
, что нужно сделать через CLI? правильно? Я смотрю что-то со стороны sdk. Другое дело, я не хочу создавать eventSource под Lambda для каждого правила. Я ищу какое-то общее разрешение для всех правил облачного просмотра. У меня есть 1000 правил. – johnny
после удаления моего правила, они все еще остаются под источником событий Lambda, и они не подлежат удалению с неизвестным статусом. Я надеюсь, что кто-то из AWS что-то скажет. – johnny
@johnny, возможно, вам также потребуется удалить разрешение. – AdrieanKhisbe
Можно добавить источники событий через aws sdk. Я столкнулся с той же проблемой, и, пожалуйста, см. Код ниже в качестве решения с помощью java.
AddPermissionRequest addPermissionRequest = new AddPermissionRequest();
addPermissionRequest.setStatementId("12345ff"); //any unique string would go
addPermissionRequest.withSourceArn(ruleArn);
addPermissionRequest.setAction("lambda:InvokeFunction");
addPermissionRequest.setPrincipal("events.amazonaws.com");
addPermissionRequest.setFunctionName("name of your lambda function");
AWSLambdaAsyncClient lambdaClient = new AWSLambdaAsyncClient();
lambdaClient.withRegion(Regions.US_EAST_1); //region of your lambda's location
lambdaClient.addPermission(addPermissionRequest);
У меня был такой же вопрос здесь, и я решил это тем, что @Anvita Shukla приглушила.
Это работало нормально, когда я делаю:
- создать лямбда (это я был создан в веб-страницы)
И с SDK
- создать объект правила
- создать целевой объект
- нанести запрос правилу е запрос
- положить мишени
- получить объект ответа запроса правила, чтобы получить правило ARN
- создать разрешение объекта (сказал @Anvita Шукла) и установить правило ARN
- добавить разрешение на лямбда-клиента объект
На странице aws lambda я могу видеть свои lambdas со связанными событиями триггеров. И на странице aws cloudwatch events я вижу созданные правила. Я написал это в java lang. Если вы хотите, я могу поделиться кодом.
Похоже, что это случай. На самом деле имеет смысл добавить это в sdk, в противном случае это не так важно, по крайней мере, в моем случае. – johnny
Согласовано. К сожалению, это похоже на множество функций AWS. – Squirrel