AWSの中の人から新しいサービスの紹介があり、
📣 新サービス #AWSAppRunner のローンチです!🚀
— Tori Hara 🚀 (@toricls) 2021年5月18日
\数クリックでソースコードやコンテナイメージをデプロイ!/
AWS Fargate より高い抽象度、あるいは AWS Lambda のようなスレッドではなくプロセスそのものを実行したかった方にぜひお試しいただきたいサービスです!1/nhttps://t.co/LPFNOP7CBT
試してみようと思ったらクラメソが早速まとめていたのでやってみます!
やりながら調べたことなど
AppRunner(アップランナー)
- ソースコード
- コンテナイメージ
のいずれかをAppRunnerに渡せば、コンテナのデプロイ、外部公開のためのロードバランサやNW、ドメイン、証明書の取得までをまるっとやってくれるサービスとのことです。
2021年5月時点ではVPCとの通信はできないとのことですが、必ずそのうちできるようになるでしょう。今後の開発スケジュールはこちら。
インフラエンジニアは本当に不要になってきていますね。まあLBやECSの整備をするだけのインフラエンジニアが必要なのか?ってところは疑問が持てますが
気になるところ
価格は?
コンテナインスタンスあたり$0.009 / GB-hour(東京)で、あとはCPUやメモリあたりの課金となります。加えてビルド時間や、通信料金なども発生するようです。
しかしLBがないのでその分コストカットできるのは大きいですね。
構成は?
App RunnerでデプロイしたインスタンスにHTTPアクセスをするとServerヘッダーにEnvoyがいるので、Envoy -> App Runner
になっているようです。Envoyが負荷分散やヘルスチェックを実現してるんですね。
またenv
を叩くとAWS_EXECUTION_ENV=AWS_ECS_FARGATE
と表示されるのでFargateで動作しているようです。またHOSTNAMEを見る限りどこかのVPCにいそうな名前ですね。
ECS_CONTAINER_METADATA_URI_V4=http://169.254.170.2/v4/xxxxx HOSTNAME=ip-10-0-32-34.ap-northeast-1.compute.internal AWS_DEFAULT_REGION=ap-northeast-1 PWD=/ HOME=/root ECS_CONTAINER_METADATA_URI=http://169.254.170.2/v3/xxxxxx AWS_EXECUTION_ENV=AWS_ECS_FARGATE AWS_REGION=ap-northeast-1 PORT=80 SHLVL=1 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/env OLDPWD=/opt
リソースはどんなもん?
- CPU: 1 or 2 vCPU
- Mem: 2 or 3 or 4 GB
- ディスク: 64MB
叩くとこんな感じです。
df -h Filesystem Size Used Avail Use% Mounted on tmpfs 64M 0 64M 0% /dev shm 1.1G 0 1.1G 0% /dev/shm tmpfs 1.1G 0 1.1G 0% /sys/fs/cgroup /dev/vdd 3.4G 3.3M 3.2G 1% /etc/hosts tmpfs 1.1G 0 1.1G 0% /sys/firmware tmpfs 1.1G 0 1.1G 0% /proc/scsi
複数コンテナを動作させられるのか?
KubernetesにおけるPodやECSにおけるタスクのように1つのAppRunnerに複数のコンテナを動かせるのか?というのは気になるところです。(サイドカーとかアンバサダーの用途)
いまの時点ではできないようです。今後もできるようになるのかはわからないですねー。
どの程度のスケーラビリティなのか?
AutoScalingのポリシーを自分で設定できます。App Runnerで起動する1コンテナのことをインスタンスと呼ぶようなのですが、インスタンスごとに受け付けられる同時リクエスト数を規定しそれを超える場合にインスタンス数を自身で制御できます。
どの程度の可用性なのか?
Fargateでは99.99%ですが、AppRunnerに関しては特に記載がありませんでした。ただEnvoyを除けばFargateで動いているので近い値になるのだと思います。
ログはどう管理されるのか?
- AppRunnerへのデプロイログ
- AppRunnerのイベントログ
- コンテナのログ
が確認できました。また全てCloudWatchLogsに転送されています。驚きなのはGUI上でコンテナログも検索できるところですね。またログのダウンロードもできます。
メトリクスは?
- リクエスト数
- 200/4xx/5xxのレスポンス数
- リクエストのレイテンシー
- インスタンス数
環境変数の管理はどうするのか?
環境変数はAPIおよびcopilotでは管理できるものの、今現在web consoleでは最初に設定はできるが更新ができないようです。
インスタンスのバージョンアップはどうするのか?
手動と自動があります。
- 手動:GUI / CLIでやる
- 自動:Dockerレジストリを監視して、イメージプッシュごとにサービスの新しいバージョンをデプロイ
今の時点で使えるDockerレジストリはECRのみです。
実際にNginxを起動しているAppRunnerのイメージをapacheに差し替えてみたところ、最初は失敗し自動でロールバックをしました。その間の通信は特に失敗しなかったのですね。大体9分ぐらいです。
05-20-2021 01:36 AM [AppRunner] Service status is set to RUNNING. 05-20-2021 01:36 AM [AppRunner] Service update failed. For details, see service logs. 05-20-2021 01:27 AM [AppRunner] Service status is set to OPERATION_IN_PROGRESS. 05-20-2021 01:27 AM [AppRunner] Service update started.
その後、16:38:31に別のApacheイメージに差し替えたところ3分後に新しいイメージにさし変わりました。(全く違うイメージを使ってるので多少データ転送に時間がかかっている可能性あり)
Wed May 19 16:41:35 UTC 2021 <title>Welcome to nginx!</title> Wed May 19 16:41:36 UTC 2021 <title>Welcome to nginx!</title> Wed May 19 16:41:38 UTC 2021 <title>Welcome to nginx!</title> Wed May 19 16:41:39 UTC 2021 <title>Apache2 Ubuntu Default Page: It works</title> Wed May 19 16:41:40 UTC 2021 <title>Welcome to nginx!</title> Wed May 19 16:41:41 UTC 2021 <title>Welcome to nginx!</title> Wed May 19 16:41:42 UTC 2021 <title>Apache2 Ubuntu Default Page: It works</title> Wed May 19 16:41:43 UTC 2021 <title>Apache2 Ubuntu Default Page: It works</title> Wed May 19 16:41:44 UTC 2021 <title>Apache2 Ubuntu Default Page: It works</title> Wed May 19 16:41:45 UTC 2021 <title>Apache2 Ubuntu Default Page: It works</title> Wed May 19 16:41:46 UTC 2021 <title>Apache2 Ubuntu Default Page: It works</title> Wed May 19 16:41:47 UTC 2021 <title>Apache2 Ubuntu Default Page: It works</title>
権限周り
- IAMのインスタンスロールを付与できる
- AWS KMSキーを使用できる
使い道
- Web/Appに特化している(スケールの単位がリクエストなところとかからわかる)ので、その辺りを動かすときに使う
- LBやドメインまで勝手に作るので、それ以外の用途でコンテナを動かしたい場合はECS/EKSが候補になる(GoogleのAppEngineにコンセプト近いなあ)