Contents
CI/CD自動化の意義とAWSとの相性
CI/CD(継続的インテグレーション・デリバリー)は、開発から本番環境への移行を自動化し、人為的なエラーを減らす手法です。AWSではCodePipelineやS3、ALBといったサービスが連携することで、高可用性とスケーラビリティの両立が可能になります。以下に代表的なメリットを比較表で示します。
| 項目 | 伝統的手法 | Jenkins+AWS |
|---|---|---|
| 自動化レベル | 手動作業中心 | 完全自動化可能 |
| スケーラビリティ | 環境依存 | AWSのグローバルインフラ活用 |
| セキュリティ | 拡張性が低い | IAMロールによる厳格な権限管理 |
JenkinsをAWSで導入することで、DevOpsエンジニアは複数環境間の手動作業から解放され、運用コスト削減と品質向上が期待できます。
JenkinsサーバーのAWS EC2インストール手順
Jenkinsサーバーを構築するためには、EC2インスタンスの選定やセキュリティ設定が不可欠です。以下にステップバイステップで説明します。
EC2インスタンス構築時のセキュリティ設定
AWSでJenkinsサーバーを運用する際は、以下の点に注意してください。
- セキュリティグループの設定: SSHポート(22)とJenkinsのデフォルトポート(50000)を許可。
- IAMロールの割当: EC2インスタンスにAWS CLIアクセス権限を付与。
- VPC構成: プライベートサブネットを使用し、外部からの直接アクセスを防ぐ。
Jenkinsサーバーは、セキュリティ設定の明確化が重要です。適切なIAMロールとVPC構成を組み合わせることで、運用の安定性が向上します。
Java環境とJenkinsの導入プロセス
EC2インスタンスにJenkinsを導入するには、以下のような手順が必要です。
-
Javaランタイムのインストール:
bash
sudo apt update && sudo apt install openjdk-8-jdk -y -
Jenkinsのダウンロードと起動:
bash
wget -qO- https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
echo "deb http://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list
sudo apt update && sudo apt install jenkins -y -
初期設定:
ブラウザでhttp://<EC2_IP>:8080にアクセスし、管理者パスワードを取得後、必要最低限のプラグイン(如:AWS CLI, CodeDeploy)を導入。
AWS CodePipelineとの連携設定方法
JenkinsとCodePipelineを組み合わせることで、ソースコード変更からデプロイまでの全自動ワークフローが実現可能です。以下に具体的な接続手順を解説します。
CodePipelineアーキテクチャ概要
CodePipelineは「ステージ(Stage)」ごとに処理を分離する仕組みを持っています。Jenkinsとの連携では、以下の要素が重要です。
- Source Stage: GitHubやS3からコード取得
- Build Stage: Jenkinsでビルド実行
- Deploy Stage: CodeDeploy経由でALB経由のローリングデプロイ
CodePipelineとJenkinsを連携する際は、Webhookを利用してGitHubプッシュイベントをトリガーに設定します。AWS公式ドキュメントが参考になります(AWS Documentation)。
JenkinsとCodePipelineの接続プロトコル
JenkinsとCodePipelineを連携させるには、以下のような手順が必要です。
- IAMロール作成: CodePipelineがJenkinsにアクセスできる権限を付与。
- Webhook設定: GitHubリポジトリでプッシュイベント時、CodePipelineを起動するように設定。
- Jenkinsジョブの作成: CodePipelineが提供したアーティファクトを取得し、ビルドスクリプト(Jenkinsfile)を実行。
S3バケットを活用したコードデプロイワークフロー構築
S3はCI/CDワークフローにおいてアーティファクトの永続保存・配布に最適なサービスです。以下に具体的な手順を解説します。
S3バケットのアクセス権付与手順
JenkinsからS3にアクセスするには、以下の権限が必要です。
- IAMロール作成:
AmazonS3FullAccessポリシーをアタッチ。- AWS CLI設定: JenkinsサーバーでAWS CLIをインストールし、
aws configureコマンドでアクセス情報を登録。
|
1 2 |
aws s3api put-bucket-policy --bucket <バケット名> --policy file://policy.json |
Artifact保存と取得のタイミング
S3バケットでのワークフローでは、以下のようなタイミングでアーティファクトを処理します。
- Build完了後: Jenkinsがビルド結果をS3に保存。
- Deploy前: CodePipelineがS3からアーティファクト取得し、CodeDeploy経由でEC2インスタンスへ配布。
S3バケットのライフサイクルポリシーを活用することで、「バージョン管理と配布処理」が実現可能です(AWS Documentation)。
ALB経由でのローリングデプロイ実現方法
ALB(Application Load Balancer)を活用することで、停止せずにアプリケーションの更新が可能になります。以下に具体的な構成手順を解説します。
EC2インスタンスグループの構成
ローリングデプロイには、以下のコンポーネントが必要です。
- Auto Scaling Group: 新しいインスタンスを自動で起動。
- CodeDeployアグリゲーター: デプロイ中のトラフィックを切り替える。
ALBのロードバランサー設定は、AWS管理コンソールから「Listener」と「Target Group」を構成します。
ALBリスナー設定とヘルスチェック
ALBでローリングデプロイを行うには、以下のポイントを確認してください。
- リスナーの構成: HTTP/HTTPSポートにリスナーを追加。
- 健康チェック設定: EC2インスタンスが正常かどうかを定期的に確認。
CodeDeployとの連携で「Blue/Greenデプロイ」も実現可能であることが示されています(AWS Documentation)。
必須プラグインの導入手順と環境構築確認
Jenkinsの安定した運用には、AWS CLIやCodeDeployなどのプラグインが不可欠です。以下に手順を解説します。
AWS CLIとCodeDeployプラグインの設定
JenkinsでAWSのサービスを使用するには、以下のプラグインを導入してください。
- AWS CLI: Jenkinsの管理画面から「AWS CLI」プラグインをインストール。
- CodeDeployアダプター: CodeDeployとの連携用に「Amazon EC2 Deployment Agent」を有効化。
プラグイン導入後は、Jenkinsの構成画面でAWS資格情報を設定し、CodePipelineとの接続性を確認します。
パイプライン動作テスト手順
最後に、パイプラインが正しく動作するかテストを行います。
- GitHubリポジトリへのプッシュ: コード変更を反映。
- CodePipelineの起動確認: Jenkinsでビルドジョブが自動実行されることをチェック。
- ALB経由でのアクセステスト: ブラウザからアプリケーションにアクセスし、ローリングデプロイが正しく行われているか確認。
実務では、「Jenkinsfile」にPipelineの定義を記述し、テスト環境で動作を再現することが重要です(AWS Documentation)。