@vitalets/live-debug
v1.0.1
Published
Live debug of Yandex cloud functions
Downloads
2
Readme
yc-serverless-live-debug
Local debug of Yandex Cloud Functions on Node.js.
How it works
Main components:
stub
- cloud function that proxies requests to local codestore
- cloud function that stores WebSocket connections info in YDB. This connection info is later used bystub
to know where to proxy requestclient
- CLI app running on local machine and handling requests coming by WebSocket
The schema was inspired by SST Live Lambda Dev
Setup
Install package:
npm i -D @vitalets/live-debug
Deploy cloud components:
npx live-debug deploy
Create live-debug.config.ts
(or live-debug.config.js
) in project root:
import { defineConfig } from '@vitalets/live-debug';
export default defineConfig({
handler: event => {
console.log('got request', event);
return {
statusCode: 200,
body: `Hello from local code!`,
};
}
});
Run live debug:
npx live-debug run
Expected output:
Reading config: /project/live-debug.config
Running local client...
WS connection opened
Local client connected
Check url: https://**********.apigw.yandexcloud.net
Waiting requests...
GET /?
Response sent
See example for more details.
Usage
On server all requests are handled by single stub
function.
You can setup routing for your needs in the config.
Debug single function
For single function you can just assign handler from your code:
import { defineConfig } from '@vitalets/live-debug';
import { handler } from './path/to/your/handler';
export default defineConfig({
handler
});
Debug several functions
To debug several functions simultaneously you can setup routing by url:
import { defineConfig } from '@vitalets/live-debug';
import { Handler } from '@yandex-cloud/function-types';
import { handlerA } from './path/to/your/handler-a';
import { handlerB } from './path/to/your/handler-b';
export default defineConfig({
handler: <Handler.Http>((event, ctx) => {
// @ts-expect-error url is not typed
const url = String(event.url);
if (url.startsWith('/handler-a')) return handlerA(event, ctx);
if (url.startsWith('/handler-b')) return handlerB(event, ctx);
return { statusCode: 200, body: 'No handler' };
})
});
Debug other triggers
You can debug other triggers: message queue, object storage, etc.
In cloud console configure needed trigger to point to stub
function.
import { defineConfig } from '@vitalets/live-debug';
import { Handler } from '@yandex-cloud/function-types';
export default defineConfig({
handler: <Handler.MessageQueue>(event => {
console.log(event.messages);
})
});