COLUMN誰でもわかる!お役立ちコラム

AWS活用支援コラム

AWSを利用したCI/CD導入の流れ

AWS CodePipelineとは?

AWS CodePipelineは、完全マネージド型のサービスで、CI/CDに必要なソフトウェアの構築、テスト、デプロイまでのプロセスを自動化するサービスです。CI/CD(Continuous Integration/Continuous Deploy)とは、システムやアプリケーションの変更を常に自動でテスト、自動で本番環境にリリースを行う、といったシステム開発の仕組みのことを指します。

CI/CDの構築を行うためには、様々なツールを利用します。これらのCI/CDを行うツール群で構成された一連の流れをひとまとめに、「パイプライン」と呼ぶことがあります。パイプラインの構築には、各ツールの連携や設定、制御を行う必要があります。

AWS CodePipelineはその名前通り、CI/CDのツール群をまとめ、一連の流れ「パイプライン」を簡単に構築する仕組みが整っています。CodePipelineで、『ステージ』と呼ばれるCI/CDに必要な各プロセスを設定することでCI/CD環境を構築することができます。

AWS CodePipelineの仕組みと特徴

AWS CodePipelineの仕組みは、CI/CDの構築における様々なステージを可視化して管理することができます。これにより、複雑なツールの組み合わせをワークフローとして可視化しながら構築できるといった、設計面の強みだけでなく、再利用やトラブルシューティングといった、運用面でも強みを発揮します。

小規模なリリースから大規模なリリースまで対応

AWS CodePipelineは、様々なケースのパイプラインを柔軟に構築可能です。そのため、小規模の変更を高速で繰り返すような場合や、大規模な変更をメンテナンス時間に一気にリリースする、といった、多様な運用ケースに対応したパイプラインを構成することができます。

AWSとのサービスの統合はもちろん可能

CodeDeployやCodeBuild、Elastic Beanstalk、Amazon ECSといった、アプリケーションの構築に関する様々なAWSサービスとシームレスに連携が可能です。また、Amazon SNSなど、アプリケーションにあまり関連がないサービスとも連携が可能です。例えばAmazon SNSで関係者にパイプラインの実行を通知する、といった使い方が可能です。

サードパーティとのサービス統合も可能

コード管理ツールとして代表的なGithubや、自動テストツールとして有名なJenkinsといった、AWS以外のツールとも、連携が可能になっています。したがって、様々な開発環境にも簡単に導入することができます。

CI/CDのフェイズの捉え方

一般論として、CI/CDはSource、Build、Test、Deployの4フェイズで構成されます。それぞれのフェイズを、どのような観点で考えればいいのか、記載していきます。

Source フェイズ

ソースの保管と、レビューをここで行います。ここで重要な観点としては、ソースがデグレーションなくバージョン管理されることと、ユーザーにとって可読性が担保される状態で保管される、ということです。また、保管したソースが外部に漏れないよう、権限管理や認証認可といった、セキュリティ管理も非常に重要です。

Build フェイズ

ソフトウェアを実行可能な状態にパッケージングする工程です。アプリケーションのビルドは、使用している言語とフレームワークによって何をすべきかが異なります。利用しているアプリケーションにマッチしたビルドツールを用いることが重要です。

Test フェイズ

手間をかけずに安全なリリースを行うための重要なフェーズです。ここでは、あらゆるケースを想定したデータと、テストケースを定義しておく必要があります。

Deploy フェイズ

テスト済のアプリケーションをリリースするフェーズです。デプロイフェーズでサービスに影響が出ないようにすることが何より重要となります。Blue・Greenデプロイ、カナリアデプロイなど、多様なデプロイオプションや、可逆性を考慮する必要があります。

AWSでのDevOps導入を実現するスタイルズのDevOps(CI/CD)導入支援サービスはこちら→

Continuous Integration(CI):Code > Build > Test を高速に回す

