LoginSignup
5
4

More than 5 years have passed since last update.

[AWS×ServerlessFramework] AWSLambda(Node.js)をTypeScriptで書いてデプロイする

Posted at

はじめに

最近はAWSLambdaをデプロイするにあたって、ServerlessFrameworkやAWS SAMを利用することが多いと思います。
簡単なソースコードならコンソール画面からインラインで実装すればいいですが(Cloud9で書けるようになったので、かなり書きやすくなりましたね)、複数のLambdaを管理する必要がある場合は、フレームワーク等を利用することで管理コストを削減できます。個々のLambdaをZipに固めてアップロードするわけにもいきませんからね…

そんなときにJavaScriptで書いているソースコードをTypeScriptで書けたらいいのになーとか思っていると、「ServerlessFrameworkにもTypeScriptのプラグインありますよ」という情報を手に入れたので、本格導入する前に個人で試してみました。

ServerlessFrameworkのインストール

下記コマンドでインストールします

$ npm i -g serverless

プロジェクトの作成

TypeScriptで書いたソースコードでデプロイするためには、もちろんですがTypeScriptをJavaScriptにコンパイルしなければなりません。
そのために serverless-webpack というプラグインをインストールする必要があります。
本来であれば上記のプラグインをインストールしてWebpackの設定をしてなどしなくてはいけないのですが、ServerlessFrameworkがテンプレートを用意してくれています。

$ sls create -t aws-nodejs-typescript -p serverless-typescript

serverless-typescript というディレクトリにプロジェクトが用意されています。ディレクトリに移動してパッケージをインストールします。

$ cd serverless-typescript
$ npm i

内容の確認

デフォルトではAPIGateway経由でレスポンスを返すようになっています。

handler.ts
import { APIGatewayEvent, Callback, Context, Handler } from 'aws-lambda';

export const hello: Handler = (event: APIGatewayEvent, context: Context, cb: Callback) => {
  const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Go Serverless Webpack (Typescript) v1.0! Your function executed successfully!',
      input: event,
    }),
  };

  cb(null, response);
};
serverless.yml
service:
  name: serverless-typescript

# Add the serverless-webpack plugin
plugins:
  - serverless-webpack

provider:
  name: aws
  runtime: nodejs8.10

functions:
  hello:
    handler: index.hello
    events:
      - http:
          method: get
          path: hello

aws-lambda というパッケージの中に、Lambdaが受け取るEventの型宣言が書いてあります。
なので event の型宣言をLambdaのトリガーごとに書き換える必要があります。

デプロイ

デプロイするのは普段どおりです

$ sls deploy

(省略)

Service Information
service: serverless-typescript
stage: dev
region: us-east-1
stack: serverless-typescript-dev
api keys:
  None
endpoints:
  GET - https://xxxxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/hello
functions:
  hello: serverless-typescript-dev-hello

確認する

デプロイ時に確認できるAPIGatewayのエンドポイントにブラウザからアクセスすると、メッセージとAPIGatewayからLambdaに渡されている event の中身がJSON文字列として表示されます。

さいごに

こうして、AWSLambdaのNode.jsをTypeScriptで書くことができるようになりました。
やっぱりTypeScriptで書くことができるのっていいですねー(適当)
これから本格的に導入していこうと思います。これでLambdaライフがより一層快適なものになりますね!

ではまた!

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4