@exabugs/dynamodb-client 1.5.2 → 1.6.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 (58) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/server/handler.cjs +10855 -6862
  3. package/dist/server/handler.cjs.map +4 -4
  4. package/dist/server/media/magicBytes.d.ts +25 -0
  5. package/dist/server/media/magicBytes.d.ts.map +1 -0
  6. package/dist/server/media/magicBytes.js +53 -0
  7. package/dist/server/media/magicBytes.js.map +1 -0
  8. package/dist/server/media/media-handler.d.ts +13 -0
  9. package/dist/server/media/media-handler.d.ts.map +1 -0
  10. package/dist/server/media/media-handler.js +177 -0
  11. package/dist/server/media/media-handler.js.map +1 -0
  12. package/dist/server/media/metadata.d.ts +29 -0
  13. package/dist/server/media/metadata.d.ts.map +1 -0
  14. package/dist/server/media/metadata.js +57 -0
  15. package/dist/server/media/metadata.js.map +1 -0
  16. package/dist/server/media/presign.d.ts +9 -0
  17. package/dist/server/media/presign.d.ts.map +1 -0
  18. package/dist/server/media/presign.js +90 -0
  19. package/dist/server/media/presign.js.map +1 -0
  20. package/dist/server/media/process-handler-dlq.d.ts +3 -0
  21. package/dist/server/media/process-handler-dlq.d.ts.map +1 -0
  22. package/dist/server/media/process-handler-dlq.js +94 -0
  23. package/dist/server/media/process-handler-dlq.js.map +1 -0
  24. package/dist/server/media/process-handler.d.ts +12 -0
  25. package/dist/server/media/process-handler.d.ts.map +1 -0
  26. package/dist/server/media/process-handler.js +153 -0
  27. package/dist/server/media/process-handler.js.map +1 -0
  28. package/dist/server/media/sign.d.ts +11 -0
  29. package/dist/server/media/sign.d.ts.map +1 -0
  30. package/dist/server/media/sign.js +49 -0
  31. package/dist/server/media/sign.js.map +1 -0
  32. package/dist/server/media/ssmParams.d.ts +29 -0
  33. package/dist/server/media/ssmParams.d.ts.map +1 -0
  34. package/dist/server/media/ssmParams.js +74 -0
  35. package/dist/server/media/ssmParams.js.map +1 -0
  36. package/dist/server/media/types.d.ts +109 -0
  37. package/dist/server/media/types.d.ts.map +1 -0
  38. package/dist/server/media/types.js +2 -0
  39. package/dist/server/media/types.js.map +1 -0
  40. package/dist/server/media/upload-handler.d.ts +50 -0
  41. package/dist/server/media/upload-handler.d.ts.map +1 -0
  42. package/dist/server/media/upload-handler.js +115 -0
  43. package/dist/server/media/upload-handler.js.map +1 -0
  44. package/dist/server/media-handler.cjs +57474 -0
  45. package/dist/server/media-handler.cjs.map +7 -0
  46. package/dist/server/media-process-handler-dlq.cjs +48138 -0
  47. package/dist/server/media-process-handler-dlq.cjs.map +7 -0
  48. package/dist/server/media-process-handler.cjs +60680 -0
  49. package/dist/server/media-process-handler.cjs.map +7 -0
  50. package/dist/sharp-layer.zip +0 -0
  51. package/package.json +38 -3
  52. package/terraform/main.tf +3 -2
  53. package/terraform/media/README.md +67 -0
  54. package/terraform/media/main.tf +791 -0
  55. package/terraform/media/outputs.tf +66 -0
  56. package/terraform/media/variables.tf +117 -0
  57. package/terraform/modules/parameter-store/main.tf +26 -1
  58. package/terraform/modules/parameter-store/variables.tf +7 -1
