👁

応用課題

この章では、CI/CDパイプライン講座で学んだ内容を応用した課題に取り組みます。

1. 課題の概要

この講座で学んだ内容をもとに、コンテナ化したアプリケーションに対する CI/CDパイプライン を GitHub Actions で構築します。

必須要件は 机上での CI/CDパイプラインの設計と実装 です。実際のAWSリソースを構築する必要はなく、ワークフローを設計し、AWS連携前までのジョブが動作することを確認するところまでが範囲です。実環境へのエンドツーエンドデプロイは発展課題として扱います。

2. 事前準備

2.1 前提となる講座

この章では、以下の知識を前提としています。自信がない場合は先に関連講座を実施してみましょう。

講座名 必要な知識
Git入門 リポジトリ作成、コミット、Pushなど、Gitの基本操作

2.2 サンプルアプリケーションのダウンロード

zipには FastAPI + SQLAlchemy で実装されたシンプルなタスク管理APIに加え、本番運用想定の Dockerfile.dockerignore が同梱されています。Dockerfile はマルチステージビルド・非rootユーザ・軽量ベースイメージで構成されており、そのままビルドして利用できます。

2.3 必要なツール

この章では、以下のツールを使用します。まだインストールしていない場合は、リンク先の手順に沿って準備をお願いします。

ツール名 関連箇所 理由
Visual Studio Code Visual Studio Codeのインストール 応用課題のコードを記述するエディタとして使用する
Docker Desktop Docker Desktopのインストール サンプルアプリケーションのコンテナイメージをビルドするために使用する
Git Git/GitHubのセットアップ ソースコードとワークフローファイルをGitHubに反映するために使用する

2.4 必要なアカウント

この章では、以下のアカウントを使用します。まだ用意していない場合は、リンク先の手順に沿って準備をお願いします。

アカウント名 関連箇所 理由
GitHubアカウント Git/GitHubのセットアップ 応用課題のCI/CDパイプラインを実行するリポジトリのホスティング先として使用する

3. 必須要件

3.1 CI/CDパイプラインの構築

GitHub Actions で、push または プルリクエストをトリガーに動作するワークフローを設計・実装すること。

実際のAWSリソースを構築する必要はありません。ワークフローの設計と、AWS連携前までのジョブが正しく動作することを確認するところまでが必須範囲です。

3.2 ワークフローに含めるステップ

以下のステップをワークフローに含めること。

  • flake8 と mypy による静的解析を実行する
  • pytest による自動テストを実行する
  • 同梱の Dockerfile からコンテナイメージをビルドする
  • ビルドしたイメージを ECR に push する
  • ECS タスク定義を更新してデプロイする

このうち、静的解析・自動テスト・コンテナイメージのビルドは実際に GitHub Actions 上で成功することを確認してください。ECR push と ECS デプロイのステップはワークフローに記述するだけで構いません(AWS認証エラー等でジョブが失敗してOKです)。

3.3 ワークフロー設計

  • 静的解析・自動テスト・ビルド・デプロイは ジョブを分離 すること(依存関係は needs で表現する)
  • AWS認証情報を扱うステップでは GitHub Secrets を参照し、ワークフロー内に直接記述しないこと
  • デプロイは mainブランチへのマージ時のみ 実行されるよう、トリガーやジョブの条件を設定すること

4. 発展課題(任意)

4.1 AWSリソースの構築とエンドツーエンドのデプロイ

CI/CDパイプラインを実際にエンドツーエンドで動作させるため、デプロイ先となるAWSリソースを構築する。

  • ECRリポジトリを作成し、GitHub Actions からの push を許可する(OIDC連携、またはIAMユーザのアクセスキーを GitHub Secrets に登録)
  • ECSクラスタとサービスを作成し、Fargate起動タイプでタスクを実行する
  • ALBを介してECSサービスにアクセスできる構成にする
  • RDSをプライベートサブネットに配置し、ECSタスクから接続できるようにする
  • パイプラインを実行し、mainブランチへのマージで自動的にデプロイされることを確認する

4.2 Blue/Green デプロイメント

ECS の Blue/Green デプロイメントを構築し、ダウンタイムなくデプロイできる構成にする。

  • CodeDeploy と ECS を組み合わせて Blue/Green デプロイを構成する
  • ALB のターゲットグループを2つ用意し、Blue/Green の切り替えを行えるようにする
  • ワークフローからは CodeDeploy のデプロイメントをトリガーする形に変更する
  • デプロイ失敗時の自動ロールバックを設定する

4.3 その他

  • カナリアデプロイ(CodeDeploy のリニアまたはカナリア戦略)を構築する
  • プルリクエスト時にAIコードレビューを自動実行する
  • Terraform 等のIaCコードにも CI/CDパイプラインを適用する(plan の自動実行、approval後の apply)

5. 提出形式

5.1 GitHubリポジトリ

CI/CDパイプライン(GitHub Actions のワークフローファイル)を含むコード一式をアップロードしたGitHubリポジトリのURLを記載してください。

5.2 設計方針と効果

構築したCI/CDパイプラインについて、以下の観点で簡単な考察を記載してください。

  • どんな目的でCI/CDパイプラインを設計したか(設計方針)
  • 具体的にどんなステップ・ジョブ構成・トリガー条件・セキュリティ対策などを組み込んだか(施策)
  • その施策によって、どんな改善・利点が得られるか(手動作業の削減、品質担保、デプロイ安全性の向上など)

「動くものを作った」で終わらず、なぜその構成にしたのか・それで何が良くなるのか を自分の言葉で言語化することがこの課題の狙いです。

5.3 まとめ

実装中に苦労したこと、工夫したこと、学んだことを記載してください。

応用課題の採点はプレミアムプランでご利用いただけます。

プランのアップグレード

この教材は役に立ちましたか?

いいねをたくさんいただけると、制作者の励みになり、より多くのセクションが作れるようになります。

感想を一言(任意)

いただいたコメントは次の制作のヒントになります。ぜひお気軽にご投稿ください。

このコメントは他の受講生には公開されません。DevOps Camp運営が、教材改善のために確認します。

0 / 2000