[Serverless Framework]DynamoDBのテーブルを定義する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Serverless Frameworkのバージョンが1.0.0 rc2になり、フレームワークから利用するS3などのリソースをyaml形式で定義できるようになりました。

S3については公式ページのガイドに載っていますが、DynamoDBについては書かれていなかったので調べてみました。

DynamoDBのテーブルの定義

ということでDynamoDBのテーブルの定義方法です。バージョン 1.0.0 rc2ではAWSのリソースを「serverless.yml」に定義します。

serverless.yml

resources:  
  Resources:
    DynamoDbTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: comments
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
          - AttributeName: user_id
            AttributeType: S
        KeySchema:
          - AttributeName: id
            KeyType: HASH
          - AttributeName: user_id
            KeyType: RANGE
        ProvisionedThroughput:
          ReadCapacityUnits: 5
          WriteCapacityUnits: 5
    DynamoDBIamPolicy:
      Type: AWS::IAM::Policy
      DependsOn: DynamoDbTable
      Properties:
        PolicyName: lambda-dynamodb
        PolicyDocument:
          Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Action:
                - dynamodb:GetItem
                - dynamodb:PutItem
                - dynamodb:UpdateItem
              Resource: arn:aws:dynamodb:*:*:table/*
        Roles:
          - Ref: IamRoleLambdaExecution

テーブル名・カラム・IAMのポリシーなどを纏めて定義するようです。これを「serverless deploy」コマンドでデプロイしてしまえば、後はaws-sdkを経由してDynamoDBにプログラムからアクセス可能です。

まとめ

以上のようにDynamoDBを定義することができました。余談ですが、最近になりCloudFormationがyamlで記述できるようになりました。CloudFormationとserverless.ymlのリソースの記述は互換性があるのかが気になる所です。

参考サイト

Using DynamoDb with Serverless