#author("2019-02-07T11:49:35+00:00","","") [[AWSメモ]] > * DynamoDBのキャパシティユニットについて [#h11472d3] #setlinebreak(on); #contents -- 関連 --- [[DynamoDBで取得する列を指定した場合のキャパシティユニット]] ** DynamoDBにかかる料金 [#j1b271ce] #html(<div style="padding-left:10px;">) だいたいここらへんに書いてある。 - [[Amazon DynamoDB 料金>https://aws.amazon.com/jp/dynamodb/pricing/]] - [[Amazon DynamoDB: 仕組み - 読み取りと書き込みのスループットキャパシティー>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.ProvisionedThroughput.html]] - [[DynamoDB での制限 - キャパシティーユニットとプロビジョニングされるスループット>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Limits.html#default-limits-capacity-units-provisioned-throughput]] - [[DynamoDB項目のサイズ>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/CapacityUnitCalculations.html]] - [[読み込みでのキャパシティーユニットの消費>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/ProvisionedThroughput.html#ItemSizeCalculations.Reads]] - [[書き込みでのキャパシティーユニットの消費>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/ProvisionedThroughput.html#ItemSizeCalculations.Writes]] - [[リクエストのスロットリングとバーストキャパシティー>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/ProvisionedThroughput.html#ProvisionedThroughput.Throttling]] - [[グローバルセカンダリインデックス におけるプロビジョニングされたスループットに関する考慮事項>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/GSI.html#GSI.ThroughputConsiderations]] - [[ローカルセカンダリインデックス におけるプロビジョニングされたスループットに関する考慮事項>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/LSI.html#LSI.ThroughputConsiderations]] - [[DynamoDB Auto Scaling によるスループットキャパシティの自動管理>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/AutoScaling.html]] - [[DynamoDB および AWS SDK を使用したプログラミング » エラー処理>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Programming.Errors.html]] #html(</div>) ** キャパシティユニット/保管料の概要 [#o86f584e] #html(<div style="padding-left:10px;">) 上記のリンク先の内容を簡単に纏めると、以下の通り。 *** 項目サイズ [#ad3c8ab1] #html(<div style="padding-left:10px;">) - 読み書き 及び 保管料にかかる項目(レコード)のサイズは、属性名と属性値の長さの合計となる(属性名の長さもサイズ計算に含まれる) #html(</div>) *** データ保管にかかる料金 [#t4030332] #html(<div style="padding-left:10px;">) - 毎月最初の 25 GB の保管は無料 ※それ以降は月額 0.285USD/GB(東京リージョン) #html(</div>) *** 読み書きにかかる料金 [#d35cbde5] #html(<div style="padding-left:10px;">) - 読み書きの度に料金がかかる - 読み込み/書き込みキャパシティーモードとして「プロビジョニング済み」と「オンデマンド」から選択できる - プロビジョニング済みモードの場合 -- 読み込み/書き込み &color(red){''キャパシティユニット単位''}; で料金がかかる -- テーブルや索引(GSI/LSI)に事前にキャパシティユニットを割り当てる必要がある -- 事前に割り当てたキャパシティユニットを超えるスループットは出せない&br;(一定量まではスロットリングされるが、スロットリング不可な場合は ProvisionedThroughputExceededException が発生する) -- 割り当てたキャパシティユニットは使用しなくても消費する為、適切な値を割り当てる必要がある -- Auto Scaling は可能。※ゼロになった場合にはスケールダウンしない。等の制限がある為、個別にポリシー設定が必要。 -- GSI/LSI に対しての読み書きはテーブルへの読み書きとは別にキャパシティユニットを消費する -- 読み込みは 4KB単位で 1 キャパシティユニットを消費する ※4KB未満のレコードはレコード毎に4KBに切り上げられて計算される -- 書き込みは 1KB単位で 1キャパシティユニットを消費する ※1KB未満のレコードはレコード毎に1KBに切り上げられて計算される -- queryで複数レコードを一括で取得する場合は、合計サイズが 4KB単位で切り上げて計算される(レコード毎には切り上げられない) -- 0.0001484USD/RCU、0.000742USD/WCU(東京リージョン) -- 前払いのリザーブドキャパシティーを利用すると通常よりも割安(WCU/RCU 100 個単位で購入) - オンデマンドの場合 -- 読み込み/書き込み &color(red){''リクエスト単位''}; で料金がかかる -- 読み込みは 4KB単位で 1リクエストとして計算される -- 書き込みは 1KB単位で 1リクエストとして計算される -- 0.2854USD/100万読み込みリクエスト、1.4269USD/100万書き込みリクエスト (東京リージョン) #html(</div>) #html(</div>) ** 補足 [#n828ed4d] #html(<div style="padding-left:10px;">) *** オンデマンドモードについて [#r72bacd3] #html(<div style="padding-left:10px;">) デフォルトでは、テーブルやGSI/LSI に事前に設定したキャパシティユニット分のパフォーマンスを確保する事ができるが、 [[AWS re:Invent 2018>https://aws.amazon.com/jp/new/reinvent/]] で発表された [[DynamoDB On-demand>https://aws.amazon.com/jp/about-aws/whats-new/2018/11/announcing-amazon-dynamodb-on-demand/]] を使用すると、事前設定なしに使用した分だけ料金を支払う事もできる。 #html(<span style="color:red; font-weight: bold;">※ただし無料利用枠の範囲外になる為、要注意!</span>) #html(</div>) *** 消費したキャパシティユニットの調べ方 [#x8e5d4be] #html(<div style="padding-left:10px;">) プロビジョニング済みモードの場合、各APIのデータ操作時に ReturnConsumedCapacity を指定する事により、消費したキャパシティユニットを調べる事ができる。 boto3 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html #html(</div>) #html(</div>)