AWS AmplifyでLambda Functionを追加すると、JavaScriptで雛形が生成されるので、それをTypeScriptにする方法メモです。
下記ドキュメントを参考にしました。
手順
Functionを追加すると、下記のフォルダが生成されるので、その中で作業します。
amplify/backend/function/[function_name]
TypeScriptプログラム
tsフォルダを作成して、そこにTypeScriptで書かれたプログラムを置く。
mkdir ts touch ts/index.ts
tsconfig.json
tsconfig.jsonを作成する
{ "compilerOptions": { "allowSyntheticDefaultImports": true, "lib": [ "dom", "esnext" ], "module": "commonjs", "moduleResolution": "node", "skipLibCheck": true, "resolveJsonModule": true, "outDir": "./src", "baseUrl": "./", "rootDir": "./ts", "paths": { "src": [ "./ts" ] } } }
package.json
package.jsonを作成する(scriptsを抜粋)
{ "scripts": { "build": "tsc && cp package.json src/ && cd src && rm -f package-lock.json && npm install --production && npm prune --production && rm -f package.json && rm -f package-lock.json" } }
更新作業
ビルド
関数のフォルダで実行
npm run build
テスト
amplify mock function [function_name]
デプロイ
amplify push
補足説明
要は、srcフォルダにあるファイル・フォルダはLambdaにアップされるので、srcフォルダにDependenciesのモジュールのみをインストールしておきます。
ただ、srcフォルダにpackage.jsonがあると、mockやpushの際に、devDependenciesのモジュールもインストールされてしまうので、モジュールのインストールが終わったらpackage.jsonファイルは削除しておきます。
感想など
今までLambdaはServerless Frameworkを使って作成していたのですが、AWS Amplifyを使う時は、AWS Amplifyに寄せてしまおうと奮闘中です。