@@ -0,0 +1,66 @@
1
+ # メディア機能モジュール出力
2
+
3
+ output "bucket_name" {
4
+ description = "メディア用S3バケット名"
5
+ value = aws_s3_bucket.media.bucket
6
+ }
7
+
8
+ output "bucket_arn" {
9
+ description = "メディア用S3バケットARN"
10
+ value = aws_s3_bucket.media.arn
11
+ }
12
+
13
+ output "cloudfront_distribution_id" {
14
+ description = "メディア配信用CloudFront Distribution ID"
15
+ value = aws_cloudfront_distribution.media.id
16
+ }
17
+
18
+ output "cloudfront_domain_name" {
19
+ description = "メディア配信用CloudFrontドメイン名(カスタムドメイン未設定時はこちらを使う)"
20
+ value = aws_cloudfront_distribution.media.domain_name
21
+ }
22
+
23
+ output "base_url" {
24
+ description = "署名付きURL発行時に使う配信ベースURL(カスタムドメイン優先)"
25
+ value = "https://${coalesce(var.domain_name, aws_cloudfront_distribution.media.domain_name)}"
26
+ }
27
+
28
+ output "key_pair_id" {
29
+ description = "CloudFront署名用のKey Pair ID。sign.tsのkeyPairId引数に渡す"
30
+ value = aws_cloudfront_public_key.media.id
31
+ }
32
+
33
+ output "key_group_id" {
34
+ description = "CloudFront Key Group ID"
35
+ value = aws_cloudfront_key_group.media.id
36
+ }
37
+
38
+ output "process_handler_function_name" {
39
+ description = "process-handler Lambda関数名"
40
+ value = aws_lambda_function.process_handler.function_name
41
+ }
42
+
43
+ output "process_handler_function_arn" {
44
+ description = "process-handler Lambda関数ARN"
45
+ value = aws_lambda_function.process_handler.arn
46
+ }
47
+
48
+ output "process_handler_dlq_url" {
49
+ description = "process-handlerの失敗レコードを受け取るSQS DLQのURL"
50
+ value = aws_sqs_queue.process_handler_dlq.url
51
+ }
52
+
53
+ output "media_handler_function_name" {
54
+ description = "media-handler Lambda関数名"
55
+ value = aws_lambda_function.media_handler.function_name
56
+ }
57
+
58
+ output "media_handler_function_arn" {
59
+ description = "media-handler Lambda関数ARN"
60
+ value = aws_lambda_function.media_handler.arn
61
+ }
62
+
63
+ output "sharp_layer_arn" {
64
+ description = "sharp Lambda LayerのARN"
65
+ value = aws_lambda_layer_version.sharp.arn
66
+ }
@@ -0,0 +1,117 @@
1
+ # メディア機能モジュール変数定義
2
+
3
+ variable "project_name" {
4
+ description = "プロジェクト名"
5
+ type = string
6
+ }
7
+
8
+ variable "environment" {
9
+ description = "環境識別子(dev, stg, prd)"
10
+ type = string
11
+ }
12
+
13
+ variable "region" {
14
+ description = "AWSリージョン"
15
+ type = string
16
+ }
17
+
18
+ variable "table_name" {
19
+ description = "呼び出し側の既存DynamoDBテーブル名(mediaリソースを相乗りさせる)"
20
+ type = string
21
+ }
22
+
23
+ variable "table_arn" {
24
+ description = "呼び出し側の既存DynamoDBテーブルARN"
25
+ type = string
26
+ }
27
+
28
+ variable "image_cache_ttl_days" {
29
+ description = "cache/{fileId}/{width}(オンデマンドリサイズ結果)のS3 Lifecycleによる自動削除までの日数"
30
+ type = number
31
+ default = 30
32
+ }
33
+
34
+ variable "allowed_upload_origins" {
35
+ description = "presigned POSTでのブラウザアップロードを許可するオリジン(例: Admin UIのドメイン)。空配列の場合はCORS設定自体を作らない(モバイルのみの利用等、ブラウザアップロードが不要な場合)"
36
+ type = list(string)
37
+ default = []
38
+ }
39
+
40
+ # 呼び出し側の既存テーブルに相乗りするため、process-handlerが生成するShadow Recordsの
41
+ # 形式は呼び出し側の既存Lambda(records等)の設定と一致させる必要がある
42
+ # (詳細: docs/media-design.md「環境変数の一致」)。既定値は本体(terraform/variables.tf)と揃える。
43
+ variable "shadow_created_at_field" {
44
+ description = "作成日時フィールド名(呼び出し側の既存設定と一致させること)"
45
+ type = string
46
+ default = "createdAt"
47
+ }
48
+
49
+ variable "shadow_updated_at_field" {
50
+ description = "更新日時フィールド名(呼び出し側の既存設定と一致させること)"
51
+ type = string
52
+ default = "updatedAt"
53
+ }
54
+
55
+ variable "shadow_string_max_bytes" {
56
+ description = "プリミティブ型の最大バイト数(呼び出し側の既存設定と一致させること)"
57
+ type = number
58
+ default = 100
59
+ }
60
+
61
+ variable "shadow_number_padding" {
62
+ description = "数値のパディング桁数(呼び出し側の既存設定と一致させること)"
63
+ type = number
64
+ default = 15
65
+ }
66
+
67
+ variable "signing_public_key_param" {
68
+ description = "CloudFront署名用の公開鍵(PEM形式)を保持するSSM Parameter名。値そのものは呼び出し側が別途登録する"
69
+ type = string
70
+ }
71
+
72
+ variable "image_policy_param" {
73
+ description = "image policy(masterMaxDimension・allowedContentTypes・maxUploadSize)のJSONを保持するSSM Parameter名。値そのものは呼び出し側が別途登録する"
74
+ type = string
75
+ }
76
+
77
+ variable "log_retention_days" {
78
+ description = "CloudWatch Logsの保持期間(日数)"
79
+ type = number
80
+ default = 7
81
+ }
82
+
83
+ variable "process_handler_timeout" {
84
+ description = "process-handler Lambdaのタイムアウト(秒)"
85
+ type = number
86
+ default = 60
87
+ }
88
+
89
+ variable "process_handler_memory_size" {
90
+ description = "process-handler Lambdaのメモリサイズ(MB)"
91
+ type = number
92
+ default = 1024
93
+ }
94
+
95
+ variable "media_handler_memory_size" {
96
+ description = "media-handler Lambdaのメモリサイズ(MB)"
97
+ type = number
98
+ default = 1024
99
+ }
100
+
101
+ variable "domain_name" {
102
+ description = "配信用CloudFrontのカスタムドメイン名(省略時はCloudFrontのデフォルトドメインを使う)"
103
+ type = string
104
+ default = null
105
+ }
106
+
107
+ variable "acm_certificate_arn" {
108
+ description = "domain_name指定時に使うACM証明書ARN(us-east-1リージョンのものである必要がある)"
109
+ type = string
110
+ default = null
111
+ }
112
+
113
+ variable "route53_zone_id" {
114
+ description = "domain_name指定時にAliasレコードを作成するRoute53 Hosted Zone ID(省略時はDNSレコードを作成しない)"
115
+ type = string
116
+ default = null
117
+ }
@@ -9,6 +9,11 @@ locals {
9
9
  }
