FastAPIで作ったAPIサーバーをHerokuへデプロイする
はじめに
FastAPIの学習を目的に個人で作成したWeb APIサーバーを、デプロイしてみたいと思いました。
しかし、AWSなどへのデプロイ経験は正直まだありません。そこで、まずは比較的簡単そうなHerokuへデプロイすることにしました。
この記事でやること
- FastAPIで作成したWeb APIサーバーをインターネット上で公開する
- Dockerfileを使用した環境をHerokuにデプロイする
- MySQLのDBも一緒に使えるようにする
- デプロイはGitHubActionsを使って自動で行えるようにする
今回デプロイするアプリケーション
↓実際に使用したGitHubリポジトリ
実際にやってみる
Herokuを利用できる状態にする
まず、今回のデプロイ対象であるHerokuを利用できる状態にするため、アカウントの作成を行う。
アカウントの作成は以下のリンク先から行う。
アカウントの作成ができたら、ホストマシンでHerokuCLIを使える状態にし、Herokuにログインする。
heroku login
コマンドを実行するとブラウザが起動されるので、画面に従ってログイン。
$ brew install heroku
$ heroku login
# 正しくログインできているかチェックしておく
$ heroku whoami
登録したメールアドレスが表示される
Heroku上にアプリケーションを作成する
Herokuが利用できる状態になったらHeroku上にアプリケーションを用意する。
# デプロイしたいプロジェクトのルートディレクトリに移動する
$ cd my-app
$ heroku apps:create "アプリケーション名"
今回作成するFastAPIアプリはMySQLへのDB接続が必要。
Herokuにデフォルトで用意されているDBはPostgreSQLであるが、アドオン機能を使うことでMySQLを利用できる。
# JawsDBをアプリケーションに追加する
$ heroku addons:create jawsdb
# 問題なく追加されるとアプリの環境変数にJAWSDB_URLが追加される
$ heroku config:get JAWSDB_URL
mysql://username:password@hostname:port/default_schema
GitHub Actions
GitHubActionを使ってCD環境を構築する。
今回はdevelopブランチにプッシュされたタイミングでHerokuにデプロイされるような仕組みとしている。
name: Deploy to Heroku
on:
push:
branches:
- develop
paths:
- "backend/**"
- ".github/workflows/heroku-deploy.yml"
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build Docker image for testing
uses: docker/build-push-action@v4
with:
context: ./backend
load: true
tags: app:test
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Install Heroku CLI
run: |
curl https://cli-assets.heroku.com/install.sh | sh
- name: Deploy to Heroku
uses: akhileshns/heroku-deploy@v3.12.14
with:
heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
heroku_app_name: ${{ secrets.HEROKU_APP_NAME }}
heroku_email: ${{ secrets.HEROKU_EMAIL }}
appdir: "backend"
usedocker: true
対象のGitHubのリポジトリの環境変数に、HEROKU_API_KEY
とHEROKU_APP_NAME
とHEROKU_EMAIL
を登録する。
HerokuのAPIKEYはAccountSettingsの画面で確認できる。
Herokuのアプリケーションに環境変数を設定する
アプリケーションによっては実行するために環境変数が必要な場合がある。その場合は以下のコマンドを実行することで環境変数を設定することが可能。
$ heroku config:set HOGE_ENV="hogehoge" --app アプリ名
動作確認
ここまでできればあとは対象のブランチにプッシュすると自動でHerokuにデプロイされるはず。
正しく動いているかどうかは、heroku open
やheroku logs
コマンドで確認できる。
# アプリケーションを開く
$ heroku open --app アプリ名
# ログを確認する
$ heroku logs --app アプリ名
Discussion