Serverless Frameworkやっていき
Serverless Framework普段使ってるけど、 https://www.serverless.com で用意されているコンソール周り使ったことないので、触ってみる。
うまく使うとロギングとか監視とかNoConfigで色々できるかもなので、ザクッとものを作りたいときに、運用面での負荷とかを減らせそう。
Serverless Frameworkもっと流行ってほしいので書き起こそう。
前提:
- awscliが使えること
- Node.js 16系
- serverless コマンドが使えること
「create app」をクリック
何でもいいけど「node Express.js API」を選択。
API-GatewayとLambdaのREST-API環境のテンプレートを展開してくれる。
個別自分で用意したServerlessFrameworkプロジェクトも追加することができそう。
適当に名前つけてcreateすると、コマンドを使ってaws上にリソースをデプロイするコマンドが提示されるのでCLIで実行。
↓こんな感じ
serverless \
--org=[~~~] \
--app=aws-node-express-api \
--name=aws-node-express-api \
--template=aws-node-express-api
一回こんなエラーが出た。
Error:
Error: The provided access key is not authorized for this operation. - Please contact support and provide this identifier to reference this issue - QXG3N94D58V2
解決法:
ログインがなんかうまくいってないようだったので serverless login
で解消した。
リソースをデプロイするかを聞かれ「Y」を入力するとAWSへのデプロイまで行い、APIが作成される。
以下みたいなログが出ればok
Creating a new serverless project
✔ Project successfully created in aws-node-express-api folder
✔ Your project has been setup with org "~~~~~~" and app "aws-node-express-api"
? Do you want to deploy your project? Yes
Deploying aws-node-express-api to stage dev (us-east-1)
✔ Service deployed to stack aws-node-express-api-dev (152s)
dashboard: https://app.serverless.com/~~~~~/apps/aws-node-express-api/aws-node-express-api/dev/us-east-1
endpoint: ANY - https://~~~~~~~~~~.execute-api.us-east-1.amazonaws.com
functions:
api: aws-node-express-api-dev-api (975 kB)
What next?
Run these commands in the project directory:
serverless deploy Deploy changes
serverless info View deployed endpoints and resources
serverless invoke Invoke deployed functions
serverless --help Discover more commands
endpointのURLにアクセスすると {"message": "Hello from root!"}
のJSONが返ってくる。
dashboardのURLに行くとダッシュボードが用意されていて、アクセス状況が確認できる。
↓こんな感じ
細かい統計情報が取れたり
アラートとかも挙げられるのかな?
アラートが気になるので使えるかやってみる。
handler.jsに以下のエラーになるendpointを追加。
app.get("/error", (req, res, next) => {
throw new Error("Got some Error!");
});
serverless deploy
で修正を反映できる
エラーにはなってるっぽいけど、特にアラートに上がらないな…timeoutとかだとうまく通知されるのかな。
LambdaのFunctionInvokeErrorとして認識出来てない感じ
どうもAPI-Gatewayとの組み合わせでちゃんと設定しないとErrorをラップしたような感じになってるっぽい。
別のServerlessFrameworkプロジェクト「node starter」でエラーを起こしたところ、ちゃんとエラーとして計算された。
が、alertのところはそれをしても反応がなかった…
そんなに変なことしてない気がするので、何か別の用途なのかな…
エラー監視的なものは結構選択肢があるかも。
AWSで完結するといい感じだが、もうちょっと見てみよう
Serverless Plugin AWS Alerts は簡単に導入出来て、ミニマム監視に使うのは良さそう
やってみる
やっぱりexpressでラップしてると検知できないっぽいなー
カスタム難しそうだし諦めたほうがいいかも