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ユーザーの作成と認証情報の設定
- AWS IAMで新しいプログラムアクセス可能なユーザーを作成します
- 必要なポリシー ECS S3 Lambdaなどへのアクセス許可を付与します
- アクセスキーIDとシークレットアクセスキーを発行します
- 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デプロイの具体的な実装についてさらに詳しく解説していきます。