0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】AWS Code シリーズ徹底入門 - ③ AWS CodeBuild 編

0
Posted at

001samune.png

概要

【初心者向け】AWS Code シリーズ徹底入門 - ③ AWS CodeBuild 編 です。

本記事では、AWS CodeBuild の機能について、マネジメントコンソールを実際に触りながら整理していきます。


機能一覧

ビルドプロジェクト

実行基盤の設定や定義ファイルなど、ソースコードの ビルド(コンパイル)/テスト実行/ソフトウェアパッケージの作成に必要な情報を定義するものです。
※設定項目については後述します。
image.png

レポートグループ

ビルドプロジェクトにてレポートを作成した場合に、そのレポートを解析しレビューを提供してくれる機能です。
image.png

解析するレポートの形式は以下に対応しています。

  • Cucumber JSON (.json)
  • JUnit XML (.xml)
  • NUnit XML (.xml)
  • NUnit3 XML (.xml)
  • TestNG XML (.xml)
  • Visual Studio TRX (.trx)
  • Visual Studio TRX XML (.xml)

レポートグループの使用方法は以下 2 つのどちらでも可能です。

  • レポートグループは事前に作成した上で、後述する定義ファイル(buildspec.yml) で指定する
  • レポートグループは事前に作成せず、後述する定義ファイル(buildspec.yml) で指定する
    ※この場合は自動でレポートグループが作成されます

ちなみに、レポートは テストコードカバレッジ に対応しています。
image.png

  • レポートを作成する場合は、CodeBuildのサービスリンクロールに権限を付与する必要があります

コンピュートフリート

CodeBuildにおいて、ビルドが開始されたときのフローは以下のとおりです。

  1. ビルドプロジェクトで設定した構成に従いコンピュートリソースがプロビジョニングされる
  2. そこで定義ファイル(buildspec.yml)に従ってビルド処理が実行さる
  3. ビルドが終了するとプロビジョニングされたコンピュートリソースは破棄される

つまり、ビルド実行にコンピュートリソースの起動時間がかかります。

ビルド実行時間を少しでも削減したいといったときに本機能が役に立ちます。
本機能は、ビルド実行コンピュートリソースを常時起動させるものです。
コンピュートフリートを作成した時点から、ビルド実行コンピュートリソースが起動され続けることになります。
後述しますが、作成後はビルドプロジェクトの設定項目にて指定し、利用することになります。
image.png
image.png

  • コンピュートリソースが常時起動しっぱなしになるので、その分コストが発生します

ビルドプロジェクト設定項目

Project configuration

本項目では、作成するビルドプロジェクト構成を設定します。
image.png

Project type

プロジェクトタイプには以下 2 つから選択可能です。

  • Default project
  • Runner project

image.png

特出すべきは Runner project で、こちらは、サポートされている CI/CD ツール (e.g. GitHub Actions 等) の runner が動作するためのコンピューティングリソースのみを提供するタイプとなります。

  • runner とは、実際にビルドやテストを実行するエージェントのことです
  • GitLab に内容は絞られていますが、わかりやすい 参考記事 を掲載します
Additional configuration

こちらは、プロジェクトタイプに関係なく設定可能な項目です。
image.png

それぞれの設定項目の内容は以下の通りです。

  • Public build acess: ビルドプロジェクトの結果やログ等を外部公開する項目
  • Build budge: ビルドプロジェクトのステータスをバッジで確認できるようになる
    image.png
  • Enable concurrent build limit: ビルドプロジェクトでのビルド同時実行制限する項目

Source

実際に「ビルドするソースコード」や「テストコード」、「定義ファイル(buildspec.yml)」が格納されている場所を定義します。
ビルドプロジェクトは、本項目で指定した Source からコードを取得し、定義ファイルに従い処理を実行します。

Source は複数指定可能です。
image.png

  • 定義ファイル(buildspec.yml) に関しては、Source になくても Buildspec セクションで直接定義することは可能です

現在、Source としてサポートされているものは以下の通りです。
image.png

  • 指定する Source に応じて設定項目が若干異なりますので、本記事では割愛します
Additional configuration
  • こちらも、指定する Source に応じて設定項目が若干異なりますので、本記事では割愛します

Runner

ビルドプロジェクトのコンピューティングリソースを利用する側の CI/CD プロバイダを設定します。
image.png

  • 指定する Runner provider に応じて設定項目が若干異なりますので、本記事では割愛します

現在、Provider としてサポートされているのは以下の通りです。
image.png

ちなみに、Provider と接続するための認証情報は、Connections というところから作成する必要があります。
image.png

Environment

ビルドを実行するコンピューティングリソースを設定します。
image.png