CI/CDのパイプラインを高速で回すためには、Code、Build、Testの各フェーズにおける手動作業を無くして、いかに自動化するかが大きなカギとなります。コーディングはどうしても手動で実施することが多くなってしまいますが、Codeを確定させてからは、BuildとTestのフェーズがシームレスに実行されるような環境を構築するといいでしょう。

また、ツールだけでなく、コードをレビューするチームの雰囲気や文化といった、組織面での工夫も重要です。ツール・組織の両面で取り組みを行うことで、CIが高速で実行できるようになります。

各環境に自動的に反映するContinuous Delivery(CD)

CDを行っていくためには、安全なリリースの仕組みが何よりも重要です。『安全な』とは、『リリース時に障害が起きない』という意味だけでなく、『ユーザーが新しいバージョンでも使いやすいリリースである』という、ユーザー面の考え方も必要です。

そのためにはCIにおけるTestフェーズだけでなく、リリース後のユーザーからのフィードバックをもとにCodeを高速で修正する、といった、CIを含めた仕組みが必要不可欠です。

CI/CD パイプラインとは?そのメリット

パイプラインとは、先述の通りCI/CDを行う様々なツールをまとめ、制御・可視化できるようにした状態を指します。CI/CDパイプラインを構築しておくメリットとしては、高速で安全なアプリケーションのリリースが可能になる、テスト・ビルドの工数を削減する、といったITシステムの運用上のメリットがあります。

また、高速でアプリケーションの更新を行える環境を整えておくことで、アプリケーションが社会の変化に柔軟に対応できる、というビジネス上のメリットもあります。現在、ビジネスのスピードがあがることで、開発に求められるスピードのレベルもまた上がっています。CI/CD パイプラインというのは、この作業を自動化、省力化することで、改善スピードを高速化することを目的としています。

CodePipeline をどのように実現していくか

具体的なサービス名を出しながら、CodePipelineをどのように実現していくかを記載していきます。

ソース

CI/CDでリリースするアプリケーションのコード格納先(CodeCommitやS3のようなAWS、Githubなど)を指定します。またそれぞれに格納先に適切な権限設定も行っておきましょう。

ビルド

CodeBuildのほかに、Jenkinsといった外部ツールを利用できます。利用するアプリケーションの言語やフレームワークをベースに何を使うかを決定します。

テスト

単体テストや結合テストの実行方法の設定やテスト結果の出力などを行います。Jenkinsなどのほかに、AWS Device Farmを活用することで様々な環境におけるウェブアプリとモバイルアプリについて、ユーザー目線のテストも可能です。

デプロイ

実際にアプリケーションをリリースするステージです。CodeDeployの実行のほか、CloudFormationなどのインフラプロビジョニングも指定できます。

通知

Amazon SNSなどを利用することで、関係者にデプロイの通知やテスト完了後の承認を得る、といったステップを追加することも可能です。

AWSでのDevOps導入を実現するスタイルズのDevOps(CI/CD)導入支援サービスはこちら→

1から作る場合はCodeStarを検討

AWS CodeStarは、AWS上でCodeCommit, CodePipeline, CodeBuild, CodeDeployといったCI/CDに必要なツールと、それらに付随する実行環境を一撃で構築できるサービスです。従来でCodeBuild, CodeDeployといったサービスをそれぞれ個別に設定していく、といった作業が必要でした。AWS CodeStarを利用することで、簡単にCI/CDツールの設定が可能となります。

CodePipelineとGitLab

GitlLabは、ソースリポジトリを構築するをするソフトウェアで、Githubと機能は似ています。GitLabはツール内でCodePipelineのようにCI/CDパイプラインの構築が可能です。Codepipelineのように、無料でCI/CDパイプラインが構築可能となっています。簡単なパイプラインであればGitLabだけでも十分構築することが可能であるため、環境や要件によってCodepipelineと使い分けを行うといいでしょう。

スタイルズでのCI/CDの事例