Serverless + TypeScript + AWS Lambdaの開発環境構築
概要
Serverless FrameworkとはLambda関数などを開発・デプロイするためのツールです。今回はServerless + TypeScript + AWS Lamdbaのローカル開発環境の導入手順について書きます。
プロジェクトの作成
はじめにServerlessの環境構築をします。今回はAWS LamdbaのNode.jsを利用するため、templateはaws-nodejs
で作成します。pathのサービス名は適宜変更してください。
$ npx serverless create --template aws-nodejs --path my-service _______ __ | _ .-----.----.--.--.-----.----| .-----.-----.-----. | |___| -__| _| | | -__| _| | -__|__ --|__ --| |____ |_____|__| \___/|_____|__| |__|_____|_____|_____| | | | The Serverless Application Framework | | serverless.com, v1.36.0 -------'
ドキュメントにはnpm install -g serverless
と書かれていますが、npxを使用することをオススメします。
このときのserverlessのバージョンはv1.36.0
でした。
次にnpm packageを作成します。Serverlessのライブラリは必須ではないですが、CLIのバージョン固定するためにインストールしておきます。
$ cd my-service $ yarn init $ yarn add -D serverless
ローカル開発環境の構築
次にserverless-offline
のライブラリでローカル環境の構築を行います。
$ yarn add -D serverless-offline
serverless.yml
にserverless-offline
とテスト用にhelloを以下のように追記しておきます。
plugins: - serverless-offline functions: hello: handler: handler.hello events: - http: path: hello method: GET
起動して以下のログが出れば成功です。
$ yarn sls offline start Serverless: Offline listening on http://localhost:3000
package.jsonにスクリプトを追加しておくと便利ですね。
curlで叩いてみます。
$ curl http://localhost:3000/hello {"message":"Go Serverless v1.0! Your function executed successfully!",... }
上記のログが出れば設定完了です。
デプロイ
次にAWS Lambdaへデプロイします。serverless.yml
に以下を追記します。region、profile名を適宜変更してください。
provider: name: aws runtime: nodejs8.10 region: us-west-2 profile: my-service
AWSの認証キーは必要に応じて~/.aws/credentials
に追記します。
[my-service] aws_access_key_id = <your-key-here> aws_secret_access_key = <your-secret-key-here>
以下のコマンドでデプロイします。
$ yarn sls deploy
AWSコンソール上に表示されていれば完了です。
TypeScriptの設定
次にTypeScriptの設定を行います。設定はとてもシンプルです。
$ yarn add -D typescript serverless-plugin-typescript
offlineと同様に以下の記述を追記します。
plugins: - serverless-offline - serverless-plugin-typescript
handler.js
をhandler.ts
に変更し、以下のように書き換え、ローカルサーバが正常に立ち上がれば完了です。
export const hello = async (event, context) => ({ statusCode: 200, body: JSON.stringify({ message: 'Go Serverless v1.0! Your function executed successfully!', input: event, }), });
まとめ
まだ使い始めたばかりですが、Serverless FrameworkでAWS Lambdaの開発・テストがローカル環境で行うことができとても便利です、ぜひ試してみてください。