AWSロードマップ

GitHub ActionsとAWS統合によるCI CDパイプライン構築完全ガイド

GitHub ActionsはGitHub上でCI CDパイプラインを構築できるワークフロー自動化ツールです。本記事ではGitHub ActionsとAWSの統合方法からデプロイ設定手順、さらに運用時のベストプラクティスまでを網羅的かつ実践的に解説します。

GitHub Actionsとは

GitHub ActionsとはGitHubリポジトリ内のイベントに応じてワークフローを自動実行できるCI CDツールです。プッシュ、プルリクエスト、タグ作成などのイベントをトリガーにして自動ビルド、テスト、デプロイを実現します。

GitHub Actionsの主な特徴

  • ワークフローをイベントベースで自動実行可能
  • YAMLファイルで柔軟なワークフロー構成
  • GitHubホストランナーまたはセルフホストランナーで実行可能
  • AWSと連携しECS Lambda S3などへの自動デプロイが可能
  • Marketplaceから再利用可能なアクションを活用可能

主なユースケース

  • WebアプリケーションのECS Lambda S3への自動デプロイ
  • インフラリソースの自動プロビジョニング TerraformやCloudFormationとの連携
  • ユニットテストや統合テストの自動実行
  • コンテナビルドおよびECRやDockerHubへの自動プッシュ

GitHub ActionsとAWSの統合方法

GitHub ActionsからAWSリソースにアクセスするには適切な認証設定が必要です。

IAMユーザーの作成と認証情報の設定

  1. AWS IAMで新しいプログラムアクセス可能なユーザーを作成します
  2. 必要なポリシー ECS S3 Lambdaなどへのアクセス許可を付与します
  3. アクセスキーIDとシークレットアクセスキーを発行します
  4. GitHubリポジトリのSettings Secrets and variables Actionsから以下を登録します
    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY

AWS CLIを使用するためのセットアップ

AWS CLIコマンドをGitHub Actions内で使用するためには公式アクションaws-actions configure-aws-credentialsを利用します。

- name: Configure AWS credentials
  uses: aws-actions/configure-aws-credentials@v2
  with:
    aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
    aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    aws-region: us-east-1

GitHub Actionsを使用したデプロイの設定

S3に静的サイトをデプロイするワークフロー

name: Deploy to S3

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1

      - name: Upload files to S3
        run: aws s3 sync ./dist s3://my-static-site --delete

ECSにコンテナをデプロイするワークフロー

name: Deploy to ECS

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1

      - name: Build and push Docker image
        run: |
          docker build -t my-app .
          docker tag my-app:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest
          aws ecr get-login-password | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
          docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest

      - name: Deploy to ECS
        run: |
          aws ecs update-service --cluster my-cluster --service my-service --force-new-deployment

GitHub Actions運用におけるベストプラクティス

  • 最小限のIAMポリシーを適用しセキュリティを確保します
  • 各ステップのログを残しトラブルシューティングを容易にします
  • アクセスキーやシークレットキーはSecretsで安全に管理します
  • デプロイはmainやmasterブランチ限定に設定し運用リスクを下げます
  • キャッシュ機能を活用しビルド時間を短縮します

まとめ

GitHub ActionsとAWSを統合することで効率的でセキュアなCI CDパイプラインを構築できます。GitHubリポジトリの変更をトリガーに自動でビルド テスト デプロイを実行できるため、リリースまでのリードタイムを大幅に短縮できます。S3 ECS LambdaなどのAWSリソースへの自動デプロイに加え、AWS CLIやECR CodeDeployとの連携により柔軟で高度なデプロイパターンも実現可能です。

次回はBlue GreenデプロイやCanaryデプロイの具体的な実装についてさらに詳しく解説していきます。

-AWSロードマップ
-, , , , , , , , ,