@exabugs/dynamodb-client 1.5.0 → 1.5.2
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 +17 -0
- package/dist/server/handler.cjs +204 -55
- package/dist/server/handler.cjs.map +3 -3
- package/dist/server/operations/find/idQuery.d.ts.map +1 -1
- package/dist/server/operations/find/idQuery.js +104 -1
- package/dist/server/operations/find/idQuery.js.map +1 -1
- package/dist/server/operations/find/shadowQuery.d.ts.map +1 -1
- package/dist/server/operations/find/shadowQuery.js +140 -30
- package/dist/server/operations/find/shadowQuery.js.map +1 -1
- package/dist/server/utils/authHandler.d.ts +40 -1
- package/dist/server/utils/authHandler.d.ts.map +1 -1
- package/dist/server/utils/authHandler.js +14 -33
- package/dist/server/utils/authHandler.js.map +1 -1
- package/package.json +1 -1
- package/terraform/main.tf +33 -0
- package/terraform/outputs.tf +10 -0
- package/terraform/variables.tf +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idQuery.d.ts","sourceRoot":"","sources":["../../../../src/server/operations/find/idQuery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"idQuery.d.ts","sourceRoot":"","sources":["../../../../src/server/operations/find/idQuery.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAgB,MAAM,YAAY,CAAC;AAQjF;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,oBAAoB,EACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,CAAC,CAwBrB"}
|
|
@@ -7,7 +7,7 @@ import { QueryCommand } from '@aws-sdk/lib-dynamodb';
|
|
|
7
7
|
import { createLogger } from '../../../shared/index.js';
|
|
8
8
|
import { CostTracker } from '../../utils/cost-tracker.js';
|
|
9
9
|
import { executeDynamoDBOperation, extractCleanRecord, getDBClient, getTableName, } from '../../utils/dynamodb.js';
|
|
10
|
-
import { decodeNextToken, encodeNextToken } from '../../utils/pagination.js';
|
|
10
|
+
import { decodeNextToken, decodeOffsetToken, encodeNextToken, encodeOffsetToken, } from '../../utils/pagination.js';
|
|
11
11
|
import { matchesAllFilters } from './utils.js';
|
|
12
12
|
const logger = createLogger({
|
|
13
13
|
service: 'id-query',
|
|
@@ -139,6 +139,14 @@ async function executeInQuery(resource, targetIds, sort, requestId) {
|
|
|
139
139
|
* @returns クエリ実行結果
|
|
140
140
|
*/
|
|
141
141
|
async function executeAllRecordsQuery(resource, sort, perPage, nextToken, parsedFilters, requestId) {
|
|
142
|
+
// id フィルタ($eq/$in)はこの関数に到達する前に別処理されているため、
|
|
143
|
+
// ここに残るフィルタは全て id 以外のフィールドに対するもの=KeyConditionExpression
|
|
144
|
+
// では絞り込めない。Limit 付き単発クエリでは「取得した1ページの中にだけ」
|
|
145
|
+
// フィルタが適用され、ページの外にある本来マッチすべきレコードが漏れてしまうため、
|
|
146
|
+
// フィルタが1件でもあれば全件フルスキャン(Limitなしループ取得)にフォールバックする。
|
|
147
|
+
if (parsedFilters.length > 0) {
|
|
148
|
+
return executeAllRecordsQueryFullScan(resource, sort, perPage, nextToken, parsedFilters, requestId);
|
|
149
|
+
}
|
|
142
150
|
const dbClient = getDBClient();
|
|
143
151
|
const tableName = getTableName();
|
|
144
152
|
const costTracker = new CostTracker();
|
|
@@ -206,4 +214,99 @@ async function executeAllRecordsQuery(resource, sort, perPage, nextToken, parsed
|
|
|
206
214
|
consumedCapacity: costTracker.getAggregated(),
|
|
207
215
|
};
|
|
208
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* 全レコードを取得する(IDソート・フルスキャン版)
|
|
219
|
+
*
|
|
220
|
+
* id 以外のフィールドに対するフィルタ(KeyConditionExpression では絞り込めない)
|
|
221
|
+
* がある場合のフォールバック経路。本体レコードを Limit なしで全件ループ取得し、
|
|
222
|
+
* メモリ内で全フィルタ条件を適用してからオフセットベースでページングする。
|
|
223
|
+
*
|
|
224
|
+
* @param resource - リソース名
|
|
225
|
+
* @param sort - ソート条件
|
|
226
|
+
* @param perPage - ページサイズ
|
|
227
|
+
* @param nextToken - 次ページトークン(オフセットベース)
|
|
228
|
+
* @param parsedFilters - 解析済みフィルター条件
|
|
229
|
+
* @param requestId - リクエストID
|
|
230
|
+
* @returns クエリ実行結果
|
|
231
|
+
*/
|
|
232
|
+
async function executeAllRecordsQueryFullScan(resource, sort, perPage, nextToken, parsedFilters, requestId) {
|
|
233
|
+
const dbClient = getDBClient();
|
|
234
|
+
const tableName = getTableName();
|
|
235
|
+
const costTracker = new CostTracker();
|
|
236
|
+
// nextToken からオフセットを復元(フルスキャン用オフセットトークン)
|
|
237
|
+
const offset = nextToken ? (decodeOffsetToken(nextToken) ?? 0) : 0;
|
|
238
|
+
logger.debug('Executing full scan query (ID sort)', {
|
|
239
|
+
requestId,
|
|
240
|
+
resource,
|
|
241
|
+
offset,
|
|
242
|
+
});
|
|
243
|
+
// 本体レコードを Limit なしで全件ループ取得
|
|
244
|
+
const allRecords = [];
|
|
245
|
+
let exclusiveStartKey;
|
|
246
|
+
let previousKeySignature;
|
|
247
|
+
// 安全装置: DynamoDBが同一のLastEvaluatedKeyを返し続ける異常系
|
|
248
|
+
// (テストモックの誤設定や予期しないレスポンス)で無限ループに陥り
|
|
249
|
+
// メモリを食い潰す(OOM)のを防ぐ
|
|
250
|
+
const MAX_ITERATIONS = 10000;
|
|
251
|
+
let iterations = 0;
|
|
252
|
+
do {
|
|
253
|
+
if (++iterations > MAX_ITERATIONS) {
|
|
254
|
+
logger.error('executeAllRecordsQueryFullScan: 最大反復回数を超過したため中断', {
|
|
255
|
+
requestId,
|
|
256
|
+
resource,
|
|
257
|
+
iterations,
|
|
258
|
+
});
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
const queryResult = await executeDynamoDBOperation(() => dbClient.send(new QueryCommand({
|
|
262
|
+
TableName: tableName,
|
|
263
|
+
KeyConditionExpression: 'PK = :pk AND begins_with(SK, :skPrefix)',
|
|
264
|
+
ExpressionAttributeValues: {
|
|
265
|
+
':pk': resource,
|
|
266
|
+
':skPrefix': 'id#',
|
|
267
|
+
},
|
|
268
|
+
ScanIndexForward: sort.order === 'ASC',
|
|
269
|
+
Limit: 1000, // 大きめの Limit でループ回数を最小化
|
|
270
|
+
ExclusiveStartKey: exclusiveStartKey,
|
|
271
|
+
ConsistentRead: true,
|
|
272
|
+
ReturnConsumedCapacity: 'TOTAL',
|
|
273
|
+
})), 'Query');
|
|
274
|
+
costTracker.add(queryResult.ConsumedCapacity);
|
|
275
|
+
allRecords.push(...(queryResult.Items || []));
|
|
276
|
+
const nextKey = queryResult.LastEvaluatedKey;
|
|
277
|
+
const nextKeySignature = nextKey ? `${nextKey.PK}#${nextKey.SK}` : undefined;
|
|
278
|
+
if (nextKeySignature && nextKeySignature === previousKeySignature) {
|
|
279
|
+
logger.error('executeAllRecordsQueryFullScan: 同一のLastEvaluatedKeyが返却されたため中断', {
|
|
280
|
+
requestId,
|
|
281
|
+
resource,
|
|
282
|
+
iterations,
|
|
283
|
+
});
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
previousKeySignature = nextKeySignature;
|
|
287
|
+
exclusiveStartKey = nextKey;
|
|
288
|
+
} while (exclusiveStartKey);
|
|
289
|
+
// クリーンなレコードに変換してフィルター適用
|
|
290
|
+
let items = allRecords.map((item) => extractCleanRecord(item));
|
|
291
|
+
items = items.filter((record) => matchesAllFilters(record, parsedFilters));
|
|
292
|
+
// 取得順が既に sort 順(begins_with('id#')のScanIndexForward)のため、追加ソートは不要
|
|
293
|
+
// オフセットでスライス
|
|
294
|
+
const page = items.slice(offset, offset + perPage);
|
|
295
|
+
const hasNextPage = offset + perPage < items.length;
|
|
296
|
+
const nextTokenValue = hasNextPage ? encodeOffsetToken(offset + perPage) : undefined;
|
|
297
|
+
logger.info('ID full scan query succeeded', {
|
|
298
|
+
requestId,
|
|
299
|
+
resource,
|
|
300
|
+
totalMatched: items.length,
|
|
301
|
+
offset,
|
|
302
|
+
returned: page.length,
|
|
303
|
+
hasNextPage,
|
|
304
|
+
});
|
|
305
|
+
return {
|
|
306
|
+
items: page,
|
|
307
|
+
pageInfo: { hasNextPage, hasPreviousPage: offset > 0 },
|
|
308
|
+
...(nextTokenValue && { nextToken: nextTokenValue }),
|
|
309
|
+
consumedCapacity: costTracker.getAggregated(),
|
|
310
|
+
};
|
|
311
|
+
}
|
|
209
312
|
//# sourceMappingURL=idQuery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idQuery.js","sourceRoot":"","sources":["../../../../src/server/operations/find/idQuery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,EACX,YAAY,GACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"idQuery.js","sourceRoot":"","sources":["../../../../src/server/operations/find/idQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadowQuery.d.ts","sourceRoot":"","sources":["../../../../src/server/operations/find/shadowQuery.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAmC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"shadowQuery.d.ts","sourceRoot":"","sources":["../../../../src/server/operations/find/shadowQuery.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAmC,MAAM,YAAY,CAAC;AAkBpG;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,oBAAoB,EACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,CAAC,CA0IrB"}
|
|
@@ -14,6 +14,15 @@ const logger = createLogger({
|
|
|
14
14
|
service: 'shadow-query',
|
|
15
15
|
level: process.env.LOG_LEVEL || 'info',
|
|
16
16
|
});
|
|
17
|
+
/**
|
|
18
|
+
* DynamoDBのKeyConditionExpressionで実際に絞り込める演算子
|
|
19
|
+
*
|
|
20
|
+
* buildKeyCondition()のswitch文で個別実装されている演算子のみ。
|
|
21
|
+
* これ以外($contains, $ends, $ne, $in, $nin, $exists, $regex等)は
|
|
22
|
+
* begins_with(SK, sortField#)による全件プレフィックスマッチにフォールバックし、
|
|
23
|
+
* DB側では一切絞り込まれない(メモリ内フィルタでのみ判定される)。
|
|
24
|
+
*/
|
|
25
|
+
const KEY_CONDITION_OPERATORS = new Set(['$eq', '$gt', '$gte', '$lt', '$lte', '$starts']);
|
|
17
26
|
/**
|
|
18
27
|
* シャドウレコードクエリを実行する
|
|
19
28
|
*
|
|
@@ -37,6 +46,21 @@ export async function executeShadowQuery(resource, normalizedParams, requestId)
|
|
|
37
46
|
}
|
|
38
47
|
// 通常戦略: ソートシャドウでページネーション取得
|
|
39
48
|
const optimizableFilter = findOptimizableFilter(sort.field, parsedFilters);
|
|
49
|
+
const isKeyConditionOptimized = optimizableFilter !== undefined && KEY_CONDITION_OPERATORS.has(optimizableFilter.parsed.operator);
|
|
50
|
+
// KeyConditionExpressionで絞り込めなかった残存フィルタ($contains等)
|
|
51
|
+
// これが1件でもあると、Limit付き単発クエリでは「取得したLimit件の中にだけ」
|
|
52
|
+
// フィルタが適用され、ページの外にある本来マッチすべきレコードが漏れてしまう。
|
|
53
|
+
// 正確性を優先し、全件フルスキャン(Limitなしループ取得)にフォールバックする。
|
|
54
|
+
const residualFilters = parsedFilters.filter((f) => !(isKeyConditionOptimized && f === optimizableFilter));
|
|
55
|
+
if (residualFilters.length > 0) {
|
|
56
|
+
logger.debug('Residual filters detected, falling back to full scan', {
|
|
57
|
+
requestId,
|
|
58
|
+
resource,
|
|
59
|
+
sortField: sort.field,
|
|
60
|
+
residualFilterFields: residualFilters.map((f) => f.parsed.field),
|
|
61
|
+
});
|
|
62
|
+
return executeFullScanQuery(resource, normalizedParams, costTracker, requestId);
|
|
63
|
+
}
|
|
40
64
|
logger.debug('Executing shadow query', {
|
|
41
65
|
requestId,
|
|
42
66
|
resource,
|
|
@@ -45,7 +69,7 @@ export async function executeShadowQuery(resource, normalizedParams, requestId)
|
|
|
45
69
|
hasFilters: parsedFilters.length > 0,
|
|
46
70
|
});
|
|
47
71
|
// シャドウクエリを実行
|
|
48
|
-
const shadowRecords = await executeShadowRecordQuery(resource, sort, perPage, nextToken, optimizableFilter, costTracker, requestId);
|
|
72
|
+
const shadowRecords = await executeShadowRecordQuery(resource, sort, perPage, nextToken, isKeyConditionOptimized ? optimizableFilter : undefined, costTracker, requestId);
|
|
49
73
|
// シャドウレコードから本体レコードのIDを抽出
|
|
50
74
|
const recordIds = extractRecordIds(shadowRecords.Items || []);
|
|
51
75
|
if (recordIds.length === 0) {
|
|
@@ -127,35 +151,7 @@ async function executeFilterFirstQuery(resource, normalizedParams, filterCandida
|
|
|
127
151
|
offset,
|
|
128
152
|
});
|
|
129
153
|
// フィルタシャドウインデックスから全件取得(Limit なし・全ページループ)
|
|
130
|
-
|
|
131
|
-
let lastKey;
|
|
132
|
-
do {
|
|
133
|
-
const result = await executeShadowRecordQuery(resource, filterSort, 1000, // 大きめの Limit でループ回数を最小化
|
|
134
|
-
lastKey
|
|
135
|
-
? encodeNextToken(lastKey.PK, lastKey.SK)
|
|
136
|
-
: undefined, filterCandidate, costTracker, requestId);
|
|
137
|
-
allShadowItems.push(...(result.Items || []));
|
|
138
|
-
lastKey = result.LastEvaluatedKey;
|
|
139
|
-
} while (lastKey);
|
|
140
|
-
// ID 抽出(重複除去)
|
|
141
|
-
const allIds = Array.from(new Set(extractRecordIds(allShadowItems)));
|
|
142
|
-
if (allIds.length === 0) {
|
|
143
|
-
return {
|
|
144
|
-
items: [],
|
|
145
|
-
pageInfo: { hasNextPage: false, hasPreviousPage: offset > 0 },
|
|
146
|
-
consumedCapacity: costTracker.getAggregated(),
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
// 本体レコードを一括取得
|
|
150
|
-
const mainRecords = await fetchMainRecords(resource, allIds, costTracker, requestId);
|
|
151
|
-
const recordMap = new Map(mainRecords.map((item) => {
|
|
152
|
-
const data = item.data;
|
|
153
|
-
return [data.id, extractCleanRecord(item)];
|
|
154
|
-
}));
|
|
155
|
-
// ID 順に並べ、残りフィルタ適用
|
|
156
|
-
let items = allIds
|
|
157
|
-
.map((id) => recordMap.get(id))
|
|
158
|
-
.filter((r) => r !== undefined);
|
|
154
|
+
let items = await fetchAllRecordsViaShadowIndex(resource, filterSort, filterCandidate, costTracker, requestId);
|
|
159
155
|
if (remainingFilters.length > 0) {
|
|
160
156
|
items = items.filter((r) => matchesAllFilters(r, remainingFilters));
|
|
161
157
|
}
|
|
@@ -182,6 +178,120 @@ async function executeFilterFirstQuery(resource, normalizedParams, filterCandida
|
|
|
182
178
|
consumedCapacity: costTracker.getAggregated(),
|
|
183
179
|
};
|
|
184
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* フルスキャンクエリを実行する(フィルタ候補なし、正確性優先のフォールバック経路)
|
|
183
|
+
*
|
|
184
|
+
* sort.field に対する残存フィルタが KeyConditionExpression で絞り込めない演算子
|
|
185
|
+
* ($contains, $ends, $ne, $in, $nin, $exists, $regex 等)の場合に使用する。
|
|
186
|
+
* Limit 付き単発クエリでは「取得した1ページの中にだけ」フィルタが適用され、
|
|
187
|
+
* ページの外にある本来マッチすべきレコードが漏れてしまうため、
|
|
188
|
+
* ソートシャドウインデックスを Limit なしで全件ループ取得し、
|
|
189
|
+
* メモリ内で全フィルタ条件を適用してからオフセットベースでページングする。
|
|
190
|
+
* filter-first と異なり cardinality ヒントは不要(効率よりも正確性を優先する経路)。
|
|
191
|
+
*
|
|
192
|
+
* ページネーションはオフセットベース(nextToken に offset を埋め込む)
|
|
193
|
+
*/
|
|
194
|
+
async function executeFullScanQuery(resource, normalizedParams, costTracker, requestId) {
|
|
195
|
+
const { sort, pagination, parsedFilters } = normalizedParams;
|
|
196
|
+
const { perPage, nextToken } = pagination;
|
|
197
|
+
// nextToken からオフセットを復元(フルスキャン用オフセットトークン)
|
|
198
|
+
const offset = nextToken ? (decodeOffsetToken(nextToken) ?? 0) : 0;
|
|
199
|
+
logger.debug('Executing full scan query', {
|
|
200
|
+
requestId,
|
|
201
|
+
resource,
|
|
202
|
+
sortField: sort.field,
|
|
203
|
+
offset,
|
|
204
|
+
});
|
|
205
|
+
// ソートシャドウインデックスから全件取得(Limit なし・全ページループ)
|
|
206
|
+
// 最適化フィルタなし(undefined)= begins_with(SK, `${sort.field}#`) で全件取得
|
|
207
|
+
let items = await fetchAllRecordsViaShadowIndex(resource, sort, undefined, costTracker, requestId);
|
|
208
|
+
if (parsedFilters.length > 0) {
|
|
209
|
+
items = items.filter((r) => matchesAllFilters(r, parsedFilters));
|
|
210
|
+
}
|
|
211
|
+
// 取得順が既に sort 順(シャドウインデックスの並び)のため、追加ソートは不要
|
|
212
|
+
// オフセットでスライス
|
|
213
|
+
const page = items.slice(offset, offset + perPage);
|
|
214
|
+
const hasNextPage = offset + perPage < items.length;
|
|
215
|
+
const nextTokenValue = hasNextPage ? encodeOffsetToken(offset + perPage) : undefined;
|
|
216
|
+
logger.info('Full scan query succeeded', {
|
|
217
|
+
requestId,
|
|
218
|
+
resource,
|
|
219
|
+
sortField: sort.field,
|
|
220
|
+
totalMatched: items.length,
|
|
221
|
+
offset,
|
|
222
|
+
returned: page.length,
|
|
223
|
+
hasNextPage,
|
|
224
|
+
});
|
|
225
|
+
return {
|
|
226
|
+
items: page,
|
|
227
|
+
pageInfo: { hasNextPage, hasPreviousPage: offset > 0 },
|
|
228
|
+
...(nextTokenValue && { nextToken: nextTokenValue }),
|
|
229
|
+
consumedCapacity: costTracker.getAggregated(),
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* ソートシャドウインデックスを Limit なしで全件ループ取得し、
|
|
234
|
+
* 対応する本体レコードを ID 順(重複除去済み)で返す
|
|
235
|
+
*
|
|
236
|
+
* filter-first / フルスキャンの両方で共有する処理
|
|
237
|
+
*
|
|
238
|
+
* @param resource - リソース名
|
|
239
|
+
* @param indexSort - シャドウインデックスの走査順(ソートフィールド)
|
|
240
|
+
* @param indexFilter - シャドウインデックスに適用する最適化フィルタ(undefinedなら全件プレフィックスマッチ)
|
|
241
|
+
* @param costTracker - コスト追跡インスタンス
|
|
242
|
+
* @param requestId - リクエストID
|
|
243
|
+
* @returns ID順に並んだ本体レコードの配列(重複除去済み)
|
|
244
|
+
*/
|
|
245
|
+
async function fetchAllRecordsViaShadowIndex(resource, indexSort, indexFilter, costTracker, requestId) {
|
|
246
|
+
const allShadowItems = [];
|
|
247
|
+
let lastKey;
|
|
248
|
+
let previousKeySignature;
|
|
249
|
+
// 安全装置: DynamoDBが同一のLastEvaluatedKeyを返し続ける異常系
|
|
250
|
+
// (テストモックの誤設定や予期しないレスポンス)で無限ループに陥り
|
|
251
|
+
// メモリを食い潰す(OOM)のを防ぐ
|
|
252
|
+
const MAX_ITERATIONS = 10000;
|
|
253
|
+
let iterations = 0;
|
|
254
|
+
do {
|
|
255
|
+
if (++iterations > MAX_ITERATIONS) {
|
|
256
|
+
logger.error('fetchAllRecordsViaShadowIndex: 最大反復回数を超過したため中断', {
|
|
257
|
+
requestId,
|
|
258
|
+
resource,
|
|
259
|
+
iterations,
|
|
260
|
+
});
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
const result = await executeShadowRecordQuery(resource, indexSort, 1000, // 大きめの Limit でループ回数を最小化
|
|
264
|
+
lastKey ? encodeNextToken(lastKey.PK, lastKey.SK) : undefined, indexFilter, costTracker, requestId);
|
|
265
|
+
allShadowItems.push(...(result.Items || []));
|
|
266
|
+
const nextKey = result.LastEvaluatedKey;
|
|
267
|
+
const nextKeySignature = nextKey ? `${nextKey.PK}#${nextKey.SK}` : undefined;
|
|
268
|
+
if (nextKeySignature && nextKeySignature === previousKeySignature) {
|
|
269
|
+
logger.error('fetchAllRecordsViaShadowIndex: 同一のLastEvaluatedKeyが返却されたため中断', {
|
|
270
|
+
requestId,
|
|
271
|
+
resource,
|
|
272
|
+
iterations,
|
|
273
|
+
});
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
previousKeySignature = nextKeySignature;
|
|
277
|
+
lastKey = nextKey;
|
|
278
|
+
} while (lastKey);
|
|
279
|
+
// ID 抽出(重複除去)
|
|
280
|
+
const allIds = Array.from(new Set(extractRecordIds(allShadowItems)));
|
|
281
|
+
if (allIds.length === 0) {
|
|
282
|
+
return [];
|
|
283
|
+
}
|
|
284
|
+
// 本体レコードを一括取得
|
|
285
|
+
const mainRecords = await fetchMainRecords(resource, allIds, costTracker, requestId);
|
|
286
|
+
const recordMap = new Map(mainRecords.map((item) => {
|
|
287
|
+
const data = item.data;
|
|
288
|
+
return [data.id, extractCleanRecord(item)];
|
|
289
|
+
}));
|
|
290
|
+
// ID 順に並べる
|
|
291
|
+
return allIds
|
|
292
|
+
.map((id) => recordMap.get(id))
|
|
293
|
+
.filter((r) => r !== undefined);
|
|
294
|
+
}
|
|
185
295
|
/**
|
|
186
296
|
* filter-first で使うフィルタ候補を選択する
|
|
187
297
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadowQuery.js","sourceRoot":"","sources":["../../../../src/server/operations/find/shadowQuery.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shadowQuery.js","sourceRoot":"","sources":["../../../../src/server/operations/find/shadowQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,46 @@
|
|
|
2
2
|
* 認証ハンドラー
|
|
3
3
|
*
|
|
4
4
|
* IAM認証とCognito JWT認証を処理する
|
|
5
|
+
*
|
|
6
|
+
* このLambdaは2本のFunction URLから呼ばれる:
|
|
7
|
+
* - NONE認証のURL(ブラウザ・Admin UI向け): Cognito JWTのみを受け付ける
|
|
8
|
+
* - AWS_IAM認証のURL(サーバー間呼び出し向け): AWSが署名検証済みのリクエストのみ到達する
|
|
9
|
+
*
|
|
10
|
+
* 旧実装はAuthorization/x-amz-date等のヘッダーの「見た目」でIAM認証とみなしていたが、
|
|
11
|
+
* これらはクライアントが自由に送れる値であり、NONE認証のURL上では一切検証されない
|
|
12
|
+
* (署名検証はAWS_IAM認証のURL上でAWS自身が行うものであり、NONEのURLには存在しない)。
|
|
13
|
+
* そのため誰でも `x-amz-date` 等のヘッダーを送るだけでIAM認証を騙り、全リソースへの
|
|
14
|
+
* 認証なしアクセスが可能になっていた。
|
|
15
|
+
*
|
|
16
|
+
* 修正後は `event.requestContext.authorizer.iam` の有無で判定する。この値はAWS_IAM認証の
|
|
17
|
+
* Function URLが実際に署名検証に成功した場合にのみAWS側が付与するものであり、
|
|
18
|
+
* クライアントが送るヘッダーからは偽装できない。
|
|
5
19
|
*/
|
|
6
20
|
import type { APIGatewayProxyEventV2 } from 'aws-lambda';
|
|
21
|
+
/**
|
|
22
|
+
* AWS_IAM認証のFunction URLがリクエストに付与するコンテキスト
|
|
23
|
+
* (AWS Lambda公式の型定義 APIGatewayEventRequestContextIAMAuthorizer と同じ形)
|
|
24
|
+
*/
|
|
25
|
+
interface IAMAuthorizerContext {
|
|
26
|
+
accessKey: string;
|
|
27
|
+
accountId: string;
|
|
28
|
+
callerId: string;
|
|
29
|
+
cognitoIdentity: null;
|
|
30
|
+
principalOrgId: string;
|
|
31
|
+
userArn: string;
|
|
32
|
+
userId: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* NONE/AWS_IAM両方のFunction URLから届き得るイベント
|
|
36
|
+
* (同一のLambdaコードが両方のURLから呼ばれるため、authorizerはオプショナル)
|
|
37
|
+
*/
|
|
38
|
+
type RecordsEvent = APIGatewayProxyEventV2 & {
|
|
39
|
+
requestContext: {
|
|
40
|
+
authorizer?: {
|
|
41
|
+
iam?: IAMAuthorizerContext;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
};
|
|
7
45
|
/**
|
|
8
46
|
* 認証を処理する
|
|
9
47
|
*
|
|
@@ -12,5 +50,6 @@ import type { APIGatewayProxyEventV2 } from 'aws-lambda';
|
|
|
12
50
|
* @returns 認証が成功した場合はvoid、失敗した場合は例外をスロー
|
|
13
51
|
* @throws {Error} 認証に失敗した場合
|
|
14
52
|
*/
|
|
15
|
-
export declare function handleAuthentication(event:
|
|
53
|
+
export declare function handleAuthentication(event: RecordsEvent, requestId: string): Promise<void>;
|
|
54
|
+
export {};
|
|
16
55
|
//# sourceMappingURL=authHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authHandler.d.ts","sourceRoot":"","sources":["../../../src/server/utils/authHandler.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"authHandler.d.ts","sourceRoot":"","sources":["../../../src/server/utils/authHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAazD;;;GAGG;AACH,UAAU,oBAAoB;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,KAAK,YAAY,GAAG,sBAAsB,GAAG;IAC3C,cAAc,EAAE;QACd,UAAU,CAAC,EAAE;YACX,GAAG,CAAC,EAAE,oBAAoB,CAAC;SAC5B,CAAC;KACH,CAAC;CACH,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -16,47 +16,28 @@ const logger = createLogger({
|
|
|
16
16
|
* @throws {Error} 認証に失敗した場合
|
|
17
17
|
*/
|
|
18
18
|
export async function handleAuthentication(event, requestId) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const hasAmzContentSha = event.headers['x-amz-content-sha256'] || event.headers['X-Amz-Content-Sha256'];
|
|
25
|
-
const hasAwsSigV4Auth = authHeader?.startsWith('AWS4-HMAC-SHA256');
|
|
26
|
-
// デバッグ: ヘッダーをログ出力
|
|
27
|
-
logger.debug('Authentication check', {
|
|
28
|
-
requestId,
|
|
29
|
-
hasAuthHeader: !!authHeader,
|
|
30
|
-
hasAmzDate: !!hasAmzDate,
|
|
31
|
-
hasAmzContentSha: !!hasAmzContentSha,
|
|
32
|
-
hasAwsSigV4Auth: !!hasAwsSigV4Auth,
|
|
33
|
-
authHeaderPrefix: authHeader?.substring(0, 20),
|
|
34
|
-
});
|
|
35
|
-
// IAM認証チェック(AWS SigV4署名の特徴的なヘッダーで判定)
|
|
36
|
-
// 以下のいずれかの条件を満たす場合、IAM認証とみなす:
|
|
37
|
-
// 1. AuthorizationヘッダーがAWS4-HMAC-SHA256で始まる
|
|
38
|
-
// 2. x-amz-dateとx-amz-content-sha256の両方が存在する
|
|
39
|
-
const isIAMAuth = hasAwsSigV4Auth || !!(hasAmzDate && hasAmzContentSha);
|
|
40
|
-
if (isIAMAuth) {
|
|
41
|
-
await handleIAMAuthentication(event, requestId);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
await handleCognitoAuthentication(authHeader, requestId);
|
|
19
|
+
const iam = event.requestContext.authorizer?.iam;
|
|
20
|
+
if (iam) {
|
|
21
|
+
// AWS_IAM認証のFunction URL経由。AWSが署名検証済みであり、この値はクライアントから偽装できない
|
|
22
|
+
handleIAMAuthentication(iam, requestId);
|
|
23
|
+
return;
|
|
45
24
|
}
|
|
25
|
+
// NONE認証のFunction URL経由。Cognito JWTのみを受け付ける
|
|
26
|
+
const authHeader = event.headers.authorization || event.headers.Authorization;
|
|
27
|
+
await handleCognitoAuthentication(authHeader, requestId);
|
|
46
28
|
}
|
|
47
29
|
/**
|
|
48
|
-
* IAM
|
|
30
|
+
* IAM認証済みリクエストを処理する
|
|
49
31
|
*
|
|
50
|
-
* @param
|
|
32
|
+
* @param iam - AWSが検証済みのIAM認証コンテキスト(偽装不可)
|
|
51
33
|
* @param requestId - リクエストID
|
|
52
34
|
*/
|
|
53
|
-
|
|
54
|
-
// IAM認証(スクリプトからのアクセス)
|
|
55
|
-
// Lambda Function URLがNONEの場合、署名検証は行われないため、
|
|
56
|
-
// ここではIAM認証として扱うが、実際の検証はAWS側で行われる
|
|
35
|
+
function handleIAMAuthentication(iam, requestId) {
|
|
57
36
|
logger.info('IAM authenticated request', {
|
|
58
37
|
requestId,
|
|
59
|
-
|
|
38
|
+
userArn: iam.userArn,
|
|
39
|
+
accountId: iam.accountId,
|
|
40
|
+
callerId: iam.callerId,
|
|
60
41
|
});
|
|
61
42
|
}
|
|
62
43
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authHandler.js","sourceRoot":"","sources":["../../../src/server/utils/authHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"authHandler.js","sourceRoot":"","sources":["../../../src/server/utils/authHandler.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,GAAG,YAAY,CAAC;IAC1B,OAAO,EAAE,cAAc;IACvB,KAAK,EAAG,OAAO,CAAC,GAAG,CAAC,SAAiD,IAAI,MAAM;CAChF,CAAC,CAAC;AA4BH;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAmB,EACnB,SAAiB;IAEjB,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC;IAEjD,IAAI,GAAG,EAAE,CAAC;QACR,4DAA4D;QAC5D,uBAAuB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,4CAA4C;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;IAC9E,MAAM,2BAA2B,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAAC,GAAyB,EAAE,SAAiB;IAC3E,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;QACvC,SAAS;QACT,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,2BAA2B,CACxC,UAA8B,EAC9B,SAAiB;IAEjB,6BAA6B;IAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,QAAQ;IAExD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAE5E,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;QACnC,SAAS;QACT,GAAG,EAAE,UAAU,CAAC,GAAG;QACnB,KAAK,EAAE,UAAU,CAAC,KAAK;KACxB,CAAC,CAAC;IAEH,kBAAkB;IAClB,uCAAuC;AACzC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exabugs/dynamodb-client",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.2",
|
|
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",
|
package/terraform/main.tf
CHANGED
|
@@ -116,6 +116,7 @@ resource "aws_lambda_function" "records" {
|
|
|
116
116
|
REGION = var.region
|
|
117
117
|
TABLE_NAME = var.dynamodb_table_name
|
|
118
118
|
COGNITO_USER_POOL_ID = var.cognito_user_pool_id
|
|
119
|
+
COGNITO_CLIENT_ID = var.cognito_client_id
|
|
119
120
|
LOG_LEVEL = var.log_level
|
|
120
121
|
# シャドウ設定(環境変数ベース)
|
|
121
122
|
SHADOW_CREATED_AT_FIELD = var.shadow_created_at_field
|
|
@@ -168,6 +169,38 @@ resource "aws_lambda_permission" "function_url" {
|
|
|
168
169
|
principal = "*"
|
|
169
170
|
function_url_auth_type = "NONE"
|
|
170
171
|
}
|
|
172
|
+
|
|
173
|
+
# サーバー間(Lambda-to-Lambda)呼び出し専用のエイリアス
|
|
174
|
+
# NONE認証のFunction URL(上記)とは別に、AWS_IAM認証のFunction URLをこのエイリアス経由で公開する。
|
|
175
|
+
# 同一のLambda関数コード($LATEST)を指すが、Function URLは修飾子(エイリアス)ごとに1本しか
|
|
176
|
+
# 設定できないため、2本目のURLを持つにはエイリアスが必要。
|
|
177
|
+
resource "aws_lambda_alias" "iam" {
|
|
178
|
+
name = "iam"
|
|
179
|
+
description = "サーバー間呼び出し用(AWS_IAM認証のFunction URL向け)"
|
|
180
|
+
function_name = aws_lambda_function.records.function_name
|
|
181
|
+
function_version = "$LATEST"
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
# AWS_IAM認証のLambda Function URL
|
|
185
|
+
# サーバー間呼び出し元(モバイルBFF・weather Lambda・運用スクリプト等)はこちらを使う。
|
|
186
|
+
# NONE認証URLと異なり、呼び出し元のIAMロールにlambda:InvokeFunctionUrl権限が必要で、
|
|
187
|
+
# AWSが実際にSigV4署名を検証する(NONE側のような「なんちゃってIAM認証」ではない)。
|
|
188
|
+
resource "aws_lambda_function_url" "records_iam" {
|
|
189
|
+
function_name = aws_lambda_function.records.function_name
|
|
190
|
+
qualifier = aws_lambda_alias.iam.name
|
|
191
|
+
authorization_type = "AWS_IAM"
|
|
192
|
+
|
|
193
|
+
cors {
|
|
194
|
+
allow_origins = ["*"]
|
|
195
|
+
allow_methods = ["GET", "POST", "PUT", "DELETE"]
|
|
196
|
+
allow_headers = ["content-type", "authorization", "x-amz-date", "x-api-key", "x-amz-security-token"]
|
|
197
|
+
expose_headers = ["content-type", "x-amzn-requestid"]
|
|
198
|
+
allow_credentials = false
|
|
199
|
+
max_age = 86400 # 24時間
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
depends_on = [aws_lambda_alias.iam]
|
|
203
|
+
}
|
|
171
204
|
# Parameter Store モジュール
|
|
172
205
|
module "parameter_store" {
|
|
173
206
|
source = "./modules/parameter-store"
|