7

Я звоню в aws cloudWatchEvent putRule & PutTarget api через aws sdk, чтобы создать правило CloudWatch и прикрепить к нему цель. Моя цель - это лямбда-функция, правило создается, цель привязана к правилу, но когда правило запускается на основе его расписания, целевая лямбда-функция не запускается. Поэтому я посмотрел дальше и узнал, что источник события в функции лямбда не добавлен, что делает его не срабатывающим. Если я создаю правило и цель через AWS-консоль, источник события будет создан, и все будет работать, но не будет.AWS Cloudwatch Event putTargets, не добавляющий источники событий Lambda

ответ

0

Насколько я понимаю, в настоящее время это невозможно в SDK, источники событий CloudWatch могут быть добавлены только в lambdas через консоль, как вы сказали, или используя CLI. Если я ошибаюсь, мне бы хотелось узнать, что возможно, но документация здесь, похоже, согласна. http://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html

+0

Похоже, что это случай. На самом деле имеет смысл добавить это в sdk, в противном случае это не так важно, по крайней мере, в моем случае. – johnny

+0

Согласовано. К сожалению, это похоже на множество функций AWS. – Squirrel

7

После добавления цели вам необходимо вызвать лямбда add-permission.

То есть (через boto3 для меня):

  • создать лямбда
  • создать правило
  • создать Мишени
  • вызова лямбда add-permission с лямбда-ARN

см. boto3 documentation или cli doc.

+0

, что нужно сделать через CLI? правильно? Я смотрю что-то со стороны sdk. Другое дело, я не хочу создавать eventSource под Lambda для каждого правила. Я ищу какое-то общее разрешение для всех правил облачного просмотра. У меня есть 1000 правил. – johnny

+0

после удаления моего правила, они все еще остаются под источником событий Lambda, и они не подлежат удалению с неизвестным статусом. Я надеюсь, что кто-то из AWS что-то скажет. – johnny

+0

@johnny, возможно, вам также потребуется удалить разрешение. – AdrieanKhisbe

1

Можно добавить источники событий через 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); 
0

У меня был такой же вопрос здесь, и я решил это тем, что @Anvita Shukla приглушила.

Это работало нормально, когда я делаю:

  • создать лямбда (это я был создан в веб-страницы)

И с SDK

  • создать объект правила
  • создать целевой объект
  • нанести запрос правилу е
  • запрос
  • положить мишени
  • получить объект ответа запроса правила, чтобы получить правило ARN
  • создать разрешение объекта (сказал @Anvita Шукла) и установить правило ARN
  • добавить разрешение на лямбда-клиента объект

На странице aws lambda я могу видеть свои lambdas со связанными событиями триггеров. И на странице aws cloudwatch events я вижу созданные правила. Я написал это в java lang. Если вы хотите, я могу поделиться кодом.

 Смежные вопросы

  • Нет связанных вопросов^_^