先月(2021.5)にawsで新たに利用できるようになった App Runner 。 「スケーラブルで安全なウェブアプリケーションをコードから数分で作成」って謳っているのでそれはすごい、試してみよう、と思ったやってみたの記事。
App Runder とは?
AWSの説明文によると、「インフラストラクチャサービスを構成および管理することなく、既存のコードまたはコンテナのリポジトリをポイントするだけで、アプリケーションをクラウド内で実行および拡張できるようにしました」と書いてあります。
要はAPIが動くコンテナ、もしくはデプロイすればAPIが動く(Git)リポジトリがあれば、後はAWSの方で、色々な事(デプロイ環境、ネットワーク、実行ホスト、ドメイン等)をよしなに準備してAPIが利用可能状態に構築してあげます。また、APIが利用増になってリソースが圧迫してきた際は自動でAutoScaleしてあげます。というサービスらしいです。すごいですね。
サンプルなAPIを作ってGitHubにアップロードする
適当なAPIが無いので、とりあえずAPIを作ってみる。App Runner では node または python3 が動作可能言語らしいので今回は python3 で試してみる。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World!!"}
fastapi~=0.65.1
uvicorn
とりあえず、これはAPIですら無いが、APIの中身は本質的ではないのでたったこれだけにしてみる。当然、ローカルで以下のように動くことを確認して済みとしておく。
% uvicorn main:app
INFO: Started server process [65046]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
% curl http://127.0.0.1:8000
{"message":"Hello World!!"}%
更にこれをGitHubにPushしておく。 (今回はsample_apiとしてこのようにPushしておいた)
App Runnerの利用
AWSコンソールにてApp Runner を開く。「サービスの作成」をクリックすると以下のような画面がでてくる。

見て分かる通り、App Runnerで動かすAPIとして準備したのはコンテナですか? ソース(Gitリポジトリ)ですか?と2択で聞かれます。今回は「ソースコードリポジトリ」を選択します。選択後、GitHubとAWSが連携するために、連携したいGitHubアカウントとの認証を行う画面が出るので指示に従ってGitHubと連携させます。

無事に連携が完了すると、GitHubのレポジトリが選択できるので、先に作成したAPIのレポジトリを選択します。

構築設定です。構築コマンドとして pip install を 開始コマンドとして uvicorn を起動するコマンドを指定すればOKです。これらは apprunner.yaml として定義しリポジトリに含めることも可能ですがこれでOKです。
注意すべきは unicorn で host 設定を行い、外部からのアクセスを可能とすることと、port を apprunner の指定と合わせることです。(今回は unicron の設定を8000と明示的に指定し App Runner のポートもそれに合わせた(デフォルトが8080なので注意))

それ以外はサービス名(識別子)を適当に入力するだけ、とりあえず動作させるだけならデフォルトでOKです。
少し時間がかかるようですが、ステータスが「Operation in progress」から「Running」と変われば、APIがデプロイされています(ブラウザ等からアクセスできます)。

外部公開されるPortは80であり設定で指定したものではないので注意です。
おわり(所感)
はっきりってこれはやばい。簡単すぎる。