こちらはPerl Advent Calendar 2021の21日目の記事になります。
昨日は nanto_viさんによる
でした。
さて、今年も軽い気持ちでPerl Advent Calendarに投稿してみようと思ったのですが、
今年は年末進行の深遠なる理由によりネタの仕込みが間に合わなかったため、
昨年のPerlでGitHub webhookを受けるbotを作ってみた話をAWS Lambda + API Gatewayで動作するように手直ししてみましたので、今更のネタですが、軽い紹介とさせてください。。
なぜ今頃これを試したのか?
某所で例のGitHub Webhookを受けるbotを運用しているのですが、
これまではわざわざ専用のホストを用意するまでもないような、ちょっとしたアプリケーション群をコンテナで上げていたのですが、今回事情によりそのホストを縮退することになりました。
わざわざサーバを立てるほどのものでもないし、費用面だけでなくサーバの管理コストも極力省力化したいという事になり、AWS Lambdaでサーバレスで省エネ化出来たら良さそうということで、締め切りに追われて試してみました。
やったこと
を拝見しまして、 https://github.com/shogo82148/p5-aws-lambda の psgiのサンプルをまるっと流用させていただきました。
元々たいしたことをしていないアプリケーションということもありますが、
diffにして見るとわずか数行程度の変更で、
AWS Lambdaのサーバレス化が組み込めてしまいました
ハマった事
そもそもこれまでなかなか機会がなく、AWS Lambda + API Gatewayを触るのが初めてだった事もあって概念や用語などを把握するのに苦労しました。。
特にAPI Gatewayの方は最初参考にした記事が REST API
のものだったため、「URL パスパラメータ」や「マッピングテンプレート」「ステージ変数」あたりの概念がなかなか理解できず、任意のパス(/*/payload
)にルーティングさせる方法が分からずハマりました。。
(その後API タイプを HTTP API
で作り直してみたら何事もなく動作してくれましたがw)
やってみての感想
実際に触ってみて思ったのは、(3年遅れの反応ですが)Lambdaで動かす事によって過去のPerlアプリケーション・CGIなども十分にサーバレス化できそうになったのは改めてすごい事だなぁと…
特に、
こういった例を見ると、いにしえのCGI技術がこれからもサーバレスで生き続ける事が出来るというのは胸が熱くなりますねぇ…
…という事で内容は薄かったですが、とてもいい勉強になったのでこれから他にもPerlをLambdaに乗っけて遊んでみようと考えています。
明日は、papixさんによる
です!お楽しみに!