【初心者】CodeBuildを活用してGitHubのソースコードをBuildSpecでビルド【AWS資格対策】【実践ハンズオン】

目次

はじめに

この記事の内容

CodeBuildについて、「基礎学習」と「ハンズオン」の2パートに分けて解説します。

  • 基礎学習
    • 概要
    • 構成要素
    • メリット
    • コンピューティングの違い
    • 料金
  • ハンズオン
    • GitHubに格納しているソースコードを、CodeBuildでビルドしてその成果物をS3に出力する。

試験範囲との関係

この記事の内容は、認定資格「AWS Solution Architect Professional」の試験範囲をカバーします。

認定資格取得を目指す方は…

この記事では基礎的な内容のみを扱っているため、資格取得を目指す方はUdemy書籍での自主学習も併せて行うことを推奨します。

①基礎学習

ハンズオンの前に、まずはCodeBuildの基礎知識を解説します。

CodeBuildの概要

CodeBuildは、クラウドベースの継続的インテグレーション(CI)サービスです。

コードのビルド、テスト、パッケージングを自動化することができます。

AWS(AWS CodeBuild)

用語説明

継続的インテグレーション(CI)

開発者が修正後のソースコードをリポジトリに統合し、自動テストを行う開発手法。

これによって、バグや競合を早期に発見し迅速に修正できるので、ソフトウェアの品質向上と開発効率の改善につながります。

ビルド

ソースコードを実行可能なプログラムに変換するプロセス。

テスト

開発中または完成したソフトウェアが期待通りに動作するかを検証するプロセス。

パッケージング

ソフトウェアを配布や展開が容易な形式にまとめるプロセス。

これには、実行可能ファイル、ライブラリ、設定ファイル、ドキュメントなどの必要な要素を一つのパッケージにまとめ、ターゲット環境で簡単にインストールや実行ができるようにすることが含まれます。

CodeBuildの構成要素

CodeBuildの主な構成要素について説明します。

スクロールできます
No.構成要素説明
1ソースビルドプロジェクトのソースコードの場所を指定します。これは通常、GitHubやAWS CodeCommitなどのリポジトリです。
2環境ビルドが実行される環境を定義します。これには、オペレーティングシステム、ランタイム、ツールなどが含まれます。
3BuildSpecビルドプロセスの詳細な手順を記述するYAMLファイルです。フェーズごとに実行するコマンドを指定します。
4アーティファクトビルドプロセスの出力結果を保存する場所を定義します。通常、S3バケットに保存されます。
5トリガービルドを自動的に開始するイベントを設定できます。例えば、コードがリポジトリにプッシュされたときなどです。
6ビルドプロジェクト上記の要素を組み合わせて、1つのビルドプロジェクトとして定義します。

CodeBuildを利用するメリット

CodeBuildを使用することで、開発者はインフラストラクチャの管理や設定に時間を費やすことなく、コードの品質向上に集中できます。

  • 自動化と一貫性
    • ビルド、テスト、パッケージングのプロセスを自動化し、常に一貫した環境で実行することで、人為的ミスを減らし、品質を向上させることができます。
  • インフラ管理の簡素化
    • 独自のビルドサーバーを設置・維持する必要がなく、AWSが管理するスケーラブルな環境でビルドプロセスを実行できます。
  • コスト効率
    • 使用した分だけ課金される従量課金制のため、特にビルド頻度が不定期な場合にコスト効率が高くなります。

CodeBuildのコンピューティングの違い

CodeBuildでは、コンピューティングサービスを「EC2」と「Lambda」から選択できます。

それぞれの特徴は以下のとおりなので、実行するタスクの内容や実行環境の要件を基にして選択してください。

EC2

仮想サーバーで、設定や管理が必要です。
起動に時間がかかることがありますが、長時間の処理や複雑な設定が可能です。

Lambda

サーバーレスで、インフラの管理が不要です。
短時間で実行できるタスクや、特定のイベントに応じて自動で処理が行えます。

スクロールできます
特徴EC2Lambda
実行環境仮想サーバーサーバレスコンピューティング
スケーリング手動でスケール調整が必要自動でスケール調整される
コスト高い低い
管理インスタンスの管理・設定が必要インフラ管理が不要
柔軟性高いカスタマイズ性がある固定のランタイム環境
使用シナリオ長時間実行するタスク
特定の環境設定が必要
短時間で終了するタスク
イベント駆動の処理

