AWS の 新サービス AppRunner を今頃試してみる。

こんにちは k-jun です。AWS から提供されている新サービスの AppRunner を試してみようと思います。

2021/05AWS から提供が開始されたサービスです。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 に。

f:id:K-jun1221:20210921031417p:plain

あとは設定していて気づきましたが、これは 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 が出来ることもわかりましたし、いい感じですね。それでは今回はこのへんで。