はじめに
この記事の内容
CodeBuildについて、「基礎学習」と「ハンズオン」の2パートに分けて解説します。
- 基礎学習
- 概要
- 構成要素
- メリット
- コンピューティングの違い
- 料金
- ハンズオン
- GitHubに格納しているソースコードを、CodeBuildでビルドしてその成果物をS3に出力する。
試験範囲との関係
この記事の内容は、認定資格「AWS Solution Architect Professional」の試験範囲をカバーします。
認定資格取得を目指す方は…
この記事では基礎的な内容のみを扱っているため、資格取得を目指す方はUdemyや書籍での自主学習も併せて行うことを推奨します。
①基礎学習
ハンズオンの前に、まずはCodeBuildの基礎知識を解説します。
CodeBuildの概要
CodeBuildは、クラウドベースの継続的インテグレーション(CI)サービスです。
コードのビルド、テスト、パッケージングを自動化することができます。
用語説明
- 継続的インテグレーション(CI)
-
開発者が修正後のソースコードをリポジトリに統合し、自動テストを行う開発手法。
これによって、バグや競合を早期に発見し迅速に修正できるので、ソフトウェアの品質向上と開発効率の改善につながります。
- ビルド
-
ソースコードを実行可能なプログラムに変換するプロセス。
- テスト
-
開発中または完成したソフトウェアが期待通りに動作するかを検証するプロセス。
- パッケージング
-
ソフトウェアを配布や展開が容易な形式にまとめるプロセス。
これには、実行可能ファイル、ライブラリ、設定ファイル、ドキュメントなどの必要な要素を一つのパッケージにまとめ、ターゲット環境で簡単にインストールや実行ができるようにすることが含まれます。
CodeBuildの構成要素
CodeBuildの主な構成要素について説明します。
No. | 構成要素 | 説明 |
---|---|---|
1 | ソース | ビルドプロジェクトのソースコードの場所を指定します。これは通常、GitHubやAWS CodeCommitなどのリポジトリです。 |
2 | 環境 | ビルドが実行される環境を定義します。これには、オペレーティングシステム、ランタイム、ツールなどが含まれます。 |
3 | BuildSpec | ビルドプロセスの詳細な手順を記述するYAMLファイルです。フェーズごとに実行するコマンドを指定します。 |
4 | アーティファクト | ビルドプロセスの出力結果を保存する場所を定義します。通常、S3バケットに保存されます。 |
5 | トリガー | ビルドを自動的に開始するイベントを設定できます。例えば、コードがリポジトリにプッシュされたときなどです。 |
6 | ビルドプロジェクト | 上記の要素を組み合わせて、1つのビルドプロジェクトとして定義します。 |
CodeBuildを利用するメリット
CodeBuildを使用することで、開発者はインフラストラクチャの管理や設定に時間を費やすことなく、コードの品質向上に集中できます。
- 自動化と一貫性
- ビルド、テスト、パッケージングのプロセスを自動化し、常に一貫した環境で実行することで、人為的ミスを減らし、品質を向上させることができます。
- インフラ管理の簡素化
- 独自のビルドサーバーを設置・維持する必要がなく、AWSが管理するスケーラブルな環境でビルドプロセスを実行できます。
- コスト効率
- 使用した分だけ課金される従量課金制のため、特にビルド頻度が不定期な場合にコスト効率が高くなります。
CodeBuildのコンピューティングの違い
CodeBuildでは、コンピューティングサービスを「EC2」と「Lambda」から選択できます。
それぞれの特徴は以下のとおりなので、実行するタスクの内容や実行環境の要件を基にして選択してください。
- EC2
-
仮想サーバーで、設定や管理が必要です。
起動に時間がかかることがありますが、長時間の処理や複雑な設定が可能です。 - Lambda
-
サーバーレスで、インフラの管理が不要です。
短時間で実行できるタスクや、特定のイベントに応じて自動で処理が行えます。
特徴 | EC2 | Lambda |
---|---|---|
実行環境 | 仮想サーバー | サーバレスコンピューティング |
スケーリング | 手動でスケール調整が必要 | 自動でスケール調整される |
コスト | 高い | 低い |
管理 | インスタンスの管理・設定が必要 | インフラ管理が不要 |
柔軟性 | 高いカスタマイズ性がある | 固定のランタイム環境 |
使用シナリオ | 長時間実行するタスク 特定の環境設定が必要 | 短時間で終了するタスク イベント駆動の処理 |
CodeBuildの料金
以降は2024年9月時点の情報のため、現在の料金を把握したい方はAWSの公式サイトをご確認ください。
コンピューティング:EC2の場合
EC2の場合は「オンデマンド」と「リザーブドキャパシティ」の2種類があります。
- オンデマンド料金
-
ビルド時間に応じて料金が発生します。
スクロールできますインスタンスタイプ メモリ vCPU ビルド1分当たりの料金(Linux) arm1.small 3 GB 2 0.00425USD general1.small 3 GB 2 0.005USD arm1.medium 8 GiB 4 0.009USD - リザーブドキャパシティー料金
-
事前に一定期間分の料金を支払います。
スクロールできますインスタンスタイプ メモリ vCPU ビルド1分当たりの料金(Linux) arm1.small 3 GB 2 0.00255USD general1.small 3 GB 2 0.003USD arm1.medium 8 GiB 4 0.0054USD
コンピューティング:Lambdaの場合
ビルド時間に応じて料金が発生します。
Lambda コンピューティングタイプ | メモリ | ビルド 1秒当たりの料金 |
---|---|---|
lambda.arm.10GB | 10 GB | 0.0001USD |
lambda.x86-64.10GB | 10 GB | 0.0002USD |
lambda.arm.8GB | 8 GB | 0.00008USD |
②ハンズオン
GitHubに格納しているAngularのソースコードをCodeBuildでビルドし、その成果物をS3に出力します。
解説動画
以降の手順ではAWSの画面キャプチャを貼付していないので、こちらの解説動画を視聴しながらハンズオン学習することをおすすめします。
前提条件
- AWSアカウントを所持していること
- GitHubのアカウント登録が完了していること
- Gitがインストールされていること
- GitHubにサンプルアプリをプッシュするために必要です。
- Node.jsがインストールされていること
- Angularでサンプルアプリを作成する際に必要です。
構築手順
- 以下サイトを参考にして、Angularで新規プロジェクトを作成します。
- 作成したプロジェクトをGitHubのリポジトリにプッシュします。
ビルド成果物をアップロードするためのS3バケットを作成します。(特別な設定は不要です。)
以下サイトを参考にして、GitHubの個人用アクセストークンを取得します。
GitHubのソースコードをビルドして、その成果物をS3に格納するためのビルドプロジェクトを作成します。
- CodeBuildのコンソール画面に遷移して、左側のメニューから「ビルドプロジェクト」を選択します。
- 画面右上の「プロジェクトを作成する」を選択します。
- 以下設定のビルドプロジェクト作成します。
カテゴリ | 項目 | 設定値 |
---|---|---|
プロジェクトの設定 | 名前 | 任意の名前 |
ソース | ソースプロバイダ | GitHub |
認証情報 | カスタムソース認証情報 | |
認証情報タイプ | 個人用アクセストークン | |
接続 | 「新しいシークレットを作成」リンクより、Step3で作成したアクセストークンをSecrets Managerに登録します。 | |
リポジトリ | GitHub アカウントのリポジトリ | |
GitHubリポジトリ | サンプルアプリを格納しているリポジトリのURL | |
環境 | プロビジョニングモデル | オンデマンド |
環境イメージ | マネージド型イメージ | |
コンピューティング | Lambda | |
サービスロール | 新しいサービスロール | |
ロール名 | 任意の名前 | |
Buildspec | ビルド仕様 | ビルドコマンドの挿入 |
ビルドコマンド | (「【補足】BuidSpecのサンプルソース」を張り付けてください。) | |
アーティファクト | タイプ | Amazon S3 |
バケット名 | Step2で作成したバケット名 |
上記以外の項目はデフォルト値のままで作成してください。
ビルドプロジェクトを開始して、ビルド成果物がS3に格納されるかを確認します。
- Step4で作成したビルドプロジェクトを選択して、「ビルドを開始」を選択します。
- ビルドプロジェクトの全処理が完了したら、アーティファクトの出力先に設定したS3バケットを確認し、ビルド成果物が格納されているかを確認します。
S3に格納されるビルド成果物は以下の通りです。
- browser/
-
Angularアプリケーションのビルド成果物のうち、ブラウザでのアプリケーション実行に必要な静的ファイルが格納されています。
具体的には、index.html
やJavaScript、CSSファイルなどが含まれます。 - server/
-
Angularアプリケーションのビルド成果物のうち、サーバーサイドでのアプリケーション実行に必要なファイルが格納されています。
具体的には、サーバーサイドアプリケーションのエントリーポイントや、サーバーで実行するために必要なサーバーサイドのファイルが含まれます。 - 3rdpartylicenses.txt
-
アプリケーションで使用されているサードパーティライブラリのライセンス情報が記載されたテキストファイル。
- prerendered-routes.json
-
アプリケーションのプリレンダリングされたルートの情報を含んでいるファイルです。
プリレンダリングされたルートの情報を提供することで、サーバーサイドで生成されたコンテンツをクライアントサイドで効率的に使用できるようになります。
【補足】BuildSpecのサンプルソース
Angularのソースコードをビルド・テスト・パッケージングする際の、サンプルのBuildSpecは以下です。
version: 0.2
phases:
install:
commands:
- echo Installing dependencies...
- npm install -g npm@latest
- npm install
pre_build:
commands:
- echo Pre-building steps...
build:
commands:
- echo Building the Angular app...
- npm run build -- --configuration production
post_build:
commands:
- echo Post-building steps...
- echo Build completed on `date`
artifacts:
files:
- '**/*'
base-directory: dist/
cache:
paths:
- 'node_modules/**/*'
おわりに
本記事では、AWS CodeBuildの基本概念と実際のビルドプロセスについて解説しました。
CodeBuildを活用することで、CI/CDパイプラインを効率的に構築でき、ソフトウェアのビルドとデプロイを自動化できます。
クラウドアプリケーション開発において、CodeBuildは不可欠なツールの一つです。
本記事を参考に、プロジェクトに最適なビルド戦略を検討してみてください。
コメント