9.3 CI/CD パイプラインの構築 (GitHub Actions)

9.3 CI/CD パイプラインの構築 (GitHub Actions) #

この記事では、PythonのWebフレームワークであるFlaskと、サーバレスコンピューティングサービスであるAWS Lambda、それを接続するためのZappa、そしてGitHub Actionsを使用して、継続的インテグレーション/継続的デプロイメント(CI/CD)パイプラインを構築する方法について説明します。

前提条件

  • PythonとFlaskに基づいたWebアプリケーションが存在すること
  • AWSアカウントがあり、AWS Lambdaを利用できること
  • GitHubアカウントがあり、リポジトリが作成できること

1. GitHub Actionsの設定 #

.github/workflowsディレクトリを作成し、その中にCI/CDワークフローファイル(例えばmain.yml)を作成します。以下はその一例です。

name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2

    - name: Set up Python 3.8
      uses: actions/setup-python@v2
      with:
        python-version: 3.8

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install zappa flask        

    - name: Zappa Deploy
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: |
                zappa deploy production

この設定ファイルにより、mainブランチへのpushイベントが発生すると、CI/CDパイプラインがトリガーされます。このパイプラインでは、まず、Python 3.8をセットアップし、その後必要な依存関係をインストールします。最後に、Zappaを使用してアプリケーションをデプロイします。

注意点として、AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYはGitHubのSecretsから取得され、ZappaがAWSにアクセスできるように設定されています。

2. デプロイの確認 #

このパイプラインをセットアップしたら、コードの変更をmainブランチにプッシュしてみましょう。GitHubは自動的にアクションを開始し、結果はActionsタブで確認できます。

Zappaはデプロイが成功したかどうかに応じて、ステータスコードを返します。これにより、CI/CDパイプラインが成功したかどうかをGitHub Actionsが判断できます。

3. パイプラインの調整 #

この基本的なパイプラインは、あなたのアプリケーションの必要性に応じてさらに拡張や調整が可能です。たとえば、テストステージを追加して、デプロイ前に自動テストを実行することが可能です。

# ...

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2

    - name: Set up Python 3.8
      uses: actions/setup-python@v2
      with:
        python-version: 3.8

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt        

    - name: Run tests
      run: |
                python -m pytest

  # ...

これにより、すべてのテストがパスするまでデプロイがブロックされ、品質を維持することができます。

以上が、Flask, AWS Lambda, ZappaとGitHub Actionsを利用したCI/CDパイプラインの基本的な構築手順です。このパイプラインは、開発チームがより速く、より安全にリリースを行うための一助となるでしょう。