AWS CodeBuildを使ってソースコードをビルドする




どうも高妻です。Twitterでプログラミングのことや暗号通貨のことをつぶやいているのでよかったらフォローしてください。  

CodeBuildとは

AWSのマネージドサービスでソースコードのビルドができるのがCodeBuildできます。今回はSpring BootでKotlinを使ったソースコードを実際にビルドします。

環境

環境はざっくりこんな感じです。

  • Kotlin v1.1.4-3
  • Java v1.8.0_121
  • Spring Boot v1.5.6.RELEASE
  • Spring Cloud v1.2.1.RELEASE

CodeBuildのプロジェクト作成

ビルド対象

ビルドする対象のソースコードは複数から選べます。自分は今回Code Commitにソースコードを置いているのでCode Commitを選択しました。

環境とビルド方法

デフォルトだと下記のようにUbuntuがOSとして用意されています。まあこれでもいいんですが日本人はlinuxを使う人が多いと思うのでビルドマシンも合わせておきたいですよね?

別のOSを使うにはDockerイメージの指定を選択して環境タイプをLinux、カスタムイメージをその他にします。

カスタムイメージIDには下記リンクから好きな環境を選択して指定すればいいかと思います。

http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/build-env-ref.html#build-env-ref-available

ビルド仕様というところでどうやってビルドするか決めることができ、その方法は2つあります。

  1. 直接コマンドを指定する
  2. ビルド方法を記述したbuildspeck.ymlというファイルをソースコードのルートディレクトリにおく

とりあえずビルドするだけの場合は下記のようにするといいです。

出力ファイルという所には生成されるファイルまでのパスを設定します。gradleの初期設定ではルートディレクトリからbuild/lib/プロジェクト名-0.0.1-SNAPSHOT.jarという風に出力されるので下記のように設定します。

これらをbuildspec.ymlで管理する場合は下記のようにしてください。コマンドが複雑になってくるときはこっちで管理するのがいいかと思います。

filesの指定は./から始めるのがきもです。

アーティファクト

いきなり聞きなれないアーティファクトという単語が出てきます。こうゆう単語が出てくるだけで最初はわけわからなくなるからやめてほしいですね。

アーティファクトとはビルドの結果として生成されるもののことを指しています。なので、jarやwarであったりファイルのことを指しています。

ここではこの成果物を最終的にS3のどこに配置するか決めれます。好きなようにフォルダ名も決めれるし、フォルダ名にビルドIDを含めることもできます。

サービスロール

サービスロールがない場合は作成にチェックを入れるだけでいいです。

VPC

ここの設定に一番ハマりました。VPCはいつも使っているものでいいです。注意すべきはサブネットの設定です。

注意書きにも書かれているのですがサブネットにNATを設定したものでなければいけません。なのでデフォルトのVPCにセットされているサブネットとは別にサブネットを作成し、そのサブネットのルートテーブルにNATを設定しなければいけません。

これに気づかず自分は結構時間を無駄にしました。。。なぜこんな設定をしなければいけないのかというと、まずCodeBuildがVPCの外にあるサービスというのが前提です。

となると、CodeBuildを使ってソースコードのテストを実行する際にVPCの中に入っていないとデータベースとかその他のリソースへのアクセスができずに色々と不都合が起こりますよね?そのためこんな設定をしなければいけないのかなと思っています。

間違っていたら教えてください。

まとめ

コードビルドは自分でビルドマシンを用意しなくていいし、CodePipelineやCodeDeployと組み合わせるとより一層強力なサービスとなるのでぜひ試してみてください。

ちなみにビルドマシンのスペックはこの中から選べますし、環境変数も設定できるので割と柔軟に使えるのではないかと思っています。

次回はCodePipelineとCodeDeployと連携する仕組みについて紹介したいと思います。







コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です