DynamoDB の既存の CloudFormation テンプレートに従量課金モードを指定してみた #reinvent

はじめに

re:Invent 2018のキーノート1日目に「Amazon DynamoDBの従量課金サポート」が発表されました。

本ブログでは過去に作成した DynamoDB の CloudFormation テンプレートに対して、請求モードを変更した状態のもので既存のテーブルが更新されるかを確認して見ました。

BillingMode

DynamoDB の CloudFormation テンプレートのプロパティに請求モードを指定する BillingMode が追加されていました。

  • AWS::DynamoDB::Table - BillingMode

  • PROVISIONED

    • 請求モードを PROVISIONED に設定します。予測可能なワークロードには PROVISIONED を使用することをお勧めします。
  • PAY_PER_REQUEST
    • 請求モードを PAY_PER_REQUEST に設定します。予期しないワークロードには PAY_PER_REQUEST を使用することをお勧めします。

また、この BillingMode をつけていない場合は、デフォルトで PROVISIONED が指定されます。

変更前

変更前の DynamoDB の CloudFormation テンプレートです。 ProvisionedThroughputReadCapacityUnitsWriteCapacityUnits を5指定していました。

  RoomTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: room_table
      AttributeDefinitions:
        - AttributeName: device_id
          AttributeType: S
      KeySchema:
        - AttributeName: device_id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 5

変更後

BillingModePAY_PER_REQUEST にして、 ProvisionedThroughput の項目を削除します。

ProvisionedThroughput の項目は BillingModePROVISIONED の時は必須のフィールドになりますが、 PAY_PER_REQUEST の時には指定できないフィールドになります。

  RoomTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: room_table
      AttributeDefinitions:
        - AttributeName: device_id
          AttributeType: S
      KeySchema:
        - AttributeName: device_id
          KeyType: HASH
      BillingMode: PAY_PER_REQUEST

このように、請求モードが「リクエストごとの支払い」に変更されました。

従量課金になるため、請求額には注意が必要です。

まとめ

本文でも言及されていましたが、既知のテーブルに関しても比較的簡単に請求モードの変更を導入できました。従量課金になることに注意が必要ですが、サービス開始当初などでスパイクの想定が困難な場合は、取り入れても良いかもしれません。

参考文献