Emulate AWS λ and aws-sdk locally when developing your Serverless node.js project
- AWS WebSocket API + @aws-sdk/client-apigatewaymanagementapi
- Schedule
- server:
pnpm dev
, seeexamples/dev.ts
- client:
wscat -c "ws://127.0.0.1:9001/path?foo=1&foo=2"
- aws-sdk example:
node ./examples/index.mjs {connectionId}
define serverless function. similar with serverless.yml.
const websocket_connect: APIGatewayProxyHandler = async (event, context) => {
...
}
const websocket_disconnect: APIGatewayProxyHandler = async (event, context) => {
...
}
const definitions: FunctionDefinition[] = [
{
handler: websocket_connect,
events: [{ websocket: { route: "$connect" } }],
},
{
handler: websocket_disconnect,
events: [{ websocket: { route: "$disconnect" } }],
},
];
start serverless-standalone at localhost.
await StandAlone.start(definitions, {
http: 9000,
websocket: 9001,
api: 9002,
});
connect websocket. aws lambda handler are invoked.
wscat -c "ws://127.0.0.1:9001/path?username=me&password=pw"
use aws-sdk locally.
const client = new ApiGatewayManagementApiClient({
region: "ap-northeast-1",
endpoint: "http://127.0.0.1:9001/",
credentials: {
accessKeyId: "localAccessKeyId",
secretAccessKey: "localAecretAccessKey",
},
});
const output = await client.send(
new PostToConnectionCommand({
ConnectionId: connectionId,
Data: new TextEncoder().encode("hello"),
}),
);