AWS CodeBuildでS3にあるソースコードをビルドする方法

投稿者: | 2020-12-24

前回はAWS CodeCommitのリポジトリの設定方法について解説しました。今回はAWS上でテスト、ビルドを行うCodeBuildを使い、S3上にあるJavaのソースコードをMavenを使いビルドする方法を解説します。

CodeBuildとは

AWS CodeBuildとは、AWS上でソースコードのビルド、テストを実行できるサービスです。

開発したソースコードをビルドするには、手動やスクリプトを使用する方法やMavenやGradle等のビルドツールを使用する方法があります。ビルドツールを使用する方法が一般的ですが、ビルド専用のPCやサーバを準備したり環境構築・運用に手間がかかります。

AWS CodeBuildでは、AWS上にビルド用の環境を簡単に準備することができます。CodeBuildを使用すると、ビルド専用のPCやサーバが不要となり、AWS上にビルド環境を素早く構築することができます。また、CodeBuildはビルド時のテストレポートやコードカバレッジの出力も実施することができるため、テストの進捗やコードの品質を確認することもできます。

CodeBuildは単体のビルドサービスとしても使用できますが、CodeCommitやCodeDeploy等のサービスと組み合わせることで、AWS上にCI/CD環境を構築することもできます。

料金はビルドにかかった時間に応じて支払う従量課金制となっています。使用頻度によってはビルド用のPCやサーバを準備する分より安くなる可能性もあります。

上記のことから、CodeBuildはAWS上で手軽にビルド・テストの環境を構築し、ソースコードのビルドやテストを素早く実施できるサービスです。

S3バケットの作成

初めに、CodeBuild用のS3バケットを作成します。S3コンソール画面から「バケットを作成」をクリックします。

バケット名を入力し、残りの設定はデフォルト値のまま「バケットを作成」をクリックします。今回はバケット名を「codebuildtest」とします。

バケットが作成されたことを確認します。

バケット作成後、バケット内にアーティファクト出力用のフォルダを作成します。作成したcodebuildtestバケットのリンクをクリックし「フォルダの作成」をクリックします。

フォルダ名を入力し「フォルダの作成」をクリックします。今回は「output」という名前のフォルダを作成します。

フォルダが作成されたことを確認します。

ソースコード、pom.xmlの作成

S3バケットとフォルダの作成後、ビルド用のソースコード、Mavenプロジェクト用のpom.xmlファイルを作成します。今回の最終的なフォルダ構成は以下の通りとなるため、事前にフォルダを作成しておいてください。

・source.zip
│  buildspec.yml
│  pom.xml
└─src
    └─main
        └─java
                Sample.java

初めにビルド用のソースコード・Sample.javaを作成します。ソースの内容は以下のとおりです。

■Sample.java
------------------------------------------------------------
public class Sample {

    public static void main(String[] args) {

        String hello = "Hello ";
        String build = "CodeBuild!";
        System.out.println(hello + build);
    }
}
------------------------------------------------------------

次に、Mavenプロジェクト用のpom.xmlファイルを作成します。

■pom.xml
------------------------------------------------------------
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
  <modelversion>4.0.0</modelversion>
  <groupid>sample</groupid>
  <artifactid>Sample</artifactid>
  <version>1.0</version>
  <packaging>jar</packaging>
  <name>Java Sample App</name>
  <dependencies>
    <dependency>
      <groupid>junit</groupid>
      <artifactid>junit</artifactid>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>	
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupid>org.apache.maven.plugins</groupid>
        <artifactid>maven-compiler-plugin</artifactid>
        <version>3.8.0</version>
      </plugin>
    </plugins>
  </build>
</project>
------------------------------------------------------------

buildspec.ymlの作成、zip化

ソースコード、Mavenプロジェクト用のpom.xmlを作成後、CodeBuildでどのようなランタイムを使用するか等の設定をまとめたbuildspec.ymlファイルを作成します。

■buildspec.yml
------------------------------------------------------------
version: 0.2

phases:
  install:
    runtime-versions:
      java: corretto11
  pre_build:
    commands:
      - echo Nothing to do in the pre_build phase...
  build:
    commands:
      - echo Build started on `date`
      - mvn install
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - target/Sample-1.0.jar
------------------------------------------------------------

buildspec.ymlファイル作成後、ソースコード、pom.xml、buildspec.ymlをzip化します。zip化する際はそれぞれのファイルを選択した上でzip化を行ってください。今回はLhaplusを使用してzip化しています。

zip後、作成されたファイル名を「source.zip」に変更します。

zip化の完了後、作成したzipファイルをS3へアップロードします。作成したcodebuildtestバケットからアップロードをクリックします。

「ファイルを追加」から「source.zip」を選択し「アップロード」をクリックします。

zipファイルがアップロードされたことを確認します。

ビルドプロジェクトの作成

ソースファイルの準備後、CodeBuildでビルドプロジェクトを作成します。CodeBuildのコンソール画面の左ペインから「ビルドプロジェクト」を選択し、「ビルドプロジェクトを作成する」をクリックします。

「ビルドプロジェクトを作成する」画面の設定は以下の内容とします。設定のない項目はデフォルト値とします。設定後「ビルドプロジェクトを作成する」をクリックします。

プロジェクト名 testproject
説明 This is a test project.
ソースプロバイダ Amazon S3
バケット codebuildtest
S3 オブジェクトキーまたは S3 フォルダ source.zip
環境イメージ マネージド型イメージ
オペレーティングシステム Amazon Linux 2
ランタイム Standard
イメージ aws/codebuild/amazonlinux2-x86_64-standard:3.0
イメージのバージョン aws/codebuild/amazonlinux2-x86_64-standard:3.0-20-09-14
環境タイプ Linux
サービスロール 新しいサービスロール
サービスロール名 codebuild-testproject-service-role
ビルド仕様 buildspecファイルを使用する
アーティファクトタイプ Amazon S3
バケット名 codebuildtest
名前 output

プロジェクトが作成されたことを確認します。

ビルドの実行

ビルドプロジェクト作成後、S3にアップロードしたソースファイルをビルドします。プロジェクトの画面から「ビルドを開始」をクリックします。

「ビルドを開始」画面の設定内容は変更を行わず「ビルドを開始」をクリックします。ビルド中は数分かかるため、ビルドが完了するまで待ちます。

ビルドステータスが「進行中」から変更され、ビルドが成功したことを確認します。

出力ファイルの確認

ビルド成功後、出力先に指定したS3のoutputフォルダを確認します。outputフォルダ内に「target」というフォルダが作成されているため、その中に「Sample-1.0.jar」ファイルが作成されたことを確認します。