DynamoDB On-DemandをServerless Framework使って設定してみた #reinvent

2018.12.30

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

はじめに

こんにちは、福岡オフィス所属、IT推進室の井手です。

re:Invent 2018にて、DynamoDB On-Demandという機能追加が発表されました。 【アップデート】Amazon DynamoDBが従量課金で利用できるようになりました! #reinvent

設定方法はコンソール、CloudFormation等色々あると思いますが、今回はServerless Frameworkを使って設定してみたのでご紹介します。

DynamoDB On-Demandとは何か?

 詳しくは、上記ブログほか、弊社のブログ等を確認いただければと思いますが、従量課金 = ある意味真の意味で使った分だけの課金体系、を選べるようになりました。当然、通常考慮しなければならないRead Capacity UnitとWrite Capacity Unitの値を考慮する必要がなくなります。自身のケースだとBatch的に月1にそこそこ大きな処理をLambda - DynamoDBで処理する事があり、できるだけWCU、RCUを少なめにしつつも月1の処理に対応する為にDynamoDB AutoScalingで対応、としていましたが、処理数が増えてくると調整が必要になってきます。一例ですがここをOn-Demandにする事で幸せになれそうな気がしています。  

やってみた

 serverless.ymlを書き換えるだけなので簡単です。

環境

 Serverless Framework - 1.35.1

準備

 検証用のサービスを作成します。

$ mkdir dynamotest
$ cd dynamotest/
$ serverless create --template aws-python3 --path dynamotest

編集

 python3用のサービスが出来ました。次に、serverless.ymlを編集します。

serverless.yml

service: dynamotest

provider:
  name: aws
  runtime: python3.7
  region: ap-northeast-1

functions:
  hello:
    handler: handler.hello

resources:
  Resources:
    ondemanddb:
      Type: 'AWS::DynamoDB::Table'
      Properties:
        TableName: ondemand_test
        AttributeDefinitions:
          -
            AttributeName: id
            AttributeType: S
        KeySchema:
          -
            AttributeName: id
            KeyType: HASH
        # ProvisionedThroughput:
          # ReadCapacityUnits: 5
          # WriteCapacityUnits: 5
        BillingMode: PAY_PER_REQUEST # On-Demand用設定値

 通常、ProvisionedThroughput以下の値を記入する箇所が不要になり、BillingMode: PAY_PER_REQUESTを設定しています。

デプロイ

$ sls deploy -v

結果

DynamoDBを確認してみます。リクエストごとの支払いになっていますね!

さいごに

 On-Demandを選ぶのかどうかは状況によると思いますが、個人的には今後検証、開発段階はOn-Demandを選択すると思います。どなたかの参考になれば幸いです。  

参考にさせてもらった記事/ブログ

DynamoDB On-Demand: When, why and how to use it in your serverless applications