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

AWS活用支援コラム

CI/CD導入に使えるAWSサービス

AWSで実現するCI/CDの概要

高速で変化するビジネス環境に、低コストで対応していき、企業の競争力を高めるには、アプリケーションやシステムを高速で開発・改善する仕組みが必要です。AWS(Amazon Web Services)では、クラウドの性質を利用して、非常に高速にシステム開発が可能です。

加えて、AWSで利用できる様々なサービスを組み合わせることで、開発したアプリケーションを高速で改善していく仕組み(CI/CDの仕組み)を、簡単に整備することも可能です。どのようなサービスを使っていけばいいのか、各サービスにはどのような特徴があるのかを、具体的に解説していきます。

CIとは?

CIとは、『Continuous Integration』の略で、日本語では『継続的インティグレーション』といいます。システムやアプリケーションの変更を常に自動でテストする仕組みを指しています。通常、アプリケーションやシステムの開発者はコーディングが完了したあと、テストをおこない、問題がなければコードリポジトリにコードをPushする、という開発プロセスを踏みます。これらのプロセスを自動化する仕組みを、CIといいます。

CDとは?

CDとは、『Continuous Delivery』の略で、日本語では継続的デリバリーといいます。自動で本番環境やステージング環境などにリリースを行う個所を指しています。

従来であれば、テスト済のノードは安全に本番環境へリリースする為に、メンテナンス時間を設定し、リリース手順書の用意や承認プロセスを経た後に、操作ログなどの監査証跡を取得しながらリリースを行っていました。CI/CDでは、このプロセススの多くを自動で行い、システムやアプリケーションの変更を高速で行います。

CI/CDとは?

CI/CDとは、上記のCIとCDの仕組みを組み合わせることで、システムやアプリケーションの変更を常に自動でテストし、自動で本番環境やステージング環境などにリリースを行う、といったシステム開発の仕組みを意味します。CI/CDを取り入れると、バグを素早く発見したり、変更を自動でリリースしたりできるようになり、アプリケーションやシステム開発の高速化・競争力強化に貢献します。

AWS CodeStarとは?

AWS CodeStarは、簡単に言えばAWS上でCodeCommit, CodePipeline, CodeBuild, CodeDeployといったCI/CDに必要なツールと、それらに付随する実行環境をまとめて構築できるサービスです。AWS CodeStarは、Amazon EC2、AWS Lambda、AWS Elastic Beanstalkで構成されているアプリケーションにが対象になっています。

従来であればこれらのサービスに対しては手動でデプロイを行うか、リポジトリ(CodeCommit)、ビルド(CodeBuild)、 デプロイ(CodeDeploy)といったサービスをそれぞれ個別に設定していく、といった作業が必要でした。AWS CodeStarを利用することで、簡単にCI/CDツールの設定が可能となるため、EC2やLambdaといったサービスへのCI/CDの導入が簡単に実施できるようになります。これによって、開発者は 最小限の情報を入力することで、とりあえず動作させられるアプリケーション環境とソースコードを手に入れる ことができることになります。

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

AWS CodeCommitとは?

AWS CodeCommitとは、AWS上のソースコードやファイルの管理システムです。機能としてはGithubと同じで、コードのアップロード、変更履歴の確認、プルリクエスト(コードなどを追加・修正した際、本体への反映を他の開発者に依頼する機能で、「変更を本人以外がレビューしてから反映させる」といった手順を実現することができます。)の作成などが行えます。

Githubとの大きな違いは、CodeCommitの方が細やかなセキュリティ対策が可能であること、AWSのほかのサービスとの親和性が高い、ということが挙げられます。Githubの場合、Privateにしているプロジェクトでも、インターネット経由で外部の開発関係者と共有する場合があります。この場合、人為的なミスでアカウント情報やパスワードなどの情報が共有されてしまうことがあります。

CodeCommitはプロジェクトに対してIAMによる制御が可能で、細やかなセキュリティ対策が可能であり、AWS内部ネットワークで処理を完結させることも可能であるため、Githubよりも多少セキュリティに関する懸念点が払しょくできます。また、CodePipelineなどの、他のAWSサービスと簡単に連携することができる点も、CodeCommitの優れた点です。

