Как я могу добавить разрешение cloudwatch для вызова lambda в serverless.yml?

#amazon-web-services #aws-lambda #serverless-framework

#amazon-web-services #aws-lambda #serverless-framework

Вопрос:

Я использую serverless для развертывания lambda, и я хотел бы вызвать эту лямбду из события cloudwatch. Ниже приведена моя конфигурация. Лямбда-выражение должно вызываться всякий раз, когда создается новая группа журналов. Но я получил сообщение об ошибке в лямбде, что для вызова лямбды необходимо предоставить разрешение cloudwatch. Как я могу добавить это разрешение в serverless.yml?

   logGroupListener:
    handler: src/index.handler
    name: ${self:provider.stackName}-cloudWatch-listener
    environment:
      DEST_ARN: "arn:aws:lambda:${self:provider.region}:${self:provider.accountId}:function:${self:provider.stackName}-cloudwatch-listener"
    events:
      - cloudwatchEvent:
          event:
            source:
              - 'aws.logs'
            detail-type:
              - 'AWS API Call via CloudTrail'
            detail:
              eventSource:
                - logs.amazonaws.com
              eventName:
                - CreateLogGroup
  

Я знаю, что могу добавить это, выполнив эту команду:

 aws lambda add-permission --function-name $AGGREGATOR_NAME 
  --statement-id $ID --action lambda:InvokeFunction 
  --principal logs.ap-southeast-2.amazonaws.com
  

Я знаю, как создать роль IAM в serverless.yml, но я не знаю, как прикрепить эту роль к cloudwatch.

Комментарии:

1. serverless.com/framework/docs/providers/aws/guide/iam — эта документация предоставляет эту информацию

2. Я знаю, как создать роль. Но я не знаю, как подключить его к cloudwatch.

Ответ №1:

Пожалуйста, попробуйте сделать это следующим образом:

 provider:
  ...
  iamRoleStatements:
    - Effect: Allow
      Action:
        - lambda:InvokeFunction
        - lambda:InvokeAsync
      Resource: "arn:aws:logs:<region>:<accountId>:log-group:<Log group>:*"