AWS Lambda: port to node 18 and aws sdk v3

This commit is contained in:
Brandon Liu
2022-11-21 11:56:15 +08:00
parent f3a5e0ab32
commit e86d9b7e04
3 changed files with 2448 additions and 12 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -10,6 +10,9 @@
"private": true, "private": true,
"scripts": { "scripts": {
"tsc": "tsc --noEmit --watch", "tsc": "tsc --noEmit --watch",
"build": "esbuild src/index.ts --target=es2020 --outfile=dist/index.js --format=cjs --bundle --platform=node --target=node16 --external:/var/runtime/node_modules/aws-sdk/clients/s3.js --banner:js=//$(git describe --always) && cd dist && zip lambda_function.zip index.js" "build": "esbuild src/index.ts --target=es2020 --outfile=dist/index.mjs --format=esm --bundle --platform=node --target=node18 --external:@aws-sdk/client-s3 --banner:js=//$(git describe --always) && cd dist && zip lambda_function.zip index.mjs"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.213.0"
} }
} }

View File

@@ -16,15 +16,10 @@ import {
import https from "https"; import https from "https";
import zlib from "zlib"; import zlib from "zlib";
// @ts-ignore import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3";
import s3client from "/var/runtime/node_modules/aws-sdk/clients/s3.js";
const keepAliveAgent = new https.Agent({ keepAlive: true, maxSockets: 1 });
// the region should default to the same one as the function // the region should default to the same one as the function
const s3 = new s3client({ const s3client = new S3Client({});
httpOptions: { agent: keepAliveAgent },
});
async function nativeDecompress( async function nativeDecompress(
buf: ArrayBuffer, buf: ArrayBuffer,
@@ -95,15 +90,17 @@ class S3Source implements Source {
} }
async getBytes(offset: number, length: number): Promise<RangeResponse> { async getBytes(offset: number, length: number): Promise<RangeResponse> {
const resp = await s3 const resp = await s3client.send(
.getObject({ new GetObjectCommand({
Bucket: process.env.BUCKET!, Bucket: process.env.BUCKET!,
Key: pmtiles_path(this.archive_name, process.env.PMTILES_PATH), Key: pmtiles_path(this.archive_name, process.env.PMTILES_PATH),
Range: "bytes=" + offset + "-" + (offset + length - 1), Range: "bytes=" + offset + "-" + (offset + length - 1),
}) })
.promise(); );
return { data: resp!.Body.buffer }; const arr = await resp.Body!.transformToByteArray();
return { data: arr.buffer };
} }
} }