AWS CodeBuildとは?

CodeBuildは、完全マネージド型のビルドサービスです。ビルドとは、コードを本番環境で動作できる形式にアプリケーションを構成することです。CodeBuildならばAPIで実行を指示するだけで、オンデマンドで実行環境がプロビジョニングされ処理を実行し終了するため、Jenkinsなどと比較してサーバーの管理を行う必要がありません。

また、Codebuildは様々なサービスと連携することが可能です。CodePipeline、CodeDeployといったAWSのサービスはもちろんのこと、Githubなどの外部サービスとの連携も可能です。Githubへのpushをトリガーにビルドを開始する、といった使い方もできます。

AWS CodePipelineとは?

CodePipelineは、完全マネージド型のサービスで、CI/CDに必要な各プロセスやサービスを連携・制御し、継続的にプロダクトの自動的なリリースを実現するサービスです。CI/CDを行うツール群をひとまとめに、「パイプライン」と呼ぶことがありますが、CodePipelineがその名前通り、CI/CDのツール群をまとめる役割を果たします。CodePipelineには、『ステージ』と呼ばれるCI/CDに必要な各プロセスを設定することでCI/CD環境を構築することができます。具体的に、それぞれどのような『ステージ』があるのか、簡単に見ていきます。

ソース

CI/CDでリリースするアプリケーションのコード格納先を指定します。CodeCommitやS3のようなAWSサービスのほかに、Githubも利用することが可能です。

ビルド

『ソース』ステージのコードをビルドします。CodeBuildのほかに、Jenkinsのような外部ツールを利用できます。

テスト

単体テストや結合テストの実行方法の設定やテスト結果の出力などを行います。AWS Device FarmやJenkinsなどと連携できます。

デプロイ

実際にアプリケーションをリリースするステージです。CodeDeployの実行のほか、CloudFormationなどのインフラプロビジョニングも指定できます。 また、これらの各ステージに遷移するまえに、Amazon SNSでメールを送り、関係者にパイプラインの実行を通知する、承認のためのURLを発行する、といった、パイプラインを構成する上で便利な、さまざまな機能が備わっています。

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

AWS CodeDeployとは?

CodeDeployは、ビルドしたアプリケーションのデプロイを自動で実行するサービスです。ブルー/グリーンデプロイ(現状の本番環境(ブルー)とは別に新しい本番環境(グリーン)を構築した上で、接続先を切り替えるなどして新しい本番環境をリリースする方法)やローリングデプロイ(複数の稼働中サーバーに対して一定数づつ新しいアプリケーションをデプロイ、リリースしていく方法)といった、デプロイのための様々なオプションを利用することができ、ダウンタイムを抑えながらアプリケーションのデプロイが可能になっています。また、Amazon SNSと連携し、デプロイの状況を通知することも可能です。

本番Webアプリのデプロイ「AWS App Runner」

ここまでご紹介してきた各種CI/CDツールとは少し種類が異なりますが、最近リリースされた注目のサービスとしてAWS App Runnerがあります。 AWS App Runnerとは、コンテナ化されたWebアプリケーションや APIを開発者が簡単かつ迅速にデプロイできるフルマネージドサービスです。

2021年5月にリリースされた新しいサービスで、Amazon ECRおよびGItHubリポジトリとの連携し、本番環境に簡単にコンテナベースのアプリケーションをデプロイできます。また、リクエスト数に応じた自動スケーリングや、リクエストのロードバランシングといった、運用を補助するための機能も備わっています。現状ブルー/グリーンデプロイやCodeCommitとの連携はできない状態ですが、今後のアップデートについては大いに期待できます。

まとめ

AWSでは、アプリケーションを高速開発するための様々なサービスが日々アップデートされています。それらには多種多様な機能がある一方で、できないことや、制約も存在します。機能と誓約を十分に理解し、CI/CD環境を整えることで、アプリケーションの高速開発を実現し、アプリケーションの競争力を高めていきましょう。