[Serverless Framework]DynamoDBのテーブルを定義する
はじめに
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のリソースの記述は互換性があるのかが気になる所です。