AWS Lambda
AWS Lambda is a serverless compute platform by Amazon Web Services.
Pikku integrates with AWS Lambda using the Node.js 18+ runtime via the @pikku/lambda
package. It supports WebSockets, HTTP, and scheduled tasks.
There are multiple ways to deploy a Lambda function. If you prefer not to sign up for any services, OpenTofu / Terraform and AWS CDK are good options.
Alternatively, Serverless Framework can be used, though it requires an account.
This guide assumes you are using Serverless Framework due to its robust offline development experience, but the core principles apply to any deployment method.
Getting Started
1. Setup
To create a new Pikku project:
- npm
- Yarn
- pnpm
- Bun
npm create pikku@latest
npm create pikku@latest
# couldn't auto-convert command
npm create pikku@latest
# couldn't auto-convert command
bunx create-pikku@latest
2. Run Locally
Start a local development server:
- npm
- Yarn
- pnpm
- Bun
npm run start
yarn run start
pnpm run start
bun run start
This compiles the hello-world
example and runs a local server:
Server ready: http://localhost:3000 🚀
To verify, run:
curl -v localhost:3000/production/hello-world
Deploying with Serverless
Before deployment, update the serverless.yml
file to specify your organization:
org: your-org
Then deploy:
- npm
- Yarn
- pnpm
- Bun
npm run deploy
yarn deploy
pnpm run deploy
bun run deploy
Since Serverless Framework now requires authentication, you will be prompted to log in. Once authenticated, the deployment process will set up your stack and upload the code.
If successful, the output should resemble:
Deploying "my-app" to stage "production" (us-east-1)
✔ Service deployed to stack my-app-production (54s)
endpoint: ANY - https://<domain-name>.execute-api.us-east-1.amazonaws.com/production/{proxy+}
functions:
http: my-app-production-http (12 MB)
cron: my-app-production-cron (12 MB)
To verify the deployment, use the url prefix above, replace {proxy+}
with hello-world
and run via curl:
curl https://<domain name>.execute-api.us-east-1.amazonaws.com/production/hello-world
How Pikku Works with AWS Lambda
Pikku requires two key files for AWS Lambda integration:
1. Cold Start
loading...
This initializes singleton services and configurations the first time a function is invoked.
2. Entry Point
loading...
This file acts as the Lambda entry point and routes requests to the Pikku runtime.
HTTP API Options
Pikku provides three ways to handle HTTP requests:
1. corsHandler
The corsHandler
allows you to specify permitted origins.
2. corslessHTTP
The corslessHTTP
method disables CORS and directly forwards requests to Pikku.
3. anywhereHTTP
The anywhereHTTP
method dynamically sets the request origin as the CORS origin.
Use anywhereHTTP
with caution, as it permits requests from any domain. Only enable it if you understand the security implications.
Scheduled Tasks
To define a scheduled task:
import { ScheduledHandler } from 'aws-lambda'
export const myScheduledTask: ScheduledHandler = async () => {
const singletonServices = await coldStart()
await runScheduledTask({
name: 'myScheduledTask',
singletonServices,
})
}
Since this function is only triggered by AWS Lambda and does not rely on additional AWS-specific logic, no further configuration is needed.