serverless frameworkというツールを使えば、LambdaにExpress(Node.js)のコードを簡単にデプロイできるよ!
・・という記事を書きます。
成果物がこちら👇
penpendayo/aws-node-express-api-project
Lamdaのデメリット
AWSのLambdaはめちゃくちゃ安いです。
100万リクエストまで無料な上に、通常時の価格も激安。
ですが、以下のようなデメリットがあります。
- 書き方がややこしい
- Gitで管理もできないので保守性が悪い
後述しているツールを使えば、これらのデメリットなしにLambdaを使えます。
serverless-express とは?
AWS Lambda上で、Expressを動かせるようにできるnpmパッケージです。
Express以外のフレームワークも動かせたり、AWS以外にもAzureのAzure Functionなどでも動かせたりするらしいです。
詳しい説明はGitHubを見て下さい。
serverless framework とは?
ローカルにあるコードをnpx serverless deploy
を実行するだけで、
- AWS Lambda関数を作って、
- ローカルのファイルを全部zipに圧縮して、
- zipをLambda関数にアップロードする
などを一気にバババーーーって実行できちゃうツール。
参考:Serverless Framework – Wikipedia
serverless-expressだけでも、LambdaにExpressをデプロイすることはできますが
以下の記事の内容などをぽちぽち手動で行う必要があります🤔
【10分AWSハンズオン】ExpressをAWS Lambda+API Gatewayにデプロイする – Qiita
このような手動作業を、serverless frameworkを使うことで簡略化できる!という感じです😀
使い方
インストール
npx serverless
を実行して「AWS – Node.js – Express API」を選択します。
これだけで、もう雛形が完成します!👇
デプロイ
たとえばプロジェクト名を「hoge」にしたとすると
cd hoge
して移動npx serverless deploy
を実行
とやるだけで、Lambda(+API Gateway)にデプロイできます!🎉
以下のようにAPI エンドポイントのURLを開くと、Expressでルーティングした値が出力されます。
デプロイしたリソースの削除
デプロイしたコードをAWSから全部削除したい場合、
npx serverless remove
で、きれいさっぱり全削除できます🗑️
デプロイされるリソース
デプロイされるのはLambdaだけではなく、以下も同時にデプロイされるようです。
- S3
- CloudFormation
- Cloudwatch
- IAM(ポリシー)
特に、Cloudwatchは10個を超えると課金対象ですし、S3も有料(少額ですが)なので注意です。
ちなみに設定によってはDynamoDBとかも自動で作れたりするらしいです。
いろいろな設定
基本的にserverless.yml
というファイルを変更するだけです。
TypeScript化
以下の記事をそのまま真似するだけでTypeScript化できます。しかもesbuildなのでトランスパイルも高速です。
TypeScript on esbuildに対応しよう|Serverless Frameworkで運用可能なサービスを構築する本
ただ、👆記事の筆者の方も言われていますが、esbuildは型チェックがされないので、以下のような感じでデプロイ前に必ず型チェックする・・・みたいにしたほうが良いと思います。
"scripts": { ... "type-check": "tsc --noEmit", "deploy": "npm run type-check && serverless deploy", ... },
Lamda関数URLを使う
Lambda自体は激安ですが、API Gatewayは100万アクセスあたり1ドルとかかかります(REST APIではなくHTTP APIの場合)。
ですが、1年くらい前に追加されたLambdaの関数URL機能を使えば、この料金も無料にできます。
特に認証などを必要としない、シンプルな処理の場合はこちらを使ったほうが良いと思います。
使い方は以下のようにurl: trueと書くだけです。
functions: hello: handler: handler.hello url: true
参考:新機能AWS Lambda Function URLsをServerlessFrameworkで対応😎メリットデメリットも語ります🚀 | Ragate ブログ
まとめ
ほかにもいろいろ便利な設定ができるみたいなのですが、とりあえず今回は以上です!
コメント