AWS Lambda は、サーバーをプロビジョニングまたは管理せずにコードを実行できるサーバーレスコンピューティングサービスです。
このガイドでは、Dockerfile を使用して Bun HTTP サーバーを AWS Lambda にデプロイします。
NOTE
続行する前に、以下が準備されていることを確認してください。新しい Dockerfile を作成する
プロジェクトディレクトリにいることを確認し、プロジェクトのルートに新しい Dockerfile を作成します。このファイルには、コンテナの初期化、ローカルプロジェクトファイルのコピー、依存関係のインストール、アプリケーションの起動に関する指示が含まれています。
# Lambda ランタイムを処理するために公式の AWS Lambda アダプターイメージを使用
FROM public.ecr.aws/awsguru/aws-lambda-adapter:0.9.0 AS aws-lambda-adapter
# アプリケーションを実行するために公式の Bun イメージを使用
FROM oven/bun:debian AS bun_latest
# Lambda アダプターをコンテナにコピー
COPY --from=aws-lambda-adapter /lambda-adapter /opt/extensions/lambda-adapter
# ポートを 8080 に設定。これは AWS Lambda アダプターに必要です。
ENV PORT=8080
# 作業ディレクトリを `/var/task` に設定。これは Lambda のデフォルト作業ディレクトリです。
WORKDIR "/var/task"
# package.json と bun.lock をコンテナにコピー
COPY package.json bun.lock ./
# 依存関係をインストール
RUN bun install --production --frozen-lockfile
# アプリケーションの残りをコンテナにコピー
COPY . /var/task
# アプリケーションを実行
CMD ["bun", "index.ts"]NOTE
スタートコマンドがアプリケーションのエントリポイントに対応していることを確認してください。`package.json` にスタートスクリプトがある場合は、`CMD ["bun", "run", "start"]` にすることもできます。このイメージは依存関係をインストールし、コンテナ内で Bun を使用してアプリを実行します。アプリに依存関係がない場合は、RUN bun install --production --frozen-lockfile 行を省略できます。
プロジェクトのルートに新しい .dockerignore ファイルを作成します。このファイルには、node_modules など、コンテナイメージから 除外 する必要があるファイルとディレクトリが含まれています。これにより、ビルドが高速化され、サイズが小さくなります。
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# 除外するその他のファイルやディレクトリDocker イメージをビルドする
Dockerfile を含むディレクトリにいることを確認し、Docker イメージをビルドします。この例では、イメージを bun-lambda-demo と呼び、latest としてタグ付けします。
# cd /path/to/your/app
docker build --provenance=false --platform linux/amd64 -t bun-lambda-demo:latest .ECR リポジトリを作成する
イメージを AWS Lambda にプッシュするには、まず ECR リポジトリ を作成してイメージをプッシュする必要があります。
以下のコマンドを実行すると、以下のことを行います。
us-east-1リージョンにbun-lambda-demoという名前の ECR リポジトリを作成- リポジトリ URI を取得し、環境変数としてエクスポート。これはオプションですが、次のステップを容易にします。
export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --query 'repository.repositoryUri' --output text)
echo $ECR_URI[id].dkr.ecr.us-east-1.amazonaws.com/bun-lambda-demoNOTE
IAM Identity Center (SSO) を使用しているか、AWS CLI をプロファイルで設定している場合は、AWS CLI コマンドに `--profile` フラグを追加する必要があります。例えば、プロファイル名が my-sso-app の場合は、--profile my-sso-app を使用します。aws configure list-profiles で利用可能なプロファイルを確認できます。
export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --profile my-sso-app --query 'repository.repositoryUri' --output text)
echo $ECR_URIECR リポジトリで認証する
ECR リポジトリにログインします。
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_URILogin SucceededNOTE
プロファイルを使用する場合は、`--profile` フラグを使用します。aws ecr get-login-password --region us-east-1 --profile my-sso-app | docker login --username AWS --password-stdin $ECR_URIDocker イメージにタグを付けて ECR リポジトリにプッシュする
Dockerfile を含むディレクトリにいることを確認し、ECR リポジトリ URI で Docker イメージにタグを付けます。
docker tag bun-lambda-demo:latest ${ECR_URI}:latest次に、イメージを ECR リポジトリにプッシュします。
docker push ${ECR_URI}:latestAWS Lambda 関数を作成する
AWS コンソール > Lambda > 関数の作成 に移動し、コンテナイメージ を選択します。

関数に my-bun-function のような名前を付けます。
コンテナイメージを選択する
次に、コンテナイメージ URI セクションに移動し、イメージの参照 をクリックします。先ほど ECR リポジトリにプッシュしたイメージを選択します。

次に、latest イメージを選択し、イメージの選択 をクリックします。

関数を設定する
関数のパブリック URL を取得するには、追加の設定 > ネットワーキング > 関数 URL に移動します。
これを 有効 に設定し、認証タイプを NONE に設定します。

関数を作成する
ページの下部にある 関数の作成 をクリックすると、関数が作成されます。

関数 URL を取得する
関数が作成されると、関数のページにリダイレクトされ、「関数 URL」 セクションに関数 URL が表示されます。

関数をテストする
🥳 アプリが稼働しました!関数をテストするには、テスト タブに移動するか、関数 URL を直接呼び出します。
curl -X GET https://[your-function-id].lambda-url.us-east-1.on.aws/Hello from Bun on Lambda!