$30 off During Our Annual Pro Sale. View Details »

DynamoDB コスト最適化っぽいことの基本 with Terraform

kuro
July 17, 2024

DynamoDB コスト最適化っぽいことの基本 with Terraform

AWS10分LT会 - vol.4でLTをした時の資料です。

参考リンクは以下です。
DynamoDBテーブルのコスト最適化(https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/bp-cost-optimization.html)
DynamoDB Auto Scaling によるスループットキャパシティの自動管理(https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/AutoScaling.html)
Amazon DynamoDBにおけるコスト最適化に向けたリザーブドキャパシティの算出方法(https://aws.amazon.com/jp/blogs/news/calculate-amazon-dynamodb-reserved-capacity-recommendations-to-optimize-costs/)
DynamoDBのインフラコストの構造と削減策 - ゆううきブログ(https://blog.yuuk.io/entry/2018/dynamodb-cost-points)
DynamoDBはバッチ処理よりストリーム処理との相性が良いという話 - Zenn(
https://zenn.dev/hsaki/articles/aws-dynamodb-stream-suited)

kuro

July 17, 2024
Tweet

More Decks by kuro

Other Decks in Programming

Transcript

  1. 2. キャパシティモードの選択 resource "aws_dynamodb_table" "example" { name = "cost-optimized-table" billing_mode

    = "PAY_PER_REQUEST" # オンデマンドモード hash_key = "id" attribute { name = "id" type = "S" } } 4
  2. 3. テーブルクラスの最適化 resource "aws_dynamodb_table" "example_ia" { name = "infrequent-access-table" billing_mode

    = "PAY_PER_REQUEST" table_class = "STANDARD_INFREQUENT_ACCESS" hash_key = "id" attribute { name = "id" type = "S" } } 7
  3. 4. Auto Scaling設定 resource "aws_appautoscaling_target" "dynamodb_table_read_target" { max_capacity = 100

    min_capacity = 5 resource_id = "table/${aws_dynamodb_table.example.name}" scalable_dimension = "dynamodb:table:ReadCapacityUnits" service_namespace = "dynamodb" } resource "aws_appautoscaling_policy" "dynamodb_table_read_policy" { name = "DynamoDBReadCapacityUtilization:${aws_appautoscaling_target.dynamodb_table_read_target.resource_id}" policy_type = "TargetTrackingScaling" resource_id = aws_appautoscaling_target.dynamodb_table_read_target.resource_id scalable_dimension = aws_appautoscaling_target.dynamodb_table_read_target.scalable_dimension service_namespace = aws_appautoscaling_target.dynamodb_table_read_target.service_namespace target_tracking_scaling_policy_configuration { predefined_metric_specification { predefined_metric_type = "DynamoDBReadCapacityUtilization" } target_value = 70 } } 9
  4. 4. Auto Scaling設定 max_capacity と min_capacity : スケーリングに よるキャパシティーユニットの最大値と最小 値。

    target_value : 目標使用率(ここでは読み取り キャパシティが70%になるようにスケーリング を行う) 10
  5. 5. TTL(Time to Live)の活用 resource "aws_dynamodb_table" "example_with_ttl" { name =

    "table-with-ttl" billing_mode = "PAY_PER_REQUEST" hash_key = "id" attribute { name = "id" type = "S" } ttl { attribute_name = "ExpirationTime" enabled = true } } 12
  6. 5. TTL(Time to Live)の活用 ttl : 有効期限切れのアイテムを自動的に削除す る機能。 attribute_name :

    TTLのための属性名を指定。通 常アイテムの有効期限を示すタイムスタンプが 格納される。 古いまたは不要なデータを自動的に削除し、ス トレージコストを削減。 テーブルから不要なデータがなくなるため、ク エリのパフォーマンスも上がる。 13
  7. 6. インデックス最適化 resource "aws_dynamodb_table" "example_with_gsi" { name = "table-with-optimized-gsi" billing_mode

    = "PAY_PER_REQUEST" hash_key = "id" attribute { name = "id" type = "S" } attribute { name = "email" type = "S" } global_secondary_index { name = "EmailIndex" hash_key = "email" projection_type = "INCLUDE" non_key_attributes = ["username", "last_login"] } } 14
  8. 6. インデックス最適化 global_secondary_index : GSI(グローバルセカ ンダリインデックス)を設定。 projection_type : "INCLUDE" はKEY+指定した

    項目を取得できる。non_key_attributesで指定 した項目をインデックスに含める。 non_key_attributes : インデックスに含める追加 の属性を指定。 15
  9. 7. DAXの活用 resource "aws_dax_cluster" "example" { cluster_name = "example-dax-cluster" node_type

    = "dax.t3.small" replication_factor = 3 iam_role_arn = aws_iam_role.dax_role.arn } 17
  10. 8. DynamoDB Streamsの最適化 resource "aws_dynamodb_table" "example_with_stream" { name = "table-with-optimized-stream"

    billing_mode = "PAY_PER_REQUEST" hash_key = "id" attribute { name = "id" type = "S" } stream_enabled = true stream_view_type = "NEW_IMAGE" } 19
  11. 8. DynamoDB Streamsの最適化 stream_enabled : DynamoDB Streamsを有効 化。 stream_view_type :

    ストリームに含めるテーブル のビューを指定。 (NEW_IMAGE, OLD_IMAGE, NEW_AND_OLD_IMAGES, KEYS_ONLY) 20
  12. 参考 DynamoDBテーブルのコスト最適化 DynamoDB Auto Scaling によるスループットキ ャパシティの自動管理 Amazon DynamoDBにおけるコスト最適化に向 けたリザーブドキャパシティの算出方法

    DynamoDBのインフラコストの構造と削減策 - ゆううきブログ DynamoDBはバッチ処理よりストリーム処理と の相性が良いという話 - Zenn 29