App Runner (aws) で楽々なAPI公開を体験してみた

先月(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であり設定で指定したものではないので注意です。

おわり(所感)

はっきりってこれはやばい。簡単すぎる。