CodeBuildの料金

以降は2024年9月時点の情報のため、現在の料金を把握したい方はAWSの公式サイトをご確認ください。

東京リージョンの料金を記載しています。
・料金のイメージが付きやすいように、一部タイプの料金のみを記載しています。

コンピューティング:EC2の場合

EC2の場合は「オンデマンド」と「リザーブドキャパシティ」の2種類があります。

オンデマンド料金

ビルド時間に応じて料金が発生します。

スクロールできます
インスタンスタイプメモリvCPUビルド1分当たりの料金(Linux)
arm1.small3 GB20.00425USD
general1.small3 GB20.005USD
arm1.medium8 GiB40.009USD
リザーブドキャパシティー料金

事前に一定期間分の料金を支払います。

事前予約する分、オンデマンドよりも料金は安く済みます。

スクロールできます
インスタンスタイプメモリvCPUビルド1分当たりの料金(Linux)
arm1.small3 GB20.00255USD
general1.small3 GB20.003USD
arm1.medium8 GiB40.0054USD

コンピューティング:Lambdaの場合

ビルド時間に応じて料金が発生します。

スクロールできます
Lambda コンピューティングタイプメモリビルド 1秒当たりの料金
lambda.arm.10GB10 GB0.0001USD
lambda.x86-64.10GB10 GB0.0002USD
lambda.arm.8GB8 GB0.00008USD

②ハンズオン

GitHubに格納しているAngularのソースコードをCodeBuildでビルドし、その成果物をS3に出力します。

ソースプロバイダには「CodeCommit」を利用するケースも多かったのですが、2024年7月に新規利用が終了してしまったので、代わりに「GitHub」を採用しています。

解説動画

以降の手順ではAWSの画面キャプチャを貼付していないので、こちらの解説動画を視聴しながらハンズオン学習することをおすすめします。

前提条件

  • AWSアカウントを所持していること
  • GitHubのアカウント登録が完了していること
  • Gitがインストールされていること
    • GitHubにサンプルアプリをプッシュするために必要です。
  • Node.jsがインストールされていること
    • Angularでサンプルアプリを作成する際に必要です。

構築手順

STEP
サンプルアプリの準備
  1. 以下サイトを参考にして、Angularで新規プロジェクトを作成します。
  1. 作成したプロジェクトをGitHubのリポジトリにプッシュします。
STEP
S3バケットの作成

ビルド成果物をアップロードするためのS3バケットを作成します。(特別な設定は不要です。)

STEP
GitHubの個人用アクセストークンを取得

以下サイトを参考にして、GitHubの個人用アクセストークンを取得します。

STEP
CodeBuildプロジェクトの作成

GitHubのソースコードをビルドして、その成果物をS3に格納するためのビルドプロジェクトを作成します。

  1. CodeBuildのコンソール画面に遷移して、左側のメニューから「ビルドプロジェクト」を選択します。
  2. 画面右上の「プロジェクトを作成する」を選択します。
  3. 以下設定のビルドプロジェクト作成します。
カテゴリ項目設定値
プロジェクトの設定名前任意の名前
ソースソースプロバイダGitHub
認証情報カスタムソース認証情報
認証情報タイプ個人用アクセストークン
接続「新しいシークレットを作成」リンクより、Step3で作成したアクセストークンをSecrets Managerに登録します。
リポジトリGitHub アカウントのリポジトリ
GitHubリポジトリサンプルアプリを格納しているリポジトリのURL
環境プロビジョニングモデルオンデマンド
環境イメージマネージド型イメージ
コンピューティングLambda
サービスロール新しいサービスロール
ロール名任意の名前
Buildspecビルド仕様ビルドコマンドの挿入
ビルドコマンド(「【補足】BuidSpecのサンプルソース」を張り付けてください。)
アーティファクトタイプAmazon S3
バケット名Step2で作成したバケット名

上記以外の項目はデフォルト値のままで作成してください。

STEP
ビルドの実行

ビルドプロジェクトを開始して、ビルド成果物がS3に格納されるかを確認します。

  1. Step4で作成したビルドプロジェクトを選択して、「ビルドを開始」を選択します。
  2. ビルドプロジェクトの全処理が完了したら、アーティファクトの出力先に設定した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は不可欠なツールの一つです。
本記事を参考に、プロジェクトに最適なビルド戦略を検討してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次