AWS App Runner を動かしてみたくてワークショップをやってみた

あ…ありのまま 今起こった事を話すぜ!「おれは App Runner を調べていると思ったらいつのまにか Web アプリがデプロイできていた」
2022.12.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS App Runner とはなにかを調べている途中で「手を動かした方がいいな」と思い立ち WorkShop をやってみました。

30分後には App Runner でアプリのデプロイが完了して Web アクセスができる状態だったのでササッとやってみるといいですよ。と伝えたかった記事になります。

AWS App Runner Workshop :: AWS App Runner Workshop

AWS App Runner とは

コンテナ化されたウェブアプリケーションや API を開発者が簡単かつ迅速にデプロイできるフルマネージド型サービスです。

引用: マネージド型のコンテナアプリケーションサービス - AWS App Runner - Amazon Web Services

調べていて気になったこと

自前で管理するリソースは GitHub 上のソースコードか、コンテナイメージだけです。実に手離れが良い。

画像引用: AWS re:Invent 2022 - Your first container in the cloud (CON207) - YouTube

App Runner の構成図です。ロードバランサーや、コンテナ実行基盤の管理・運用は App Runner が担ってくれます。

  • VPC の管理不要
    • VPC コネクタにより VPC 内のリソース RDS/Aurora などへ接続可能
  • ロードバランサーの管理不要
    • オートスケールはできる
  • Fargate の管理不要
  • CI/CD のパイプラインの管理不要

画像引用: AWS re:Invent 2022 - A close look at AWS Fargate and AWS App Runner (CON406) - YouTube

App Runner はマネージドサービスな分、設定できる項目が限られ自由に設定できない制限があります。仕様面ですと Fargate でいうところのタスク(アプリが起動するコンテナ)の最低スペックが少し大きかったり(1vCPU, 2GBメモリ)、サイドカーコンテナは起動できないといった制約もあります。(2022/12/26現在)

キャッチアップに役立ったリンク

WorkShop をはじめる前は比較的新しい記事を確認していました。

AWS App Runner WorkShop をやってみた

App Runner へアプリケーションコンテナをデプロイする方法が2種類あります。GitHub のレポジトリを連携する方法と、ビルド済みのコンテナをイメージを ECR へ保存しておく方法があります。ワークショップでは両方とも試せたのでやってみました。

AWS App Runner Workshop :: AWS App Runner Workshop

Hello World を返す Web アプリのサンプルコードは Express + Node.js 14 で提供されています。とりあえず動作するものが用意されているので App Runner にデプロイするハンズオンです。App Runner へデプロイがあまりにも簡単でとくに書き残すことがないです。

デプロイ方法は以下の動画でも確認できるのですが、見るとやってみるとでは簡単さの印象が違うと思うので是非実際にデプロイしてみてください。

App Runner は Graviton(Arm)非対応のため、M1 Mac で資料通りにコンテナイメージをビルドして ECR へプッシュするまでは良くてもデプロイでコケると思われるため補足を書き残しておきます。

GitHub からデプロイする

GitHub と連携をした後は App Runner の設定はレポジトリを指定するだけであとはデプロイまでできてしまいます。

デプロイ完了後に払い出された URL へアクセスしてみます。

ワークショップでは触れられていませんがカスタムドメインの設定はできます。

ECR からデプロイする

dockerではなくfinchを試験的に利用しています。finchについては以下の記事を参照ください。

イメージのビルド時に M1 Mac の場合はプラットフォームの指定(finch build --platform linux/amd64)をしましょう。App Runner はオリジナルの Fargate と異なり Graviton(Arm)はサポートされていません。

aws ecr get-login-password --region ap-northeast-1 | finch login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com

finch build --platform linux/amd64 -t simple-express-repository .

finch tag simple-express-repository:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/simple-express-repository:latest

finch push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/simple-express-repository:latest

finchコマンドでも問題なく ECR へプッシュできました。

ソースは ECR を指定することと、App Runner から ECR へアクセスするためのサービスロールがなければ新規作成することに注意してください。

この先は GitHub 連携パターンと同じです。デプロイ後にアクセスするとコンテナイメージ版もHello, World!を返してくれました。

$ curl https://miygmn4jib.ap-northeast-1.awsapprunner.com/
Hello, World!

おわりに

普段は業務で必要な勉強を優先してしまい新しめのサービスに使う機会がなく App Runner を使ったことがなかったので調べて触ってみました。インフラ周りで複雑なことを必要としないアプリケーションであれば、運用・管理を AWS マネージドに寄せてしまえて良さそうな印象でした。

参考