Добавьте aws sqs как триггер лямбда-функции aws, используя сервер - PullRequest
0 голосов
/ 05 июля 2018

Я хочу добавить sqs (публичную очередь другой учетной записи) в качестве триггерной точки для лямбда-функции (присутствует в другой учетной записи). Я думаю, что это может быть сделано без сервера, но я не могу добавить его, используя без сервера, даже если функции sqs и lambda существуют в одной учетной записи. Пожалуйста, предложите мне, как я могу это сделать.

Объясняя больше: Public Sqs S1 создан в учетной записи: X Lambda L1 находится в другом аккаунте: Y

Как мне добавить sqs S1 в качестве точки запуска лямбды L1?

Я хочу команду что-то вроде sns: подписка на aws sns --topic-arn Тема Amazon SNS arn - lambda протокола - конечная точка уведомлений arn: aws: lambda: us-east-1: B: функция: учетная запись SNS-X

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Вам потребуется политика SQS, которая выглядит примерно так:

{
  "Version":"2012-10-17",
  "Id":"sqsQueuePolicy",
  "Statement":[{
      "Sid":"Allow-other-account-to-use-queue",
      "Effect":"Allow",
      "Principal":{
        "AWS":"[ACCOUNT-Y]"
      },
      "Action":"sqs:*",
      "Resource":"arn:aws:sqs:us-east-1:[ACCOUNT-X]:S1",
      "Condition": {
        "ArnEquals" : "arn:aws:lambda:[ACCOUNT-Y-REGION]:[ACCOUNT-Y]:function:L1"
      }
    }
  ]
}

Формирование облаков было бы примерно таким в аккаунте X:

sqsQueue:
  Type: 'AWS::SQS::Queue'
  Properties:
    QueueName: !Sub '${projectName}-ConsumerQueue'

policyQueueConsumer:
  Type: 'AWS::SQS::QueuePolicy'
  Properties:
    PolicyDocument:
      Id: !Sub '${projectName}-ConsumerQueuePolicy'
      Version: '2012-10-17'
      Statement:
      - Sid: 'AllowConsumerSnsToSqsPolicy'
        Effect: 'Allow'
        Principal:
          AWS: '${ACCOUNT-Y}'
        Action:
          - sqs:ChangeMessageVisibility
          - sqs:DeleteMessage
          - sqs:GetQueueAttributes
          - sqs:ReceiveMessage
          - sqs:SendMessage
        Resource: !GetAtt sqsQueue.Arn
        Condition:
          ArnEquals:
            aws:SourceArn: !Sub arn:aws:lambda:${ACCOUNT-Y-REGION}:${ACCOUNT-Y}:function:L1
    Queues:
      - !Ref sqsQueue

Для формирования облака для учетной записи Y триггер будет отображаться так:

sqsEventTrigger:
  Type: "AWS::Lambda::EventSourceMapping"
  Properties:
    BatchSize: 5
    Enabled: true
    EventSourceArn: 'arn:aws:sqs:us-east-1:[ACCOUNT-X]:S1'
    FunctionName: 'L1'
  DependsOn:
    - queueConsumerLambda
    - queueConsumerExecutionRole

Обратите внимание, что вашей лямбде также потребуются те же разрешения, которые определены в ее роли выполнения в учетной записи Y:

{
  "Version":"2012-10-17",
  "Id":"lambdaExecutionPolicy",
  "Statement":[{
      "Sid":"Allow-lambda-to-call-queue-in-other-account",
      "Effect":"Allow",
      "Action":"sqs:*",
      "Resource":"arn:aws:sqs:[ACCOUNT-X-REGION]:[ACCOUNT-X]:S1",
    }
  ]
}

Я адаптировал свой ответ из своего поста здесь: События AWS SQS на AWS Lambda в TechBlog Financial Engines

Подробнее смотрите в документации AWS: Расширенные политики SQS для получения более подробной информации.

0 голосов
/ 05 июля 2018

Недавно AWS объявил, что он делает возможным именно такой вариант использования: Поддержка SQS для Lambda .

Предполагая, что вы можете получить доступ ко всем ресурсам, вы должны иметь возможность напрямую связывать SQS и Lambda.

...