mirror of
https://github.com/shishantbiswas/bknd.git
synced 2026-03-17 12:56:05 +00:00
added aws adapter docs
This commit is contained in:
107
docs/integration/aws.mdx
Normal file
107
docs/integration/aws.mdx
Normal file
@@ -0,0 +1,107 @@
|
||||
---
|
||||
title: 'AWS Lambda'
|
||||
description: 'Run bknd inside AWS Lambda'
|
||||
---
|
||||
import InstallBknd from '/snippets/install-bknd.mdx';
|
||||
|
||||
## Installation
|
||||
To get started with AWS Lambda and bknd you can either install the package manually and follow the descriptions below, or use the CLI starter:
|
||||
|
||||
<Tabs>
|
||||
<Tab title="CLI Starter">
|
||||
Create a new Bun CLI starter project by running the following command:
|
||||
|
||||
```sh
|
||||
npx bknd create -i aws
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="Manual">
|
||||
Create a new AWS Lambda project and then install bknd as a dependency:
|
||||
|
||||
<InstallBknd />
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Serve the API
|
||||
To serve the API, you can use the `serveLambda` function of the AWS Lambda adapter.
|
||||
|
||||
```tsx index.mjs
|
||||
import { serveLambda } from "bknd/adapter/aws";
|
||||
|
||||
export const handler = serveLambda({
|
||||
connection: {
|
||||
url: process.env.DB_URL!,
|
||||
authToken: process.env.DB_AUTH_TOKEN!
|
||||
}
|
||||
});
|
||||
```
|
||||
Although the runtime would support database as a file, we don't recommend it. You'd need to also bundle the native dependencies which increases the deployment size and cold start time.
|
||||
|
||||
## Serve the Admin UI
|
||||
Lambda functions should be as small as possible. Therefore, the static files for the admin panel should not be served from node_modules like with the Node adapter.
|
||||
|
||||
Instead, we recommend to copy the static files and bundle them with the lambda function. To copy the static files, you can use the `copy-assets` command:
|
||||
|
||||
```bash
|
||||
npx bknd copy-assets --out static
|
||||
```
|
||||
|
||||
This will copy the static files to the `static` directory and then serve them from there:
|
||||
|
||||
```tsx index.mjs {8-11}
|
||||
import { serveLambda } from "bknd/adapter/aws";
|
||||
|
||||
export const handler = serveLambda({
|
||||
connection: {
|
||||
url: process.env.DB_URL!,
|
||||
authToken: process.env.DB_AUTH_TOKEN!
|
||||
},
|
||||
assets: {
|
||||
mode: "local",
|
||||
root: "./static"
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
## Deployment
|
||||
To deploy a lambda function, you could follow these steps:
|
||||
|
||||
1. Create an IAM role with a trust policy that allows lambda to assume the role.
|
||||
2. Attach the `AWSLambdaBasicExecutionRole` policy to the role.
|
||||
3. Bundle the lambda function with the static files (e.g. using esbuild)
|
||||
4. Create a zip file with the bundled lambda function
|
||||
5. Create a lambda function
|
||||
6. Create a function URL for the lambda function & make it publicly accessible (optional)
|
||||
|
||||
Depending on your use case, you may want to skip step 6 and use the AWS API Gateway to serve the lambda function. Here is an [example deployment script](https://github.com/bknd-io/bknd/blob/main/examples/aws-lambda/deploy.sh) which creates the AWS resources described above, bundles the lambda function and uploads it.
|
||||
|
||||
|
||||
### Using the CLI starter
|
||||
The CLI starter example includes a basic build script that creates the required AWS resources, copies the static files, bundles the lambda function and uploads it. To deploy the lambda function, you can run:
|
||||
|
||||
```bash
|
||||
npm run deploy
|
||||
```
|
||||
|
||||
To make adjustments to the lambda function created (e.g. architecture, memory, timeout, etc.) you can edit the head section of the `deploy.sh` script.
|
||||
|
||||
```sh deploy.sh
|
||||
# cat deploy.sh | head -12
|
||||
FUNCTION_NAME="bknd-lambda"
|
||||
ROLE_NAME="bknd-lambda-execution-role"
|
||||
RUNTIME="nodejs22.x"
|
||||
HANDLER="index.handler"
|
||||
ARCHITECTURE="arm64" # or "x86_64"
|
||||
MEMORY="1024" # in MB, 128 is the minimum
|
||||
TIMEOUT="30"
|
||||
ENTRY_FILE="index.mjs"
|
||||
ZIP_FILE="lambda.zip"
|
||||
# ...
|
||||
```
|
||||
|
||||
To clean up AWS resources created by the deployment script, you can run:
|
||||
|
||||
```bash
|
||||
npm run clean
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user