😎

FastAPIで作ったAPIサーバーをHerokuへデプロイする

に公開

はじめに

FastAPIの学習を目的に個人で作成したWeb APIサーバーを、デプロイしてみたいと思いました。
しかし、AWSなどへのデプロイ経験は正直まだありません。そこで、まずは比較的簡単そうなHerokuへデプロイすることにしました。

この記事でやること

  • FastAPIで作成したWeb APIサーバーをインターネット上で公開する
  • Dockerfileを使用した環境をHerokuにデプロイする
  • MySQLのDBも一緒に使えるようにする
  • デプロイはGitHubActionsを使って自動で行えるようにする

今回デプロイするアプリケーション

↓実際に使用したGitHubリポジトリ
https://github.com/HIR0-728/my-first-task-app

実際にやってみる

Herokuを利用できる状態にする

まず、今回のデプロイ対象であるHerokuを利用できる状態にするため、アカウントの作成を行う。
アカウントの作成は以下のリンク先から行う。
https://signup.heroku.com/login

アカウントの作成ができたら、ホストマシンで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を利用できる。
https://devcenter.heroku.com/articles/jawsdb

# 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_KEYHEROKU_APP_NAMEHEROKU_EMAILを登録する。

HerokuのAPIKEYはAccountSettingsの画面で確認できる。

Herokuのアプリケーションに環境変数を設定する

アプリケーションによっては実行するために環境変数が必要な場合がある。その場合は以下のコマンドを実行することで環境変数を設定することが可能。

$ heroku config:set HOGE_ENV="hogehoge" --app アプリ名

動作確認

ここまでできればあとは対象のブランチにプッシュすると自動でHerokuにデプロイされるはず。
正しく動いているかどうかは、heroku openheroku logsコマンドで確認できる。

# アプリケーションを開く
$ heroku open --app アプリ名

# ログを確認する
$ heroku logs --app アプリ名

Discussion