@exabugs/dynamodb-client 1.8.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +1 -0
  3. package/dist/client/FindCursor.d.ts +11 -6
  4. package/dist/client/FindCursor.d.ts.map +1 -1
  5. package/dist/client/FindCursor.js +30 -11
  6. package/dist/client/FindCursor.js.map +1 -1
  7. package/dist/integrations/react-admin/components/ReferenceManyToMany/ReferenceManyToManyField.d.ts.map +1 -1
  8. package/dist/integrations/react-admin/components/ReferenceManyToMany/ReferenceManyToManyField.js +5 -4
  9. package/dist/integrations/react-admin/components/ReferenceManyToMany/ReferenceManyToManyField.js.map +1 -1
  10. package/dist/integrations/react-admin/components/ReferenceManyToMany/ReferenceManyToManyInput.d.ts.map +1 -1
  11. package/dist/integrations/react-admin/components/ReferenceManyToMany/ReferenceManyToManyInput.js +5 -4
  12. package/dist/integrations/react-admin/components/ReferenceManyToMany/ReferenceManyToManyInput.js.map +1 -1
  13. package/dist/integrations/react-admin/components/ReferenceManyToMany/useGetListAll.d.ts +19 -0
  14. package/dist/integrations/react-admin/components/ReferenceManyToMany/useGetListAll.d.ts.map +1 -0
  15. package/dist/integrations/react-admin/components/ReferenceManyToMany/useGetListAll.js +36 -0
  16. package/dist/integrations/react-admin/components/ReferenceManyToMany/useGetListAll.js.map +1 -0
  17. package/dist/integrations/react-admin/dataProvider.d.ts +15 -1
  18. package/dist/integrations/react-admin/dataProvider.d.ts.map +1 -1
  19. package/dist/integrations/react-admin/dataProvider.js +61 -4
  20. package/dist/integrations/react-admin/dataProvider.js.map +1 -1
  21. package/dist/integrations/react-admin/index.d.ts +1 -0
  22. package/dist/integrations/react-admin/index.d.ts.map +1 -1
  23. package/dist/integrations/react-admin/index.js.map +1 -1
  24. package/dist/server/handler.cjs +683 -499
  25. package/dist/server/handler.cjs.map +4 -4
  26. package/dist/server/media-handler.cjs +2 -2
  27. package/dist/server/media-process-handler-dlq.cjs +544 -344
  28. package/dist/server/media-process-handler-dlq.cjs.map +4 -4
  29. package/dist/server/media-process-handler.cjs +543 -343
  30. package/dist/server/media-process-handler.cjs.map +4 -4
  31. package/dist/server/operations/deleteMany.d.ts.map +1 -1
  32. package/dist/server/operations/deleteMany.js +15 -30
  33. package/dist/server/operations/deleteMany.js.map +1 -1
  34. package/dist/server/operations/deleteOne.d.ts.map +1 -1
  35. package/dist/server/operations/deleteOne.js +7 -4
  36. package/dist/server/operations/deleteOne.js.map +1 -1
  37. package/dist/server/operations/find/idQuery.d.ts.map +1 -1
  38. package/dist/server/operations/find/idQuery.js +23 -9
  39. package/dist/server/operations/find/idQuery.js.map +1 -1
  40. package/dist/server/operations/find/nearQuery.d.ts.map +1 -1
  41. package/dist/server/operations/find/nearQuery.js +41 -40
  42. package/dist/server/operations/find/nearQuery.js.map +1 -1
  43. package/dist/server/operations/find/shadowQuery.d.ts +7 -0
  44. package/dist/server/operations/find/shadowQuery.d.ts.map +1 -1
  45. package/dist/server/operations/find/shadowQuery.js +34 -42
  46. package/dist/server/operations/find/shadowQuery.js.map +1 -1
  47. package/dist/server/operations/findAll.d.ts +8 -0
  48. package/dist/server/operations/findAll.d.ts.map +1 -0
  49. package/dist/server/operations/findAll.js +46 -0
  50. package/dist/server/operations/findAll.js.map +1 -0
  51. package/dist/server/operations/findMany.d.ts.map +1 -1
  52. package/dist/server/operations/findMany.js +9 -26
  53. package/dist/server/operations/findMany.js.map +1 -1
  54. package/dist/server/operations/findManyReference.d.ts.map +1 -1
  55. package/dist/server/operations/findManyReference.js +4 -14
  56. package/dist/server/operations/findManyReference.js.map +1 -1
  57. package/dist/server/operations/parameterConverter.d.ts.map +1 -1
  58. package/dist/server/operations/parameterConverter.js +16 -8
  59. package/dist/server/operations/parameterConverter.js.map +1 -1
  60. package/dist/server/operations/updateMany.d.ts.map +1 -1
  61. package/dist/server/operations/updateMany.js +15 -30
  62. package/dist/server/operations/updateMany.js.map +1 -1
  63. package/dist/server/operations/updateOne.d.ts.map +1 -1
  64. package/dist/server/operations/updateOne.js +8 -6
  65. package/dist/server/operations/updateOne.js.map +1 -1
  66. package/dist/server/utils/batchGet.d.ts +21 -0
  67. package/dist/server/utils/batchGet.d.ts.map +1 -0
  68. package/dist/server/utils/batchGet.js +73 -0
  69. package/dist/server/utils/batchGet.js.map +1 -0
  70. package/dist/server/utils/scanWarning.d.ts +30 -0
  71. package/dist/server/utils/scanWarning.d.ts.map +1 -0
  72. package/dist/server/utils/scanWarning.js +63 -0
  73. package/dist/server/utils/scanWarning.js.map +1 -0
  74. package/dist/shared/utils/index.d.ts +1 -0
  75. package/dist/shared/utils/index.d.ts.map +1 -1
  76. package/dist/shared/utils/index.js +1 -0
  77. package/dist/shared/utils/index.js.map +1 -1
  78. package/dist/shared/utils/scanSort.d.ts +16 -0
  79. package/dist/shared/utils/scanSort.d.ts.map +1 -0
  80. package/dist/shared/utils/scanSort.js +33 -0
  81. package/dist/shared/utils/scanSort.js.map +1 -0
  82. package/dist/sharp-layer.zip +0 -0
  83. package/docs/README.md +286 -0
  84. package/docs/SCAN_WARNING.md +81 -0
  85. package/package.json +2 -1
  86. package/terraform/README.md +8 -6
  87. package/terraform/main.tf +40 -1
  88. package/terraform/outputs.tf +13 -0
  89. package/terraform/variables.tf +17 -0
