AWS App Runner を動かしてみたくてワークショップをやってみた
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再入門ブログリレー2022 AWS App Runner編 | DevelopersIO
- [レポート] クラウド上の最初のコンテナ #CON207 #reinvent | DevelopersIO
- [レポート][CON406] AWS Fargate と AWS App Runner の詳細を見てみよう #reinvent | DevelopersIO
- AWS App Runnerがそろそろ本番環境でも使い物になりそう - Speaker Deck
- AWS App Runner の VPC ネットワーキングに Dive Deep する | Amazon Web Services ブログ
- AWS App RunnerでAWS X-Rayを使った分散トレースをAWS CDKで構築してみる(App Runner + Aurora Serverless v2) | DevelopersIO
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 マネージドに寄せてしまえて良さそうな印象でした。