Развертывание без сервера не интегрирует AWS Lambda с событием SQS - PullRequest
1 голос
/ 19 мая 2019

Я пытаюсь создать событие AWS SQS, связанное с лямбда-функцией AWS, которая называется sendExportJob, с использованием инфраструктуры без сервера, но после развертывания я не вижу в консоли AWS триггер SQS.Очевидно, что я могу добавить это событие вручную через консоль, и оно работает как положено.

Вот конфигурация функции Lambda в serverless.yml:

sendExportJob:
  handler: src/sendExportJob.handler
  role: sendExportJobIAM
  memorySize: ${self:custom.config.send-exportjob-lambda-settings.memorySize}
  timeout: ${self:custom.config.send-exportjob-lambda-settings.timeout} 
  environment:
    lambdaName: ${self:custom.config.send-exportjob-lambda-settings.name}
    pendingqueueUrl: https://sqs.${self:custom.config.region}.amazonaws.com/${self:custom.config.account-id}/${self:custom.config.sqs-pending-exports-queue-name}
    region: ${self:custom.config.region} 
  events:
    - schedule: rate(${self:custom.config.send-exportjob-lambda-settings.schedule-rate-minutes} minutes)
    - pendingsqs:
      arn:  arn:aws:sqs:${self:custom.config.region}:${self:custom.config.account-id}:${self:custom.config.sqs-pending-exports-queue-name}
      batchSize: 1

Вот конфигурация IAM дляэта конкретная функция:

 sendExportJobIAM:
    Type: AWS::IAM::Role
    Properties:
      RoleName: sendExportJobRole
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lambda.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: sendExportJobIAMAll
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - logs:CreateLogStream
                  - logs:PutLogEvents
                  - logs:CreateLogGroup
                Resource: '*'
              - Effect: Allow
                Action:
                  - sqs:ChangeMessageVisibility
                  - sqs:ChangeMessageVisibilityBatch
                  - sqs:DeleteMessage
                  - sqs:DeleteMessageBatch
                  - sqs:GetQueueAttributes
                  - sqs:ReceiveMessage
                Resource:   arn:aws:sqs:${self:custom.config.region}:${self:custom.config.account-id}:${self:custom.config.sqs-pending-exports-queue-name}
              - Effect: Allow
                Action:
                  - lambda:InvokeFunction
                Resource: '*'

Я использую последнюю версию Serverless Framework и проверил отступ в файле конфигурации.

Ресурс SQS был развернут ранее, поэтому он ужесуществует до его добавления в качестве события.

1 Ответ

1 голос
/ 19 мая 2019

Вам не хватает атрибута sqs в разделе events. Я не совсем уверен, что вы имели в виду под pendingsqs, поскольку это недопустимое ключевое слово Serverless Framework

sendExportJob:
  handler: src/sendExportJob.handler
  role: sendExportJobIAM
  memorySize: ${self:custom.config.send-exportjob-lambda-settings.memorySize}
  timeout: ${self:custom.config.send-exportjob-lambda-settings.timeout} 
  environment:
    lambdaName: ${self:custom.config.send-exportjob-lambda-settings.name}
    pendingqueueUrl: https://sqs.${self:custom.config.region}.amazonaws.com/${self:custom.config.account-id}/${self:custom.config.sqs-pending-exports-queue-name}
    region: ${self:custom.config.region} 
  events:
    - schedule: rate(${self:custom.config.send-exportjob-lambda-settings.schedule-rate-minutes} minutes)
    - sqs: arn:aws:sqs:${self:custom.config.region}:${self:custom.config.account-id}:${self:custom.config.sqs-pending-exports-queue-name}

Если вы хотите настроить размер пакета, как вы делали выше, просто поместите его в элемент sqs в списке events, например:

sendExportJob:
      handler: src/sendExportJob.handler
      role: sendExportJobIAM
      memorySize: ${self:custom.config.send-exportjob-lambda-settings.memorySize}
      timeout: ${self:custom.config.send-exportjob-lambda-settings.timeout} 
      environment:
        lambdaName: ${self:custom.config.send-exportjob-lambda-settings.name}
        pendingqueueUrl: https://sqs.${self:custom.config.region}.amazonaws.com/${self:custom.config.account-id}/${self:custom.config.sqs-pending-exports-queue-name}
        region: ${self:custom.config.region} 
      events:
        - schedule: rate(${self:custom.config.send-exportjob-lambda-settings.schedule-rate-minutes} minutes)
        - sqs: 
            arn: aws:sqs:${self:custom.config.region}:${self:custom.config.account-id}:${self:custom.config.sqs-pending-exports-queue-name}
            batchSize: 1

Это все задокументировано здесь

...