今日はなにの日。

気になったこと勉強になったことのメモ。

今日は、AWS CodeBuildについて軽くまとめたの日。

目次

とある日

先日TerrafromでAWS CodeBuildを使ってECRにDocker image をビルドしました。

いろいろな記事を見ながらいい感じでやったのでCodeBuildについてあまり知らないままやったのでドキュメントを見ながらできることなどを調べた内容を記録します。

AWS CodeBuild

継続的スケーリングによるコードのビルドとテスト費用は構築する回数分のみ

AWS CodeBuild はクラウドで動作する、完全マネージド型のビルドサービスです。CodeBuild はソースコードコンパイルし、単体テストを実行して、すぐにデプロイできるアーティファクトを生成します。CodeBuild では自分のビルドサーバーをプロビジョニング、管理、スケールする必要がありません。Apache Maven、Gradle などの一般的なプログラミング言語とビルドツール用のパッケージ済みのビルド環境を提供します。ビルド環境をカスタマイズして、CodeBuild で独自のビルドツールを使用することもできます。CodeBuild はピーク時のビルドリクエストに合わせて自動的にスケーリングします。

AWS CodeBuild でビルドを計画する

ソースコードはどこにありますか? CodeBuild は現在、次のソースコードリポジトリプロバイダからのビルドをサポートしています。ソースコードには、ビルド仕様 (buildspec) ファイルが含まれている必要があります。ビルド環境は、CodeBuild がビルドを実行するために使用するオペレーティングシステムプログラミング言語ランタイム、およびツールの組み合わせを表します。buildspec は、ビルドプロジェクト定義で宣言できます。

どこからソースコードを取ってくるかを指定できます。

Bitbucket

知らないので調べてみた。

Bitbucket は、Mercurial(2020年6月1日までのリリース[1])またはGit(2011年10月以降[2])リビジョン管理システムを使用するソースコードおよび開発プロジェクト向けに、アトラシアンが運営するWeb ベースのバージョン管理リポジトリホスティングサービスである。

CodeBuild のビルド仕様に関するリファレンス

このトピックでは、ビルド仕様 (buildspec) ファイルに関する重要なリファレンス情報を提供します。ビルド環境は、CodeBuild がビルドを実行するために使用するオペレーティングシステムプログラミング言語ランタイム、およびツールの組み合わせを表します。buildspec をソースコードの一部として含めることも、ビルドプロジェクトの作成時に buildspec を定義することもできます。ビルド仕様の仕組みについては、「CodeBuild の仕組み」を参照してください。

ビルドするときのコマンドとかをまとめて記述するためのものです。

CodeBuild自体に設定することも可能ですが、CodeCommitと連携するとCodeCommitでアップロードしたbuildspec.yamlを自動的に判別してくれます。

ただ、CodeBuildにbuildspecの設定をしてなくてCodeCommitでもアップロードしてないとエラーになります。

yamlファイルがないのでできませんって。

buildspecにいろいろなコマンドかけるので、Docker imageでうまくいかないときはdocker imagesなどを追加してimageが作成されているかを確認できる。

公式にDocker imageを作成する際のbuildspecの記述がある。

https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/sample-docker.html#sample-docker-files

version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...          
      - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
      - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG      
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG

Docker imageをECRにアップロードしたいときに使用したサービス。

ただ、いい感じにやってくれると思ったら、buildspecとかで指定する必要があった。

参考資料

https://d1.awsstatic.com/webinars/jp/pdf/services/20201125_AWS_BlackBelt_AWS_CodeBuild.pdf