CI/CDとCodeシリーズの活用

はじめに

開発スピードと品質を両立するには、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サービスを組み合わせて、以下のようなパイプラインを構築します:

  1. CodePipeline:CI/CDフロー全体のオーケストレーション
  2. CodeBuild:ビルド・テスト処理の実行
  3. 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でリスクを最小限に
採用情報 長谷川 横バージョン
SHARE
PHP Code Snippets Powered By : XYZScripts.com
お問い合わせ