Я пытаюсь настроить карту источника событий, чтобы функция Lambda получала вызов каждый раз, когда запись фиксируется в моей таблице dynamodb. Я пытаюсь следить инструкции отКак создать EventSourceMapping с serverless 1.0?
https://github.com/serverless/serverless/blob/master/docs/guide/overview-of-event-sources.md
Мой текущий serverless.yml
использует:
service: sl-pipeline
provider:
name: aws
runtime: python2.7
memorySize: ${memoryVar}
iamRoleStatements:
- Effect: "Allow"
Action:
- "dynamodb:*"
Resource: "arn:aws:dynamodb:*:*:table/MyTable*"
- Effect: "Allow"
Action:
- "dynamodb:GetRecords"
- "dynamodb:GetShardIterator"
- "dynamodb:DescribeStream"
- "dynamodb:ListStreams"
Resource: "arn:aws:dynamodb:*:*:table/MyTable*/stream/*"
# you can overwrite defaults here
defaults:
stage: dev
region: us-east-1
functions:
main:
handler: handler.main
# Add event trigger from dynamodb Stream Table
resources:
Resources:
mapping:
Type: AWS::Lambda::EventSourceMapping
Properties:
BatchSize: 10
EventSourceArn: "arn:aws:dynamodb:us-east-1:XXXXXXXXX:table/MyTable/stream"
FunctionName: "sl-pipeline-dev-main"
StartingPosition: LATEST
И каждый раз, когда я называю serverless deploy
, я получаю:
Serverless Error ---------------------------------------
An error occurred while provisioning your cloudformation:
The following resource(s) failed to create: [IamRoleLambda,
mapping].
Я предполагая, что это связано с разрешениями роли IAM, но не может понять, как это исправить. Для той роли, которую я использую для сервера без сервера, я попытался использовать только:
Action: "*"
Resource: "*"
так что он должен быть в состоянии сделать что угодно.
Обратите внимание, что если я удалю раздел resources
из serverless.yml
, я смогу установить его правильно. Я даже могу пойти в таблицу dynamodb и вручную добавить триггер в функцию лямбда, и все это работает.
Заранее благодарен