こちら で触れた通り、コンピュートフリートを利用する際は Reserved capacity とします。
image.png

ビルドを実行する環境の基盤としては、EC2 もしくは Lambda から選択が可能です。
image の選択がありますが、実際の処理は選択した基盤 (EC2 or Lambda) 上のコンテナで実行されます。その際のコンテナイメージを設定する箇所となります。
image は、AWS が CodeBuild 用に用意したイメージからか、ECR やその他外部リポジトリ で管理しているカスタムイメージから選択が可能です。
image.png

  • EC2 の場合は、コンテナではなくインスタンス上で直接実行する設定も可能です

サービスリンクロールは、ビルドプロジェクト(つまり CodeBuild) が他のAWSサービスへのAPIコールを実施する際に利用する IAMロールです。
image.png

Additional configuration

実行基盤(EC2 or Lambda)によって設定項目が変わるため割愛しますが、ここでは実行基盤のスペックや、EC2 の場合は タイムアウトや EFS 連携に関して設定することが可能です。
デフォルトでは、実行基盤は VPC 外で実行されますが、EC2 (On-demanad) の場合、指定すれば VPC 内で起動することが可能となります。ビルド処理等で VPC 内リソースと通信する必要がある場合に利用します。

Buildspec

Source から取得したコードに対して、どういった処理を実施するかを定義する項目になります。
定義ファイル(buildspec.yml) の構文は決まっています。詳細は以下リンクを参考にしてください。

Project typeDefault project の場合

指定方法は以下 2 つのどちらかとなります。

  • Insert build commands
  • Use a buildspec file

Insert build commands の場合は、ビルドプロジェクトに直接処理内容を記述する方法です。
image.png

Use a buildspec file の場合は、Source のルートディレクトリに格納されている 定義ファイル(buildspec.yml) を読み込み実行します。
Buildspec name を省略すると、上述した通り、Source のルートディレクトリに格納されている 定義ファイル(buildspec.yml) を読み込み実行します。そのため、Source 側で buildspec.yml というファイル名でルートディレクトリに格納しておく必要があります。

image.png

  • もちろん、Source に合わせる形で、Buildspec name を指定することは可能です
Project typeRunner project の場合

Runner project はあくまで runner の実行環境を提供するだけであり、デフォルトでは、Provider 側の定義を使用するようになっています。
image.png

ただし、定義ファイル(buildspec.yml) 構文の insert / pre_build / post_build に関しては上書くことが可能です。
image.png

Batch configuration

複数のビルド処理を並行して実行するための項目です。
image.png

  • マネジメントコンソールで設定する場合は、ビルドプロジェクトで実行する全てのビルド処理が対象となります
  • ビルドプロジェクト全体で有効にしたくない場合は、定義ファイル(buildspec.yml) で指定します

Artifacts

ビルド処理を実行した際に生成された成果物 (ソースコードの実行ファイル等) の格納先を指定します。
S3 のみ指定可能です。
image.png

  • 成果物がない場合は、No artifacts とすることも可能です
    image.png
  • マネジメントコンソールで設定する場合は、ビルドプロジェクトで実行する全てのビルド処理で生成される成果物が対象となります
  • ビルドプロジェクト全体で設定したくない場合は、定義ファイル(buildspec.yml) で指定します
  • ちなみに 定義ファイル(buildspec.yml) にて docker イメージを生成し、ECR等のリポジトリ に push することも可能です

Logs

ビルドプロジェクトのビルド実行ログを出力するための設定項目です。
CloudWatch Logss3 への出力が可能です。
image.png

トリガー

ビルドプロジェクト毎にトリガーを設定できます。
image.png

ただしこの設定は、以下の画像の通り、定期実行しか設定できません。
image.png

  • Source の変更をトリガーにしてビルドプロジェクトを実行するには別途設定が必要です
    ※厳密には、Source が GitHub 等のサードパーティツールの場合は、ビルドプロジェクト内の Webhook 設定があるので別途設定は不要となります

  • Webhook を使用しない場合は、原則 CodePipeline の設定が必要となります

  • Source が AWS サービスの場合は、EventBridge でも可能です

通知設定

ビルドプロジェクト毎に通知設定が可能です。
image.png

ビルドプロジェクトに対する特定のイベントが発生した際に、以下 3 つのターゲットへ通知を送信することができます。

  • SNS
  • Slack
  • Microsoft Teams
    image.png


まとめ(全体像)

今まで説明してきた内容の全体像は以下の通りです。
overview.png


おわりに

次回は AWS CodeDeploy 編 です!


🌟この記事が誰かの役に立てば幸いです!
また、ご質問やフィードバックもお待ちしています。


参考資料

リファレンス

ブログ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?