@@ -82,12 +82,14 @@ module "lambda_records" {
82
82
 
83
83
  ### オプション変数
84
84
 
85
- | 変数名 | 型 | デフォルト値 | 説明 |
86
- | -------------------- | ------ | ------------ | ----------------------------------- |
87
- | `log_retention_days` | number | 7 | CloudWatch Logsの保持期間(日) |
88
- | `log_level` | string | "info" | ログレベル(debug/info/warn/error) |
89
- | `lambda_timeout` | number | 900 | Lambda関数のタイムアウト(秒) |
90
- | `lambda_memory` | number | 512 | Lambda関数のメモリサイズ(MB) |
85
+ | 変数名 | 型 | デフォルト値 | 説明 |
86
+ | ---------------------------- | ------------ | ------------ | ------------------------------------------------------------------------------------------------------ |
87
+ | `log_retention_days` | number | 7 | CloudWatch Logsの保持期間(日) |
88
+ | `log_level` | string | "info" | ログレベル(debug/info/warn/error) |
89
+ | `scan_warn_threshold` | number | 5000 | 疎な検索(SPARSE_SCAN)の警告を出す閾値(1リクエストで読む件数)。打ち切りはしない。docs/SCAN_WARNING.md |
90
+ | `scan_warning_alarm_actions` | list(string) | [] | SPARSE_SCAN アラームの通知先(SNS トピック ARN)。空だと誰にも通知されない |
91
+ | `lambda_timeout` | number | 900 | Lambda関数のタイムアウト(秒) |
92
+ | `lambda_memory` | number | 512 | Lambda関数のメモリサイズ(MB) |
91
93
 
92
94
  ## 出力
93
95
 
package/terraform/main.tf CHANGED
@@ -80,6 +80,43 @@ resource "aws_cloudwatch_log_group" "lambda_records" {
80
80
  }
81
81
  }
82
82
 
