0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:FastAPI バックエンドをECR/ECSへデプロイするGitHub Actionsワークフロー整理②

Posted at

はじめに

本記事では、FastAPIで作成したバックエンドアプリケーションをAWSのECR(Elastic Container Registry)とECS(Elastic Container Service)にデプロイするGitHub Actionsワークフローについて整理します。

この内容は、受講しているITスクールのハッカソンにおいて、チームメンバーの方が作成してくださったものを、レビューした際にまとめたものです。(いろいろと作業いただき、ありがとうございます。

ビルド済みイメージをECRに登録し、ECSで運用することで本番環境への安全なデプロイを実現します。

書こうと思ったきっかけ

バックエンドアプリケーションの運用において、コンテナイメージのビルドとECSサービスの更新を自動化できるよう、作成いただきました。

特に、手動操作によるリスクや作業コストを削減し、確実かつ迅速なリリースを実現するためのデプロイワークフローとなっています。

ワークフローの概要(2025/04/27)

このGitHub Actionsワークフローは、FastAPIアプリケーションのDockerイメージをECRにプッシュし、ECSサービスに適用するために作成されています。

トリガー条件

  • 「Build and Test FastAPI Backend」ワークフローが成功した後(mainブランチ対象)
  • 手動実行(workflow_dispatch

実行内容

  1. コードチェックアウト

    • GitHubリポジトリからソースコードを取得
  2. コミット情報のダウンロードと設定

    • ビルド時に保存したコミットSHAを取得し、タグ付けに利用
    • 手動実行時は入力されたSHAも使用可能
  3. AWS認証情報の設定

    • GitHub Secretsに保存されたAWSアクセスキー情報を使ってAWS CLI認証を設定
  4. ECRログイン

    • Amazon ECRに対してDocker認証を実施
  5. Docker Buildxセットアップ

    • マルチプラットフォーム対応のビルド機能(Buildx)を有効化
  6. APIコンテナビルド&プッシュ

    • ./backend/apiをビルドし、ECRリポジトリにcommit_shaタグとlatestタグでプッシュ
  7. マイグレーションコンテナビルド&プッシュ

    • ./backend/migrationも同様にビルド&プッシュ
  8. ECSタスク定義の更新(API)

    • 新しいイメージURIに差し替えたタスク定義ファイルを作成
  9. ECSサービス更新(API)

    • 更新したタスク定義を使用してECSサービスをデプロイ。サービスの安定化まで待機
  10. DBマイグレーション実行

    • ECSクラスタ上でマイグレーションタスク(Fargate)をRunTaskとして実行

補足ポイント

  • APIとマイグレーションのDockerイメージをそれぞれ別々にビルド&プッシュしている
  • 手動デプロイにも対応しており、柔軟な運用が可能

まとめ

このワークフローにより、FastAPIバックエンドのECR/ECSデプロイが完全自動化され、運用の負荷とリスクが大幅に低減されると思います!

作成いただいた方、本当にありがとうございます...!

まずはこの仕組みを堅牢に運用し、迅速で信頼性の高いサービス運用基盤を築いていきたいと思います...!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?