AWS CodePipeLineを用いた継続的デリバリ

【連載】

AWSで実践! 基盤構築・デプロイ自動化

【第12回】AWS CodePipeLineを用いた継続的デリバリ

[2019/09/12 08:00]川畑 光平 ブックマーク ブックマーク

開発ソフトウェア

本連載では、以下のようなマイクロサービスアーキテクチャでの継続的インテグレーション(CI:Continuous Integration)や継続的デリバリ(CD:Continuous Delivery)の自動化環境の構築を実践しています。

本連載で自動化環境を構築しているマイクロサービスアーキテクチャ

前回まで数回にわたり、ECSコンテナ、RDSを使ったSonarQubeServerによる静的チェック環境の構築から、SpringBootを使ったマイクロサービスにおける各種テストコードの実装、GitHubへプッシュされたソースコードに対するCodeBuildを使ったビルド/テスト、SonarScannerによる静的チェック結果の可視化といった一連の継続的インテグレーション自動化の仕組みについて解説してきました。

継続的インテグレーションは、以下のようなGit Flowをベースとしたブランチ構成で、feature/******ブランチを対象に、赤字の吹き出しのタイミングで、ソースコードのGitHubへのプッシュを契機にビルド/テスト/静的解析結果可視化の自動化を実現しています。

継続的インテグレーションのブランチ構成

feature/****ブランチに対する機能実装が完了した後は、developブランチに対してプルリクスト(PR:Pull Request)をコードオーナーや管理者に送信し、マージ要求を行います。そして、developブランチへPRが発出されたタイミングやコードのマージを契機として、以下のようなプロセスを経て、プロダクション環境へリリースしていくものとします。

  1. バックエンドのマイクロサービスのコンテナイメージのビルド、DockerHubへのプッシュ
  2. マイクロサービスコンテナイメージをプロダクションとほぼ同等のステージング環境へデプロイ
  3. Webアプリケーション(BFF)のE2Eテストとして、Seleniumテストコード実行
  4. Webアプリケーション(BFF)のコンテナイメージのビルド、DockerHubへのプッシュ
  5. Webアプリケーション(BFF)のステージング環境へデプロイ
  6. パフォーマンステストやセキュリティテスト、受入など、その他テスト後の管理者によるリリース承認
  7. ステージング環境でテスト済みのコンテナイメージをリリース用にタグ付けし、DockerHubへプッシュ
  8. プロダクション環境へリリース

今回からは、上記の一連の流れをAWS CodePipelineを使ってパイプライン的に自動化する仕組みを構築/解説していきます。今回はCodePipelineの概要と、リリースまでのパイプライン構成、実行環境構成イメージについて解説します。

CodePipelineの概要

CodePipelineはアプリケーションのソースコードコミット/プッシュやプルリクエストを契機として、テスト/ビルドやステージング/プロダクション環境へのデプロイといった一連のソフトウェアリリースプロセスを自動化/可視化し、継続的デリバリーを実現するサービスです。主な特徴やメリットとして、以下のような点が挙げられます。

  • ECR、S3、ElasticBeanstalk、CodeCommit、CodeDeploy、CodeBuild、LambdaといったAWSのさまざまなサービスと統合し、リリースプロセスを構築できること
  • アプリケーション実行環境となるECSやEC2などへのデプロイをシームレスに行えること
  • クラウド実行ベースのCodeBuildとの連携により、マシンリソースを気にせず、さまざまなソースコードレポジトリに対して同時に多数のビルド処理やデプロイを同時実行できること
  • GitHubやJenkinsなどの主要なレポジトリやCIツールとの連携もシームレスに実行できること

それでは、CodePipelineを使い、冒頭の図で示したマイクロサービスアーキテクチャにおけるアプリケーションリリースプロセスの自動化を実際に進めていきましょう。

マイクロサービスでのパイプライン構成

先に示したブランチ構成のイメージに基づき、feature/****ブランチから、developブランチへのPRを契機として、以下のようなリリースプロセスに基づくパイプラインを構成します。

構築するパイプライン

各パイプラインの具体的な処理のイメージは以下の通りです。

  1. バックエンドのマイクロサービスのコンテナイメージのビルド
    1. CodeBuildがbackendアプリケーションのステージング環境向けbuildspec.ymlに記載したビルド処理を行うコンテナを実行します。
    2. ビルド処理の中で、アプリケーション実行コンテナイメージを作成し、DockerHubへプッシュします。

    バックエンドのマイクロサービスのコンテナイメージのビルド

  2. マイクロサービスコンテナイメージをプロダクションとほぼ同等のステージング環境へデプロイ
    1. ECSクラスタ上にアプリケーションコンテナを実行させる命令を発出します。
    2. ECSエージェントが(1-2)でプッシュしたコンテナをECSクラスタ上にプルします。
    3. ECSクラスタ上でアプリケーションコンテナが実行されます。

    プロダクションとほぼ同等のステージング環境へデプロイ

  3. Webアプリケーション(BFF)のE2Eテストとして、Seleniumテストコード実行
    1. CodeBuildがBFFアプリケーションのbuildspec_e2e.ymlに記載したビルド処理(テスト)を行うコンテナを実行します。
    2. ビルド処理の中で、GitHubからBFFのアプリケーションソースコードをクローンします。
    3. ビルド処理の中で、MavenビルドによりSeleniumを使ったE2Eテストを実行します。E2Eテストでは2でデプロイしたバックエンドアプリケーションの呼び出しを通してテスト実行されます。

    Seleniumテストコード実行

  4. Webアプリケーション(BFF)のコンテナイメージのビルド
    1. CodeBuildがBFFアプリケーションのステージング環境向けbuildspec.ymlに記載したビルド処理を行うコンテナを実行します。
    2. ビルド処理の中で、アプリケーション実行コンテナイメージを作成し、DockerHubへプッシュします。

    コンテナイメージのビルド

  5. Webアプリケーション(BFF)のステージング環境へデプロイ
    1. ECSクラスタ上にアプリケーションコンテナを実行させる命令を発出します。
    2. ECSエージェントが(4-2)でプッシュしたコンテナをECSクラスタ上にプルします。
    3. ECSクラスタ上でアプリケーションコンテナが実行されます。

    ステージング環境へデプロイ

  6. パフォーマンステストやセキュリティテスト、受入などのその他テスト後の管理者によるリリース承認
    1. CodePipelineがSNSに対し承認のトピックを発行し、パイプラインを一時停止させます。
    2. デプロイされたBackendおよびBFFアプリケーションに対してパフォーマンステストやセキュリティテストを実行します。
    3. テストの結果を踏まえ、プロダクトオーナーやマネージャがAWSコンソールでCodePipeline上で保留しているトピックを承認/否認します。

    テスト後の管理者によるリリース承認

  7. ステージング環境でテスト済みのコンテナイメージをリリース用にタグ付けして、DockerHubへプッシュ
    1. CodeBuildがアプリケーションのプロダクション環境向けbuildspec.ymlに記載したビルド処理を行うコンテナを実行します(BackendおよびBFFは並列実行)。
    2. 各々ビルド処理の中で、アプリケーション実行コンテナイメージを作成し、DockerHubへプッシュします。

    DockerHubへプッシュ

  8. プロダクション環境へリリース
    1. ECSクラスタ上にアプリケーションコンテナを実行させる命令を発出します(BackendおよびBFFは並列実行)。
    2. ECSエージェントが(7-2)でプッシュしたコンテナを、各々ECSクラスタ上にプルします。
    3. 各々ECSクラスタ上でアプリケーションコンテナが実行されます。

プロダクション環境へリリース

次回以降は、各パイプラインの処理の内容を順次説明し、実際に環境を構築していきます。

著者紹介


川畑 光平(KAWABATA Kohei) - NTTデータ 課長代理

金融機関システム業務アプリケーション開発・システム基盤担当を経て、現在はソフトウェア開発自動化関連の研究開発・推進に従事。

Red Hat Certified Engineer、Pivotal Certified Spring Professional、AWS Certified Solutions Architect Professional等の資格を持ち、アプリケーション基盤・クラウドなどさまざまな開発プロジェクト支援にも携わる。2019 APN AWS Top Engineers & Ambassadors選出。

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

コンテンツを戦略的アセットに - Boxのトップが語るデジタル変革ビジョン

コンテンツを戦略的アセットに - Boxのトップが語るデジタル変革ビジョン

7月23日、Box Japanは、年次カンファレンス「Box World Tour Tokyo 2019」を開催した。来日した米Box CEO 共同創業者兼会長 アーロン・レヴィ氏は、基調講演で「コラボレーションと情報管理がデジタル変革の中核を成す」という考えを明かし、同社のビジョンについて語った。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします

会員登録(無料)

注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
[解説動画] 個人の業務効率化術 - 短時間集中はこうして作る
知りたい! カナコさん 皆で話そうAIのコト
教えてカナコさん! これならわかるAI入門
対話システムをつくろう! Python超入門
Kubernetes入門
AWSで作るクラウドネイティブアプリケーションの基本
PowerShell Core入門
徹底研究! ハイブリッドクラウド
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

ページの先頭に戻る