@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.
- package/CHANGELOG.md +15 -0
- package/dist/server/handler.cjs +10855 -6862
- package/dist/server/handler.cjs.map +4 -4
- package/dist/server/media/magicBytes.d.ts +25 -0
- package/dist/server/media/magicBytes.d.ts.map +1 -0
- package/dist/server/media/magicBytes.js +53 -0
- package/dist/server/media/magicBytes.js.map +1 -0
- package/dist/server/media/media-handler.d.ts +13 -0
- package/dist/server/media/media-handler.d.ts.map +1 -0
- package/dist/server/media/media-handler.js +177 -0
- package/dist/server/media/media-handler.js.map +1 -0
- package/dist/server/media/metadata.d.ts +29 -0
- package/dist/server/media/metadata.d.ts.map +1 -0
- package/dist/server/media/metadata.js +57 -0
- package/dist/server/media/metadata.js.map +1 -0
- package/dist/server/media/presign.d.ts +9 -0
- package/dist/server/media/presign.d.ts.map +1 -0
- package/dist/server/media/presign.js +90 -0
- package/dist/server/media/presign.js.map +1 -0
- package/dist/server/media/process-handler-dlq.d.ts +3 -0
- package/dist/server/media/process-handler-dlq.d.ts.map +1 -0
- package/dist/server/media/process-handler-dlq.js +94 -0
- package/dist/server/media/process-handler-dlq.js.map +1 -0
- package/dist/server/media/process-handler.d.ts +12 -0
- package/dist/server/media/process-handler.d.ts.map +1 -0
- package/dist/server/media/process-handler.js +153 -0
- package/dist/server/media/process-handler.js.map +1 -0
- package/dist/server/media/sign.d.ts +11 -0
- package/dist/server/media/sign.d.ts.map +1 -0
- package/dist/server/media/sign.js +49 -0
- package/dist/server/media/sign.js.map +1 -0
- package/dist/server/media/ssmParams.d.ts +29 -0
- package/dist/server/media/ssmParams.d.ts.map +1 -0
- package/dist/server/media/ssmParams.js +74 -0
- package/dist/server/media/ssmParams.js.map +1 -0
- package/dist/server/media/types.d.ts +109 -0
- package/dist/server/media/types.d.ts.map +1 -0
- package/dist/server/media/types.js +2 -0
- package/dist/server/media/types.js.map +1 -0
- package/dist/server/media/upload-handler.d.ts +50 -0
- package/dist/server/media/upload-handler.d.ts.map +1 -0
- package/dist/server/media/upload-handler.js +115 -0
- package/dist/server/media/upload-handler.js.map +1 -0
- package/dist/server/media-handler.cjs +57474 -0
- package/dist/server/media-handler.cjs.map +7 -0
- package/dist/server/media-process-handler-dlq.cjs +48138 -0
- package/dist/server/media-process-handler-dlq.cjs.map +7 -0
- package/dist/server/media-process-handler.cjs +60680 -0
- package/dist/server/media-process-handler.cjs.map +7 -0
- package/dist/sharp-layer.zip +0 -0
- package/package.json +38 -3
- package/terraform/main.tf +3 -2
- package/terraform/media/README.md +67 -0
- package/terraform/media/main.tf +791 -0
- package/terraform/media/outputs.tf +66 -0
- package/terraform/media/variables.tf +117 -0
- package/terraform/modules/parameter-store/main.tf +26 -1
- 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
|
|
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
|