こんにちは、PR TIMESでバックエンド開発をしている宮崎(@sucalul)です。
先日、private-isuのベンチマーカーをLambdaで実行する仕組みを公開したので、そちらの紹介をします。
公開リポジトリ
使い方についてはGitHubのREADMEを参照してください。
背景
private-isuのベンチマーカーはREADMEにEC2を起動する方法が書いてありますが、Lambdaで立ち上げる方が比較的簡単であり、集計などの処理も必要だったためこちらのLambdaを実装しました。
こちらのLambdaについては、過去のイベントで使用しています。以下のブログにて一部実装の解説も書いているのでぜひご覧ください。
構成
チーム情報をスプレッドシートで管理し、競技者がcurlでLambda 関数 URL で作成したURLを叩くことでベンチマーカーを動かし、その結果をMackerelに送信します。
Lambda 関数 URL (Lambda function URLs)を使うことで、API Gatewayを用意せずに済みます。API Gateway は30秒でタイムアウト(2024年1月時点)になってしまう制限がありますが、Lambda 関数 URL は Lambda の タイムアウトの制限が適用されるため、最大15分(2024年1月時点)まで伸ばすことが可能という利点があります。
構成をまとめると以下のようになります。
この仕組みは、ある程度スコアの高いチームはLambdaのファイルディスクリプタが足りなくなり、ベンチマーカーが動かなくなってしまうという欠点もあるので、とりあえず手軽に動かしてみたいという方におすすめです。Lambdaではファイルディスクリプタを増やすことはできないので、そこまでいったら初心者脱却と思っていいかもしれません。
Lambdaのデプロイパッケージのサイズは、S3に上げた際の上限が250 MB (解凍後)(2024年1月時点)です。private-isuのuserdataをそのまま配置した際、250MBを超えてしまうので、ある程度画像を削除することで解決できます(使い方 2を参照)。
最後に
今回は、private-isuのベンチマーカーをLambdaで動かす仕組みを公開しました。private-isuを解く際に参考にしていただければと思います。
PR TIMESでは、普段はPHPを用いたアプリケーション開発や開発環境の改善を行なっていますが、サーバレスで開発する時はGoを用いてこのような開発をしています。
会社の雰囲気や技術スタックにご興味がある方は、ぜひ一度カジュアル面談に応募してくださると幸いです。