AWS の 新サービス AppRunner を今頃試してみる。
こんにちは k-jun です。AWS から提供されている新サービスの AppRunner を試してみようと思います。
2021/05 に AWS から提供が開始されたサービスです。GCP の Cloud Run を意識したような 名前をしています。
実態としては Container Image を指定するだけでアプリケーションのスケール・分散まで行ってくれる、まさに Container を指定すればあとはこっちで勝手にやっとくわ。なサービスです。 c5.large 料金的に比較してみます。
ap-northeast-1 | vCPU | RAM(GB) | vCPU per hour | RAM(GB) per hour | doller per hour | doller per month |
---|---|---|---|---|---|---|
c5.large | 2 | 4 | - | - | 0.107 | 77.04 |
apprunner | 2 | 4 | 0.081 | 0.009 | 0.198 | 142.56 |
ざっと ec2 と比較して 2倍位ですね。スケーリングすることを加味すると良さげにも見えますが、ec2 も結局オートスケール出来るので Deploy の手間賃が加算されているんでしょうね。
今回は簡単なアプリケーションを Rust で作成し、Github Actions で Build したものを ECR に Push。App Runner で設定しその後の Deploy を自動化するところまでやってみます。
まずはアプリケーションの作成から。面白そうな API があったのでこれを in-memory に保存するアプリにします。プロトコルは HTTPS/HTTP が対応しているようですね。
https://github.com/k-jun/advices-api
Actions も設定して、master に push したら ECR に image を push するようにしておきました。
ではでは AppRunner の設定に入ります。vCPU と Memory は 1 core と 2 GB に。in-memroy なのでスケーリングすると整合性が取れなくなりますが、そこらへんはご愛嬌です。 Auto Scaling もデフォルトのものを使用。Port は 3000 に。
あとは設定していて気づきましたが、これは Health Check は TCP ベースなんですね...。リソースがフルに使われでもしない限り TCP ヘルスチェックは引っかからないと思うので、それなりにスケーリングは遅そうです。後で HTTP ペースのものが追加されるんですかね。
$ curl https://d68fmvi2ky.ap-northeast-1.awsapprunner.com/ 0.1.0 $ curl -XPOST https://d68fmvi2ky.ap-northeast-1.awsapprunner.com/advices {"id":168,"advice":"Do a bit more for your friends."} $ curl -XPOST https://d68fmvi2ky.ap-northeast-1.awsapprunner.com/advices {"id":198,"advice":"Sing in the shower."} $ curl -XPOST https://d68fmvi2ky.ap-northeast-1.awsapprunner.com/advices {"id":57,"advice":"If you get stuck, try doing the opposite of what the solution requires."}
いい感じですね。Dockerfile の内容ですが、Rust の Multi Container Build を試してみたところ、AppRunner の log が "Service status is set to OPERATION_IN_PROGRESS." からさきに進まず 約一時間程度立った後に終了するという自体が発生したので Single Container Build にしました。本格的に使用する際にはもう少し確認してみます。
CI からの Deploy が出来ることもわかりましたし、いい感じですね。それでは今回はこのへんで。