そもそも、CodeBuildとは?

AWS CodeBuildとは、クラウド内の完全マネージド型のビルドサービスです。CodeBuildでは、ソースコードのコンパイル、テストの実行、デプロイ可能なパッケージの生成を行うことができます。

<aside> 💡 CodeBuildのメリット

完全マネージド型 ビルドサーバーのセットアップ、パッチ適用、更新、管理を全てAWSが行ってくれます。ピーク時のビルドリクエストに合わせて自動的にスケーリングしてくれます。

オンデマンド ビルドのニーズに合わせてオンデマンドでスケーリングされます。料金は、使用したビルド分数に対してのみ発生します。

すぐに使える 一般的なプログラミング言語でのビルド環境を提供し、最初のビルドを開始するには、ビルドスクリプトを指定するだけです。

</aside>

案件内での活用例

マスタ情報連携バッチやもろもろのデータの差分取得バッチなどのバッチを定期的に実行しています。(見た感じ、他にもたくさんビルドプロジェクトはあるっぽいですが、割愛します...)

流れとしては、こんな感じ(のハズ)です...

  1. ソースコードの編集とアップロード(CodeCommitにプッシュ)
  2. buildpsec.ymlファイル(仕様書)の作成とアップ(CodeCommitにプッシュ)
  3. ビルドプロジェクトを作成(CodeBuild上で作成)
  4. ビルドを開始する

2のbuildspec.ymlは、当案件ではこんな感じでした。

version: 0.2

env:
  variables:
    # 本番、ステージングは違うシークレットIDをCodeBuildジョブの現物に指定する
    SECRETS_MANGER_SECRET_ID: "サンプル"

phases:
  pre_build:
    commands:
      # "FATAL: Listen error: unable to monitor directories for changes." 対策。
      # これの設定するためCodeBuildジョブは 特権付与=True として動かす必要がある
      - sysctl -w fs.inotify.max_user_watches=524288
      # SecretsManagerからシークレットまるごと持ってきて、加工して、環境変数に取り込む
      - ${APP_ROOT}/bin/secretsmanager_to_envvar.sh "${SECRETS_MANGER_SECRET_ID}" | sort >> ${APP_ROOT}/bin/envvar.sh
      - . ${APP_ROOT}/bin/envvar.sh
  build:
    commands:
      - cd ${APP_ROOT}
      - rake batch:サンプル

<aside> 💡 version : buildspecのVersion(必須) env : 環境変数 phases : CodeBuildでは書くフェーズごとに実行する内容を分けることが可能  pre_build : ビルド前に実行するコマンド  build : ビルド中に実行するコマンド

</aside>

*buildspec.ymlに記載する項目の詳細は、こちらをご参照ください(https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-syntax)。