概要
TypeScriptでコンテナイメージとしてAWS Lambdaの実行環境を作成・デプロイする手順を記述する。
コンテナイメージはAWS ECRにデプロイする。
ディレクトリ構成
.
├── Dockerfile
├── README.md
├── package.json
├── src
│ └── index.ts
├── tsconfig.json
└── yarn.lock
TypeScriptプロジェクトの開始
初期化
npm init -y
package.jsonの編集
{
"name": "typescript_lambda_function",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"devDependencies": {
"@types/aws-lambda": "^8.10.114",
"@types/node": "^18.15.11",
"esbuild": "^0.17.16",
"typescript": "^5.0.4"
},
"scripts": {
"build": "esbuild src/index.ts --bundle --minify --sourcemap --platform=node --target=es2020 --outfile=dist/index.js"
}
}
TypeScriptでLambda関数のコンテナイメージを作成する際は以下のパッケージが必要
- @types/aws-lambda
- @types/node
- esbuild
- typescript
パッケージをインストール
yarn install
Dockerfileの作成
FROM public.ecr.aws/lambda/nodejs:16 as builder
WORKDIR /usr/app
COPY package.json ./
COPY src/* ./src/
RUN npm install -g yarn
RUN yarn install
RUN yarn build
FROM public.ecr.aws/lambda/nodejs:16
WORKDIR ${LAMBDA_TASK_ROOT}
COPY --from=builder /usr/app/dist/* ./
CMD ["index.handler"]
デプロイ
① ECRリポジトリを作成する
② リポジトリ作成後、「プッシュコマンドの表示」を押下し、表示されたコマンドを順に実行する
Apple Silicon (M1, M2)モデルのMacを使用している場合、
docker build
実行時に --platform linux/amd64
オプションをつける必要がある。
③ ECRリポジトリにコンテナイメージをプッシュした後、Lambda関数を作成する
関数の作成 > コンテナイメージ を選択し、前の手順で作成したECRイメージを選択する
アーキテクチャはx86_64
を選択
無事関数が作成されれば、デプロイ完了です♪
参考・関連記事