Serverless Framework を使って API を開発する時に、逐一デプロイしてデバッグすると時間がかってしょうがないので、ローカルでテストする方法を試してみました。
前提として、今回は Amazon Cognito をオーサーライザーとして使用し、Amazon DynamoDB を使用した構成を想定しています。
◾️依存関係のインストール
以下を実行して下さい。
$ npm install serverless-offline serverless-dynamodb --save-dev
◾️設定ファイルを修正
serverless.yml
に以下を追加します。
plugins:
- serverless-dynamodb
- serverless-offline // NOTE: 必ず「serverless-dynamodb」の後に読み込む
◾️ローカル環境の立ち上げ
$ sls offline --noAuth
を実行すると、http://localhost:3000 にローカル環境が立ち上がります。
アクセスするには、http://localhost:3000/<APIのエンドポイント>
にリクエストすると、レスポンスが返ってきます。
Postman 等でテストする時には、認証は無い方が便利なので、--noAuth
オプションを追加しています。
自分の場合は、フロントエンドの開発環境とポート番号が被るので、package.json
に以下のように追加しています。
"scripts": {
"start": "sls offline --httpPort 3001 --noAuth"
}
◾️備考
DynamoDB をローカルで使うのに、有名なプラグインに serverless-dynamodb-local があるのですが、試してみると Error getting DynamoDb local latest tar.gz location: 403
というエラーが出ました。
以下の issue を見ると、修正はマージされたそうですが npm モジュールが 2年以上リリースされていないとの事で、代替策として serverless-dynamodb をお勧めされていたのでそちらを使用しました。
https://github.com/99x/serverless-dynamodb-local/issues/294
◾️追記
後日試してみた所、HTTP API (API ゲートウェイ v2) の書き方でないと、TypeError: Cannot read properties of undefined (reading 'dynamodb')
のエラーが出ました。かなり時間を使ってしまったので、ご注意ください。
▽ HTTP API (API ゲートウェイ v2) と REST API (API ゲートウェイ v1)の違いについては以下をご参考ください。
https://www.serverless.com/framework/docs/providers/aws/events/http-api