AWS CodeBuildを使ってビルドプロセスを効率化する
目次
AWS CodeBuildとは
AWS CodeBuildは、Amazon Web Services(AWS)が提供するマネージド型のビルドサービスです。ビルドとは、アプリケーションのプログラミングを行ったあと、実際に動くプログラムを作り出す作業のことを言います。このサービスは、ソースコードのビルド、テスト、およびデプロイを自動化します。どのようにビルドのプロセスが行われるのか、従来のビルドサービスと比較してどのような点が優れているのか、本記事で解説します。
AWS CodeBuildの仕組み
AWS CodeBuildの仕組みは非常にシンプルかつ効率的です。基本的な流れは次のようになります。
- ソースコードの取得…CodeBuildは、GitHub、AWS CodeCommit、S3バケットなどのソースコードが保存されているリポジトリからソースコードを取得します。
- ビルドプロセスの定義…ビルドのステップは、buildspec.ymlという設定ファイルで定義します。このファイルには、どのコマンドを実行するか、どのアーティファクト(ビルドによって生成されたファイルのこと。例えば、バイナリやライブラリ)を生成するかなどが記述されています。
- ビルドの実行… CodeBuildは、指定された環境(例えば、特定のプログラミング言語やフレームワークを持つDockerコンテナ)を起動して、ビルドを実行します。
- アーティファクトの保存…ビルドが成功すると、生成されたアーティファクト)を指定された場所(S3バケットなど)に保存します。
- 結果の通知…最後に、ビルド結果がAmazon SNSなどのサービスを通じて通知されます。エラーが発生した場合、詳細なログを確認することで迅速に問題を特定することが可能です。
CodeBuildの特徴・利点
CodeBuildの特徴とは?
AWS CodeBuildの最大の特徴は、完全にAWSにより管理された、SaaSのようなビルド環境を提供する点です。これにより、ビルドサーバーの管理やメンテナンスの手間が一切不要になります。CodeBuildは、裏でDockerコンテナを活用しているサービスであるため、必要に応じてさまざまな環境を簡単にセットアップできます。例えば、異なるプログラミング言語やフレームワークを使用するプロジェクトでも、簡単にビルド環境を構築したり、切り替えて利用したりすることができます。さらに、CodeBuildはスケーラビリティに優れています。AWSのインフラを利用することで、ビルドの需要が急増しても、簡単にリソースを拡張します。そのため、実行における待ち時間を抑えることができます。また、使用した分だけ課金される従量課金制を採用しているため、コスト効率も非常に高いです。
CodeBuildの利点とは?
環境構築の手間を大幅に省ける
従来のビルドプロセスでは専用サーバーを準備し、例えばJenkinsなどのミドルウェアをインストールするといった手順が必要でした。加えて、それを維持するためのコストと時間がかかっていました。CodeBuildを使うことで、これらの手間を省いて簡単に環境を用意することができます。
サービス連携が容易
CodeBuildは他のAWSサービスとの連携が容易です。例えば、AWS CodePipelineを使ってCI/CDパイプラインを構築し、ビルド、テスト、デプロイの各ステージを自動化することが可能です。これにより、より効率的な開発プロセスを実現できます。また、AWSEventBridgeによりスケジュールを設定して提示でビルドを実行することや、Cloudwatchを用いることでビルド中のログを確認する、といった運用も可能です。これらの連携は、Codepipelineのコンソールや、CodeBuildのコンソールから数分で設定することができます。
キャッシュ機能によるビルドの高速化
CodeBuildにはビルドのキャッシュ機能が存在します。この機能を活用することで、ビルド時間をさらに短縮することが可能です。頻繁に変わらない依存関係やライブラリをキャッシュしておくことで、次回のビルド時に再ダウンロードする必要がなくなり、その分の時間が節約できます。
AWS CODEシリーズを活用して柔軟な開発環境を実現するスタイルズのDevOps(CI/CD)導入支援サービスはこちら→
AWS CodeBuildのセキュリティ
CodeBuildは基本的なAWSのセキュリティサービスを簡単に利用可能です。
- アーティファクトなどの暗号化…CodeBuildが出力するアーティファクトについて、KMSを用いて暗号化することが可能です。また、アーティファクトを保存する際の通信はAWS内部の通信経路を暗号化されながら通るため、インターネット等に漏洩することがありません。
- IAMロールの利用…CodeBuildはアーティファクトをアップしたり、コードを取得するためにほかのAWSサービスと連携することがあります。その際は、IAMロール(サービスロール)を使用して認証・認可を行います。
AWS CodeBuildで何ができる?
CodeBuildは先述のとおり、コンテナを起動してコマンドを実行し、ファイル(アーティファクト)を生成するサービスです。これにより、コードのビルドだけでなくほかの用途にも利用できる可能性を持っています。具体例を見ていきましょう
- Lambdaの代わり…AWS Lambdaは実行時間に制限があったり、利用できるメモリなどのリソースに制限があったりします。どうしても長時間の処理が必要であればCodeBuildも選択肢に入るでしょう
- ETL処理…簡単なデータ加工も可能です。S3からデータをダウンロードし、データを加工し、アーティファクトとしてS3に返すといった動きが可能です。
- 簡単な運用…EC2などに対してSSHなどでコマンドを実行するような簡単な運用が可能です。
ただし、LambdaやETL用のAWS Glueなど、すでにサービスとして成立しているものがあるので、例として挙げた事例はあくまでも料金などを比較して利用するといいでしょう
「AWS CodeBuild」の利用手順について
CodeBuildを利用するための手順を記載します。総じて、早ければ数分で利用が可能になります。
- プロジェクトの作成…AWSマネジメントコンソールにログインし、「CodeBuild」を選択します。「ビルドプロジェクトの作成」をクリックし、プロジェクト名を設定します。
- ソースリポジトリの指定…ソースコードのリポジトリを選択します。GitHub、AWS CodeCommit、S3などから選択できます。
- ビルド環境の設定…使用するプラットフォームやランタイム環境を選びます。ここでDockerイメージも指定できます。
- ビルドの設定…buildspec.ymlファイルを使用して、ビルドコマンドや出力アーティファクトの設定を行います。ファイルはコンソール上でも編集することができます。
これで、ビルドの実行ができるようになります。
ちょっと進んだAWS CodeBuild
- ローカルでの利用…buildspec.ymlが本当に稼働するのか、何回もテストをしていると料金を無駄にしてしまいます。CodeBuildはローカルにエージェントをインストールすることで、ローカルで実行することができます。これにより、AWS上で何回もテストする、というコストを回避することができます。
- テストレポートの出力…buildspec.ymlに出力内容を記載することで、単体テストなどのテスト結果をレポート形式で出力することができます。XMLファイルなど、様々な出力形式の選択が可能です。
- VPC内起動…LambdaのようにCodeBuildもVPC内で起動することができます。例えばEC2など、VPC内にあるリソースに対してアクセスする要件や、セキュリティ上の要件がある場合はVPC内で起動するといいでしょう。
AWS CODEシリーズを活用して柔軟な開発環境を実現するスタイルズのDevOps(CI/CD)導入支援サービスはこちら→
まとめ
AWS CodeBuildは簡単に構築できるソースコードのビルドサービスです。従来のサーバーにミドルウェアをインストールする形式と比較して、数ステップで環境の用意ができ、運用も非常に容易です。また、CodePipelineといったAWSの様々な機能と連携することで、アプリケーションのデプロイを自動化することができます。ビルドだけでなく様々な機能に応用が可能なので、利用方法については専業のベンダーに相談してみてもいいでしょう。