この記事は公開されてから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のリソースの記述は互換性があるのかが気になる所です。