【速報】フルマネージドのビルドサービスCodeBuild爆誕 #reinvent
はじめに
こんにちは、中山です。
re:Invent 2016に参加中です。現地時間12/1(木)の8:30から実施されているWerner Vogels氏によるキーノートの中で発表された新サービス、CodeBuildについてレポートします。
CodeBuildとは何か
以下の資料が参考になります。
概要は以下のとおりです。
- 一言でいうと「フルマネージドのビルドサービス」
- フルマネージドなのでJenkinsのように自分でビルドサーバを管理する必要がない
- 並行処理などを利用してスケール可能
- サードパーティ製ツールを使って機能を拡張可能
- CodePipeline/CodeCommit/CodeDeployといったCode3兄弟と連携可能
- CodePipelineのJenkinsプラグインを利用すれば、CodeBuildをJenkinsのスレーブとして動作させることが可能
- これによりJenkinsのWorkerを管理する必要性を低減する
- ビルド結果(アーティファクト)はKMSにより暗号化される
- IAMと連携させてあるAWSユーザに特定プロジェクトへの権限を与えるといったように権限管理が可能
- ビルドで実行したコマンドなどの出力はCloudWatch Logsの確認可能
- 実行するコマンドは
buildspec.yml
に記述 - 現状Linuxのみサポートされており、Windowsは今後サポート予定
- ビルド時に起動させるコンテナはCPU/Memory毎に現状3つのタイプがある
build project
- Code Buildでどのようにビルドをするのか定義する概念
- ここでビルド対象のソースコード、どこにアーティファクトを置くのかなどを定義する
- build projectはAWS SDK/AWS CLIで作成可能
- ビルドで実行するシェルコマンドは
buildspec.yml
で定義する - ソースコードのリポジトリとしては現状S3/CodeCommit/GitHubをサポート
ビルドはどのようなフローで実行されるのか
- ビルド用のコンテナが指定したランタイム情報を読み込んで起動する
- ソースコードを取得する
buildspec.yml
に記述したコマンドを実行する- アーティファクトをS3にアップロードする
- オプションでKMSによる暗号化が可能
- ビルドが終わったらコンテナは破棄される
- CloudWatch Logsに各種ログを転送
Code Buildはどの言語/環境をサポートしているのか
- デフォルトでサポートしているのは以下のとおり
- Java
- Ruby
- Python
- Go
- Node.js
- Android
- Docker
- さらにDockerイメージをEC2 Container RegistryかDocker Hub registryに置いておき、それを参照することでカスタマイズ可能
料金
ドキュメントはこちらです。ビルド時間に対してのみ課金されます。
- 「ビルド時間」とはビルド処理が開始されてから終了するまでの時間
- この時間は分単位で計算され、一番近い分に切り上げされる
- 1分当たりのビルドに掛かる料金はCode Buildのインスタンスタイプにより異なる
- build.general1.small: $ 0.005
- build.general1.medium: $ 0.010
- build.general1.large: $ 0.020
- Free Tierはbuild.general1.smaill一ヶ月あたり100分
- Free Tierは12ヶ月のAWS Free Tier termで使える
- Code Buildで各種AWSサービスを利用した場合は当然その料金は掛かる
- Code BuildからCloudWatch Logsへログを出力した場合
- アーティファクトをS3に置いた場合
- 暗号化にKMSを利用した場合
- などなど
リージョン
現在以下のリージョンをサポートしているようです。
- 北部バージニア
- オレゴン
- アイルランド
使ってみる
別エントリにまとめました。
まとめ
いかがだったでしょうか。
以前AWS Lambdaを利用したビルドツールLambCIをご紹介したことがあります。
このツールの特徴はLambdaを使える点ですが、どうしても制限があるためECSを利用したビルドの仕組みも用意されていました。CodeBuildは内部的にコンテナ技術が使われているようなので、まさにこのツールが解決しようとしていた問題点に対する、AWS側からの回答と言った感じですね!今回は速報記事となりましたがもっと使い込んでより詳細な情報をお伝えしようと思います。
本エントリがみなさんの参考になれば幸いです。