この記事は公開されてから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