10
10
 
11
11
  # DynamoDB Client API URL (外部参照用)
12
+ # NONE認証。ブラウザ・Admin UI(Cognito JWT)向け。
13
+ # サーバー間呼び出し・運用スクリプト(IAM署名)はこちらを使わないこと
14
+ # (IAM認証バイパス脆弱性の修正でNONE URLからIAM認証の分岐が削除された。
15
+ # ADR: dynamodb-client/docs/adr/0001-fix-iam-auth-bypass.md)。
16
+ # 下のinfra_dynamodb_client_api_iam_urlを使う。
12
17
  resource "aws_ssm_parameter" "infra_dynamodb_client_api_url" {
13
18
  name = "/${var.project_name}/${var.environment}/infra/dynamodb-client-api-url"
14
19
  type = local.parameter_type
@@ -16,7 +21,27 @@ resource "aws_ssm_parameter" "infra_dynamodb_client_api_url" {
16
21
  value = var.records_function_url
17
22
  overwrite = true
18
23
 
19
- description = "DynamoDB Client API URL (for Admin UI and internal Lambdas)"
24
+ description = "DynamoDB Client API URL, NONE auth (for Admin UI / Cognito JWT clients only)"
25
+
26
+ tags = {
27
+ Environment = var.environment
28
+ ManagedBy = "terraform"
29
+ Category = "infra-info"
30
+ }
31
+ }
32
+
33
+ # DynamoDB Client API URL, AWS_IAM認証版 (外部参照用)
34
+ # サーバー間呼び出し・運用スクリプト(IAM署名クライアント)向け
35
+ resource "aws_ssm_parameter" "infra_dynamodb_client_api_iam_url" {
36
+ count = var.records_iam_function_url != null ? 1 : 0
37
+
38
+ name = "/${var.project_name}/${var.environment}/infra/dynamodb-client-api-iam-url"
39
+ type = local.parameter_type
40
+ tier = local.parameter_tier
41
+ value = var.records_iam_function_url
42
+ overwrite = true
43
+
44
+ description = "DynamoDB Client API URL, AWS_IAM auth (for server-to-server callers and operational scripts)"
20
45
 
21
46
  tags = {
22
47
  Environment = var.environment
@@ -16,10 +16,16 @@ variable "region" {
16
16
  }
17
17
 
18
18
  variable "records_function_url" {
19
- description = "Records Lambda Function URL"
19
+ description = "Records Lambda Function URL(NONE認証。ブラウザ・Admin UI向け)"
20
20
  type = string
21
21
  }
22
22
 
23
+ variable "records_iam_function_url" {
24
+ description = "Records Lambda の AWS_IAM認証Function URL(サーバー間呼び出し・運用スクリプト向け)。省略時はパラメータを作成しない"
25
+ type = string
26
+ default = null
27
+ }
28
+
23
29
  variable "records_function_arn" {
24
30
  description = "Records Lambda Function ARN"
25
31
  type = string