はじめに
TypeScriptをlambdaにデプロイする方はServerless FreamworkやSAMなどがあります。
しかし、installや設定などの事前準備が必要で、手軽ではありません。
そこで今回は簡単にデプロイして動作確認するために、zip化してデプロイする手順を記載していきます。
事前準備
typescriptのインストール
npm install -g typescript
AWS CLI
lambda関数の作成
あらかじめ、AWSコンソールやcliでlambda関数を作成しておきます。
プロジェクトの作成
下記の構成でファイルを作成していきます。
├─ src
│ └─ index.ts # TypeScriptソース
├─ package.json # パッケージ設定ファイル
├─ tsconfig.json # TypeScript設定ファイル
├─ deploy.sh # lambdaにデプロイするためのスクリプト
src/index.ts
TypeScriptソースです。
今回はnode_modules
を含めているため、動作確認としてmoment
を読み込んでいます。
src/index.ts
import moment from 'moment';
export async function handler(event: any): Promise<any> {
return {
statusCode: 200,
body: {
message: 'typescript test',
timestamp: moment().format()
}
}
}
package.json
パッケージ設定ファイル
package.json
{
"name": "typescript-lambda",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"@types/moment": "^2.13.0",
"moment": "^2.24.0"
}
}
tsconfig.json
TypeScript設定ファイル
tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true
},
"include": [
"./src/**/*"
]
}
deploy.sh
ビルド、zip化、アップロードをするスクリプトです。
deploy.sh
#!/bin/sh
# distフォルダ
rm -rf ./dist
# TypeScriptビルド
tsc -p tsconfig.json
# package.jsonをdistにコピー
cp -f ./package.json ./yarn.lock ./dist
cd dist
# packageのインストール
yarn install --production
# uploadするためにzip化
zip -r ./lambda.zip ./
# zipデータをlambdaにアップロード
aws lambda update-function-code \
--function-name typescript-lambda \
--zip-file fileb://lambda.zip
実行
$ yarn install
$ ./deploy.sh
確認
AWSコンソールでテスト実行して、想定通りのレスポンスが返ってくることを確認