83
+ # 疎な検索(SPARSE_SCAN)の警告を検知する
84
+ # Lambda は、1リクエストで読んだ件数が SCAN_WARN_THRESHOLD を超えると event=SPARSE_SCAN の警告ログを出す。
85
+ # 結果を壊さないため検索は打ち切らない。警告に気づいて、インデックス・スキーマ・ロジックの
86
+ # 見直しに着手できるよう、メトリクスとアラームにする(対応手順: docs/SCAN_WARNING.md)
87
+ resource "aws_cloudwatch_log_metric_filter" "sparse_scan" {
88
+ name = "${var.project_name}-${var.environment}-records-sparse-scan"
89
+ log_group_name = aws_cloudwatch_log_group.lambda_records.name
90
+ pattern = "{ $.event = \"SPARSE_SCAN\" }"
91
+
92
+ metric_transformation {
93
+ name = "SparseScanCount"
94
+ namespace = "${var.project_name}/${var.environment}/Records"
95
+ value = "1"
96
+ default_value = "0"
97
+ }
98
+ }
99
+
100
+ resource "aws_cloudwatch_metric_alarm" "sparse_scan" {
101
+ alarm_name = "${var.project_name}-${var.environment}-records-sparse-scan"
102
+ alarm_description = "疎な検索(SPARSE_SCAN)の警告が出ています。ログの actions に従って、インデックス・スキーマ・ロジックを見直してください(docs/SCAN_WARNING.md)"
103
+ namespace = aws_cloudwatch_log_metric_filter.sparse_scan.metric_transformation[0].namespace
104
+ metric_name = aws_cloudwatch_log_metric_filter.sparse_scan.metric_transformation[0].name
105
+ statistic = "Sum"
106
+ period = 300
107
+ evaluation_periods = 1
108
+ threshold = 1
109
+ comparison_operator = "GreaterThanOrEqualToThreshold"
110
+ treat_missing_data = "notBreaching"
111
+
112
+ alarm_actions = var.scan_warning_alarm_actions
113
+ ok_actions = var.scan_warning_alarm_actions
114
+
115
+ tags = {
116
+ Name = "${var.project_name}-${var.environment}-records-sparse-scan"
117
+ }
118
+ }
119
+
83
120
  # Lambda関数のZIPファイルを作成
84
121
  data "archive_file" "lambda_records" {
85
122
  type = "zip"
@@ -118,6 +155,8 @@ resource "aws_lambda_function" "records" {
118
155
  COGNITO_USER_POOL_ID = var.cognito_user_pool_id
119
156
  COGNITO_CLIENT_ID = var.cognito_client_id
120
157
  LOG_LEVEL = var.log_level
158
+ # 疎な検索(SPARSE_SCAN)の警告閾値(1リクエストで読む件数)
159
+ SCAN_WARN_THRESHOLD = var.scan_warn_threshold
121
160
  # シャドウ設定(環境変数ベース)
122
161
  SHADOW_CREATED_AT_FIELD = var.shadow_created_at_field
123
162
  SHADOW_UPDATED_AT_FIELD = var.shadow_updated_at_field
@@ -215,7 +254,7 @@ module "parameter_store" {
215
254
  records_iam_function_url = aws_lambda_function_url.records_iam.function_url
216
255
  # IAM URL は常に同じ apply で作るため true を明示する(未確定の値の有無で count を決めない)
217
256
  create_records_iam_url_parameter = true
218
- records_function_arn = aws_lambda_function.records.arn
257
+ records_function_arn = aws_lambda_function.records.arn
219
258
 
220
259
  # Cognito設定
221
260
  cognito_user_pool_id = var.cognito_user_pool_id
@@ -59,3 +59,16 @@ output "iam_alias_arn" {
59
59
  description = "AWS_IAM認証用エイリアスのARN。呼び出し元IAMロールのlambda:InvokeFunctionUrl権限のResourceに指定する"
60
60
  value = aws_lambda_alias.iam.arn
61
61
  }
62
+
63
+ output "sparse_scan_alarm_name" {
64
+ description = "疎な検索(SPARSE_SCAN)の CloudWatch アラーム名"
65
+ value = aws_cloudwatch_metric_alarm.sparse_scan.alarm_name
66
+ }
67
+
68
+ output "sparse_scan_metric" {
69
+ description = "疎な検索(SPARSE_SCAN)のメトリクス(namespace / name)"
70
+ value = {
71
+ namespace = aws_cloudwatch_log_metric_filter.sparse_scan.metric_transformation[0].namespace
72
+ name = aws_cloudwatch_log_metric_filter.sparse_scan.metric_transformation[0].name
73
+ }
74
+ }
@@ -55,6 +55,23 @@ variable "log_level" {
55
55
  }
56
56
  }
57
57
 
58
+ variable "scan_warn_threshold" {
59
+ description = "疎な検索(SPARSE_SCAN)の警告を出す閾値(1リクエストで読むレコード件数)。超えても検索は打ち切らず、警告のみ記録する"
60
+ type = number
61
+ default = 5000
62
+
63
+ validation {
64
+ condition = var.scan_warn_threshold >= 1 && floor(var.scan_warn_threshold) == var.scan_warn_threshold
65
+ error_message = "scan_warn_threshold は 1 以上の整数である必要があります。"
66
+ }
67
+ }
68
+
69
+ variable "scan_warning_alarm_actions" {
70
+ description = "SPARSE_SCAN アラームの通知先(SNS トピック ARN の配列)。空ならアラーム状態の記録のみ"
71
+ type = list(string)
72
+ default = []
73
+ }
74
+
58
75
  # シャドウ設定(環境変数ベース)
59
76
  variable "shadow_created_at_field" {
60
77
  description = "作成日時フィールド名"