1

レコードが dynamodb テーブルにコミットされるたびに Lambda 関数が呼び出されるように、イベント ソース マップを設定しようとしています。からの指示をフォローアップしようとしています

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 テーブルに移動して、手動でトリガーをラムダ関数に追加することもでき、すべてが機能します。

前もって感謝します

4

1 に答える 1

1

First off; see why the IamRoleLambda cannot be created. Go to AWS web console and go to CloudFormation. Click on your stack (probably it says it is failed). Scroll to the failed step and see why. It usually specify exactly what failed.

Second; you do not need your lambda execution role to have permissions to the stream. Try to remove the part from the iam policy about the stream. So it looks like this instead:

provider:
    name: aws
    runtime: python2.7
    memorySize: ${memoryVar}
    iamRoleStatements:
    - Effect: "Allow"
      Action:
         - "dynamodb:*"
      Resource: "arn:aws:dynamodb:*:*:table/MyTable*"
于 2016-09-01T10:48:26.007 に答える