@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
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exabugs/dynamodb-client",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "DynamoDB Single-Table Client SDK with MongoDB-like API, Shadow Records, and Lambda implementation for serverless applications",
|
|
5
5
|
"author": "exabugs",
|
|
6
6
|
"license": "MIT",
|
|
@@ -87,7 +87,36 @@
|
|
|
87
87
|
"import": "./dist/mcp/index.js",
|
|
88
88
|
"types": "./dist/mcp/index.d.ts"
|
|
89
89
|
},
|
|
90
|
-
"./
|
|
90
|
+
"./server/media/presign": {
|
|
91
|
+
"import": "./dist/server/media/presign.js",
|
|
92
|
+
"types": "./dist/server/media/presign.d.ts"
|
|
93
|
+
},
|
|
94
|
+
"./server/media/upload-handler": {
|
|
95
|
+
"import": "./dist/server/media/upload-handler.js",
|
|
96
|
+
"types": "./dist/server/media/upload-handler.d.ts"
|
|
97
|
+
},
|
|
98
|
+
"./server/media-process-handler": {
|
|
99
|
+
"import": "./dist/server/media-process-handler.cjs",
|
|
100
|
+
"types": "./dist/server/media/process-handler.d.ts"
|
|
101
|
+
},
|
|
102
|
+
"./server/media-process-handler-dlq": {
|
|
103
|
+
"import": "./dist/server/media-process-handler-dlq.cjs",
|
|
104
|
+
"types": "./dist/server/media/process-handler-dlq.d.ts"
|
|
105
|
+
},
|
|
106
|
+
"./server/media-handler": {
|
|
107
|
+
"import": "./dist/server/media-handler.cjs",
|
|
108
|
+
"types": "./dist/server/media/media-handler.d.ts"
|
|
109
|
+
},
|
|
110
|
+
"./server/media-sign": {
|
|
111
|
+
"import": "./dist/server/media/sign.js",
|
|
112
|
+
"types": "./dist/server/media/sign.d.ts"
|
|
113
|
+
},
|
|
114
|
+
"./types/media": {
|
|
115
|
+
"import": "./dist/server/media/types.js",
|
|
116
|
+
"types": "./dist/server/media/types.d.ts"
|
|
117
|
+
},
|
|
118
|
+
"./terraform": "./terraform/main.tf",
|
|
119
|
+
"./terraform/media": "./terraform/media/main.tf"
|
|
91
120
|
},
|
|
92
121
|
"peerDependencies": {
|
|
93
122
|
"react-admin": "^5.0.0"
|
|
@@ -99,9 +128,10 @@
|
|
|
99
128
|
},
|
|
100
129
|
"scripts": {
|
|
101
130
|
"prebuild": "npm run generate-types",
|
|
102
|
-
"build": "tsc && node esbuild.config.js",
|
|
131
|
+
"build": "tsc && node esbuild.config.js && npm run build:sharp-layer",
|
|
103
132
|
"build:client": "tsc",
|
|
104
133
|
"build:lambda": "node esbuild.config.js",
|
|
134
|
+
"build:sharp-layer": "bash scripts/build-sharp-layer.sh",
|
|
105
135
|
"clean": "rm -rf dist",
|
|
106
136
|
"lint": "eslint src --ext ts --max-warnings 0",
|
|
107
137
|
"format": "prettier --write .",
|
|
@@ -119,8 +149,12 @@
|
|
|
119
149
|
"dependencies": {
|
|
120
150
|
"@aws-crypto/sha256-js": "5.2.0",
|
|
121
151
|
"@aws-sdk/client-dynamodb": "3.946.0",
|
|
152
|
+
"@aws-sdk/client-s3": "3.946.0",
|
|
153
|
+
"@aws-sdk/client-ssm": "3.946.0",
|
|
154
|
+
"@aws-sdk/cloudfront-signer": "3.946.0",
|
|
122
155
|
"@aws-sdk/credential-provider-node": "3.946.0",
|
|
123
156
|
"@aws-sdk/lib-dynamodb": "3.946.0",
|
|
157
|
+
"@aws-sdk/s3-presigned-post": "3.946.0",
|
|
124
158
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
125
159
|
"@smithy/protocol-http": "5.3.5",
|
|
126
160
|
"@smithy/signature-v4": "5.3.5",
|
|
@@ -146,6 +180,7 @@
|
|
|
146
180
|
"orval": "^8.2.0",
|
|
147
181
|
"prettier": "^3.0.0",
|
|
148
182
|
"react-admin": "^5.0.0",
|
|
183
|
+
"sharp": "^0.35.5",
|
|
149
184
|
"tsx": "^4.21.0",
|
|
150
185
|
"typescript": "^5.3.0",
|
|
151
186
|
"vitest": "^2.0.0",
|
package/terraform/main.tf
CHANGED
|
@@ -211,8 +211,9 @@ module "parameter_store" {
|
|
|
211
211
|
region = var.region
|
|
212
212
|
|
|
213
213
|
# Records Lambda設定
|
|
214
|
-
records_function_url
|
|
215
|
-
|
|
214
|
+
records_function_url = aws_lambda_function_url.records.function_url
|
|
215
|
+
records_iam_function_url = aws_lambda_function_url.records_iam.function_url
|
|
216
|
+
records_function_arn = aws_lambda_function.records.arn
|
|
216
217
|
|
|
217
218
|
# Cognito設定
|
|
218
219
|
cognito_user_pool_id = var.cognito_user_pool_id
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# メディア機能 Terraformモジュール
|
|
2
|
+
|
|
3
|
+
ファイルアップロード・処理(EXIF除去・リサイズ)・配信機能をデプロイするTerraformモジュールです。
|
|
4
|
+
|
|
5
|
+
詳細設計: [../../docs/media-design.md](../../docs/media-design.md)
|
|
6
|
+
決定事項・トレードオフ: [../../docs/adr/0002-media-design.md](../../docs/adr/0002-media-design.md)
|
|
7
|
+
|
|
8
|
+
## 概要
|
|
9
|
+
|
|
10
|
+
このモジュールは、以下のリソースをデプロイします:
|
|
11
|
+
|
|
12
|
+
- S3バケット(raw/master/cache の3プレフィックス、完全非公開)
|
|
13
|
+
- sharp Lambda Layer(`scripts/build-sharp-layer.sh`で事前ビルドが必要)
|
|
14
|
+
- process-handler Lambda(S3 ObjectCreatedトリガー、EXIF除去・リサイズ・master配置)
|
|
15
|
+
- process-handler-dlq Lambda(SQS DLQトリガー、処理失敗時のfailedレコード書き込み)
|
|
16
|
+
- media-handler Lambda(CloudFront `/resize/*` 専用オリジン、オンデマンドリサイズ)
|
|
17
|
+
- CloudFront Distribution(`/master/*`はS3直接配信、`/resize/*`はmedia-handler経由、両方とも署名付きURL必須)
|
|
18
|
+
- CloudFront Public Key / Key Group(署名鍵は呼び出し側がSSM Parameter Storeに別途登録する)
|
|
19
|
+
|
|
20
|
+
**含まないもの**: presign/署名URL発行用のLambdaリソース。「誰にpresign/署名URLを発行してよいか」の認可判断はアプリごとに、かつ同一アプリ内でもクライアント(モバイル/管理画面等)ごとに異なるため、Terraformでは画一的なリソースとして定義できません。呼び出し側は次のいずれかの方法で自前にデプロイしてください:
|
|
21
|
+
|
|
22
|
+
- 既存のHTTP APIレイヤー(認証・権限チェック済み)から `../../src/server/media/presign.ts`・`sign.ts` を直接呼び出す
|
|
23
|
+
- 対応する既存HTTPレイヤーが無いクライアント向けには `../../src/server/media/upload-handler.ts` の `createUploadHandler()` を使い、専用の小さなLambdaとして自前でバンドル・デプロイする
|
|
24
|
+
|
|
25
|
+
## 前提条件
|
|
26
|
+
|
|
27
|
+
1. `npm run build`(`scripts/build-sharp-layer.sh`を含む。Dockerが必要)を実行し、`dist/`配下にLambda成果物を生成しておくこと
|
|
28
|
+
2. 署名鍵(RSA 2048bit)を生成し、公開鍵を`signing_public_key_param`で指定するSSM Parameterに登録しておくこと(秘密鍵は呼び出し側のpresign/署名URL発行処理が別途SSM経由で取得する)
|
|
29
|
+
3. image policy(`masterMaxDimension`・`allowedContentTypes`・`maxUploadSize`)のJSONを`image_policy_param`で指定するSSM Parameterに登録しておくこと
|
|
30
|
+
|
|
31
|
+
## 使用方法
|
|
32
|
+
|
|
33
|
+
```hcl
|
|
34
|
+
module "media" {
|
|
35
|
+
source = "github.com/exabugs/dynamodb-client//terraform/media"
|
|
36
|
+
|
|
37
|
+
project_name = "my-project"
|
|
38
|
+
environment = "dev"
|
|
39
|
+
region = "ap-northeast-1"
|
|
40
|
+
|
|
41
|
+
table_name = module.dynamodb.table_name
|
|
42
|
+
table_arn = module.dynamodb.table_arn
|
|
43
|
+
|
|
44
|
+
signing_public_key_param = "/my-project/dev/media/signing-public-key"
|
|
45
|
+
image_policy_param = "/my-project/dev/media/image-policy"
|
|
46
|
+
|
|
47
|
+
# カスタムドメイン使用時のみ(省略時はCloudFrontのデフォルトドメインを使う)
|
|
48
|
+
domain_name = "media.dev.example.com"
|
|
49
|
+
acm_certificate_arn = module.cloudfront.certificate_arn # us-east-1リージョンの証明書
|
|
50
|
+
route53_zone_id = var.route53_zone_id
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
`module.media`のoutput(`key_pair_id`・`base_url`)を、presign/署名URL発行を行う呼び出し側のLambdaへ変数として渡してください。
|
|
55
|
+
|
|
56
|
+
## 依存関係の向き
|
|
57
|
+
|
|
58
|
+
本モジュールは呼び出し側の既存CloudFront・テーブルARNに依存しません(片方向)。循環依存を避けるため、呼び出し側のLambdaが`module.media`のoutputに依存する向きで配線してください。
|
|
59
|
+
|
|
60
|
+
## 検証
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
terraform init -backend=false
|
|
64
|
+
terraform validate
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
実際の`terraform plan`/`apply`にはAWS認証情報とダミーでない変数値が必要です。
|