【re:Invent 2016】Code4兄弟に!「AWS CodeBuild」が発表されました!

記事タイトルとURLをコピーする

こんにちは、技術4課の多田です。

re:Invent盛り上がっていますね!
連日新しい機能やサービスのアナウンスが目白押しでワクワクが止まらなかったです!

さて、今回はCode系サービスに追加された「AWS CodeBuild」(以下、CodeBuild)を触ってみた結果をレポートします。
尚、AWSの発表記事はこちらです。

CodeBuildとは?

CodeBuildは、フルマネージドのビルドサービスになります。
このサービスによってビルドサーバの構築や運用を省力化が可能です。

特徴としては、次のようなものがあります。

  • ソースリポジトリは、CodeCommit、Github、S3から選択できる
  • ビルド可能な対象に、Android、Java、Python、Ruby、Go、Node.jsの他、Dockerが選択できる
  • ビルドに関する処理は、buildspecというYAML形式のファイルで制御する
  • ビルド後の出力ファイルは、KMSによる暗号化されていてセキュアに扱える
  • ビルドの実行は、コンテナベースの環境で実行している
  • ビルドのログは、CloudWatch Logsに出力される

料金は、分単位の課金となり、1分あたり$0.005の料金がかかります。
利用できるリージョンは、バージニア、オレゴン、アイルランドになります。

CodeBuildを試してみる

公式のチュートリアルに沿って触ってみます(英語のドキュメントになります)。

リージョンは、各サービスそれぞれバージニアを選択しております。

1、ソースコードの格納場所を作る

まず、ビルドするソースコードを格納する場所とビルド後のソースコードを格納する場所を作ります。

公式では、S3を使っていますが、折角なのでビルド前のソースコードはCodeCommitに格納します。
CodeCommitのセットアップについては割愛しますが、手順はこちらのブログに書きましたので、併せてご覧ください。

  • ビルド前のソースコードの格納場所:input-repo
  • ビルド後のソースコードの格納場所:20161202-ouputbucket

2、ソースコードを書く

CodeCommitのリポジトリを自分の端末に複製し、そのディレクトリ内で以下のようなディレクトリとファイルをチュートリアルに沿って作成します。

codebuid-repo
 pom.xml
 buildspec.yml
 | -- src
  | -- main
   | -- java
         -- MessageUtil.java
  | -- test
   | -- java
         -- TestMessageUtil.java

CodeBuildより新しく buildspec.yml にてビルド処理の内容を定義しています。このファイルがないと、CodeBuildで処理が実行できません。

定義内容は、以下の通りです。

version: 0.1

phases:
  install:
    commands:
      - echo Nothing to do in the install phase...
  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:
  type: zip
  files:
    - target/messageUtil-1.0.jar

それぞれのセクションの定義の意味としては次の通りです。

  • version:buildspec.ymlのバージョンを表しており、推奨値は、0.1となる
  • phase:ビルドの各段階ごとの処理のコマンドを定義するセクションになる
    • install:インストール処理を定義し、commandsで定義したものを一つずつ処理する
    • pre_build:ビルド前の処理を定義する
    • build:ビルドするときの処理を行う
    • post_build:ビルド後の処理を定義する
  • artifacts:ビルド後のファイルの出力先を指定する
    • type:ファイル形式を指定する場所になるが、ここではzipのみしか指定できない
    • files:出力するファイルのパスとファイル名を指定する

buildspec.ymlに関する詳細は、こちらをご覧ください(英語のドキュメントになります)。

3、ソースコードをCodeCommitに格納する

作成したビルドファイル群をCodeCommitに格納します。

$ git add -A
$ git commit -m "firest commit"
[master (root-commit) ef26508] first commit
Committer: Sadayoshi Tada <tada@Sadayoshi-no-MacBook-Pro.local>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

git config --global user.name "Your Name"
git config --global user.email you@example.com

After doing this, you may fix the identity used for this commit with:

git commit --amend --reset-author

4 files changed, 78 insertions(+)
create mode 100644 buildspec.yml
create mode 100644 pom.xml
create mode 100644 src/main/java/MessageUtil.java
create mode 100644 src/test/java/TestMessageUtil.java $ git push warning: push.default is unset; its implicit value has changed in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the traditional behavior, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push.default simple When push.default is set to 'matching', git will push local branches to the remote branches that already exist with the same name. Since Git 2.0, Git defaults to the more conservative 'simple' behavior, which only pushes the current branch to the corresponding remote branch that 'git pull' uses to update the current branch. See 'git help config' and search for 'push.default' for further information. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 'current' instead of 'simple' if you sometimes use older versions of Git) Counting objects: 11, done. Delta compression using up to 4 threads. Compressing objects: 100% (7/7), done. Writing objects: 100% (11/11), 1.41 KiB | 0 bytes/s, done. Total 11 (delta 0), reused 0 (delta 0) remote: To ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/input-repo * [new branch] master -> master

上記のような処理が完了したら、リポジトリへのpushが完了となります。

4、CodeBuildの設定を行う

いよいよCodeBuildの設定を行いますが、セットアップは非常に簡単です。

AWSマネジメントコンソールよりCodeBuildを選択し、[Get started]を押します。

codebuild-1

セッティング画面に遷移しますので、各種パラメーターを設定していきます。

[Configure your project]セクションでは、任意のプロジェクト名を入力します。

[Source]セクションでは、今回利用するリポジトリを指定するので、CodeCommitのリポジトリを選択します。

[Environment]セクションでは、ビルドに関する設定を定義します。

今回はデフォルトの設定で行うので、[Use an image managed by AWS CodeBuild]を選択します。ビルド実行環境はUbuntuで動いているようですねぇ。

[Runtime]はJavaで、[Version]はjava:openjdk8を選択します。

[Build specification]でビルドの処理内容を定義するので、buildspec.ymlを選択します。

codebuild-2

[Artifacts]セクションでは、出力先のS3のバケットを指定し、[Service role]セクションでは、CodeBuildを実行するためのIAMロールを作成します。

codebuild-3

最後に、セッティング内容を確認します。
問題なければ、[Save]を押します。以上でセッティング完了です。

codebuild-4

5、ビルドを行う

最後に、CodeCommitからソースコードをビルドして、S3にファイルを出力するまでやってみます。

まず、Build project画面より[Start build]を選択します。

codebuild-5

すると、ビルド処理が開始します。

ビルド処理には、以下のような段階があり、これらが全て成功すると処理が完了となります。

  • SUBMITTED
  • PROVISIONING
  • DOWNLOAD_SOURCE
  • INSTALL
  • PRE_BUILD
  • BUILD
  • POST_BUILD
  • UPLOAD_ARTIFACTS
  • FINALIZING
  • COMPLETED

codebuild-8

一定時間が経過すると処理が全てパスできたようで、[Status]が「Succeeded」になりました。
また、ファイルの出力も成功したメッセージが出力されているので、S3バケットを確認してみます。

codebuild-9

S3の出力先のバケットを確認すると、、、出力されたファイルを確認できました!codebuild-10

まとめ

CodeBuildは非常に簡単に始められるなと感じました。
次回は、CodeDeployとの連携してAWSマネージドサービスだけでビルド/デプロイを試してみたいと思います。
この記事が何かお役に立てば、幸いです。では!