はじめに
開発スピードと品質を両立するには、CI/CD(継続的インテグレーション/継続的デリバリー) の仕組みが不可欠です。AWSにはこれを支える Codeシリーズ(CodePipeline, CodeBuild など) があり、GitHub Actionsなど外部ツールとの統合も容易です。
本章では以下のトピックに沿って、AWSでのCI/CD構築のベストプラクティスを詳しく解説します。
- CodePipeline + CodeBuild + GitHub Actions連携
- マルチブランチ対応と自動デプロイ設計
- Blue/Green・Canary戦略による安全なリリース
- Lambda、ECS、S3への段階的デプロイ
CodePipeline + CodeBuild + GitHub Actions連携
基本構成
AWSのCI/CDサービスを組み合わせて、以下のようなパイプラインを構築します:
- CodePipeline:CI/CDフロー全体のオーケストレーション
- CodeBuild:ビルド・テスト処理の実行
- GitHub Actions:プッシュ・PR時のトリガー、Lintやユニットテスト
GitHubでのコード更新をトリガーに、自動でAWS側のパイプラインが起動する構成が一般的です。
# CodePipelineのGitHub接続設定(ソースステージ) "Source": { "Type": "GitHub", "Configuration": { "Owner": "your-org", "Repo": "your-repo", "Branch": "main", "OAuthToken": "SecretsManagerで取得したGitHubトークン" } }
GitHub Actionsでの事前チェック例
name: Lint & Test on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: npm install - run: npm run lint - run: npm test
Actionsで静的チェックを通過したコードだけが、CodePipelineで本番環境へ進むように設計します。
マルチブランチ対応・自動デプロイ
マルチブランチ戦略の必要性
開発中のブランチ(feature/xxx, develop)と本番用のブランチ(main, release)を分けてCI/CDパイプラインを用意することで、環境ごとに異なるデプロイが可能になります。
例:
develop→ ステージング環境へ自動デプロイmain→ 本番環境へ手動承認付きでデプロイ
CodePipelineでブランチ別に設定
"Source": { "Branch": { "Fn::If": [ "IsProd", "main", "develop" ] } }
また、Manual Approvalステージを挟むことで、本番環境への誤デプロイを防ぐことも可能です。
Blue/Greenデプロイ・Canary戦略
Blue/Greenデプロイとは
Blue/Greenデプロイでは、現行環境(Blue)とは別に新バージョン(Green)を立ち上げ、テストが完了してからトラフィックをGreenに切り替えます。万が一不具合があった場合もBlueへ即時ロールバックが可能です。
対応サービス:
- Elastic Beanstalk
- CodeDeploy(ECS / EC2 / Lambda)
Canaryデプロイとは
Canary戦略では、少量のユーザーにのみ新バージョンを配信し、問題がないことを確認した後に全体へ展開します。Lambdaでは設定だけでこれを実現できます。
# Lambdaでの段階的デプロイ(CLI) aws lambda update-alias \ --function-name MyFunction \ --name prod \ --routing-config '{"AdditionalVersionWeights":{"2":0.1}}'
この例では、新バージョン(バージョン2)を10%のユーザーに対して提供し、問題がなければ比率を上げていきます。
Lambda, ECS, S3などへの段階的デプロイ設計
Lambdaの場合
- CodeDeployとの統合でCanary/Linear/All-at-once戦略が選択可能
- CloudWatchアラームと連携して自動ロールバック設定が可能
# appspec.yml(Lambdaデプロイ設定) version: 0.0 Resources: - MyLambdaFunction: Type: AWS::Lambda::Function Properties: Name: my-lambda Alias: live CurrentVersion: 1 TargetVersion: 2
ECSの場合
- CodeDeploy + Application Load BalancerでBlue/Green構成
- タスク定義のバージョン管理と更新追跡が可能
S3への静的ファイルデプロイ
- CodePipeline → S3への自動アップロード
- CloudFrontキャッシュクリアを含めたデプロイフロー
# deploy.sh の例 aws s3 sync ./dist s3://my-website --delete aws cloudfront create-invalidation --distribution-id ABC123 --paths "/*"
静的ホスティングにおいても、CI/CDの一貫としてビルド → デプロイ → キャッシュパージの自動化が可能です。
まとめ
AWSのCI/CDは、Codeシリーズと外部サービス(GitHub Actionsなど)をうまく組み合わせることで、信頼性・速度・安全性の高いリリース体制を構築できます。
- CodePipelineでCI/CDフローを一元管理
- GitHub Actionsと連携して静的解析やテストを自動化
- マルチブランチ戦略で開発〜本番を分離
- Blue/GreenやCanaryでリスクを最小限に

