Slide 1

Slide 1 text

AWS CodeBuild カスタムDockerイメージ を使ってビルドする JAWS-UG コンテナ⽀部#9 2017-07-21 (株)オープンストリーム 飯分俊⾏(いいぶんとしゆき)

Slide 2

Slide 2 text

CodeBuildとは u ざっくりいうと、 CodePipelineと組み合わせて CI/CDを実現するJenkins CIのようなもの u ビルドにかかった時間に対して料⾦が発⽣

Slide 3

Slide 3 text

ソースを取得して u Amazon S3, CodeCommit, GitHubのソースをビルド

Slide 4

Slide 4 text

ビルドはDocker上で u ランタイム(何をビルドするか) u Base u Android u Java u Python u Ruby u Golang u Node.js u Docker u .Net Core

Slide 5

Slide 5 text

buildspec.ymlに従ってビルド u YAMLでコマンドを定義 u ソースの直下に配置 (場所、名前は変更可能)

Slide 6

Slide 6 text

本⽇話す内容 u ビルド環境を⾃前で⽤意す る⽅法 u 環境イメージで “Dockerイメージの指定” を指定 u 対象のランタイムは Docker u ⽤意されたバージョンが少 し古く、”—cache-from” オプションを使えなかった ので最新のdockerを使え るようにした

Slide 7

Slide 7 text

参考にした公式ドキュメント u Docker in Custom Image Sample for AWS CodeBuild u http://docs.aws.amazon.com/codebuild/latest/userguide/sam ple-docker-custom-image.html u ⽇本語にはまだない

Slide 8

Slide 8 text

公式ビルド環境のDockerfile u GitHubに各ランタイムのDockerファイルがある u https://github.com/aws/aws-codebuild-docker-images/ u Dockerランタイム u https://github.com/aws/aws-codebuild-docker- images/tree/master/ubuntu/docker/1.12.1/ u Ubuntu 14.04ベース u aws-cli, git, dind(Docker in Docker)をインストール u ENTRYPOINTでDockerデーモンを起動

Slide 9

Slide 9 text

ビルド環境イメージ を作成 u docker:dindベース u aws-cli, gitをインストール u ENTRYPOINTはdocker:dind のまま u dockerデーモンを起動

Slide 10

Slide 10 text

カスタムイメージをAmazon ECRにアップ 事前にECRにカスタムイメージ⽤のリポジトリを⽤意して

Slide 11

Slide 11 text

ビルドするサンプルプログラム u このDockerfileと次 に説明する buildspec.ymlのみ u ビルド中に Hello と 出⼒するだけ

Slide 12

Slide 12 text

buildspec.yml

Slide 13

Slide 13 text

buildspec.yml (1/3) u 0.1と0.2では⼤きな違いがあり、0.1にしているとはまる u 公式ドキュメントのビルドスペックリファレンスの⽇本語版はまだ 0.1なので注意

Slide 14

Slide 14 text

buildspec.yml (2/3) u dockerデーモンを起動して起動するまで待つ u 提供されているDockerランタイムを指定する場合は不要 u dockerデーモンが⾃動で起動するらしい u ちなみにGitHubの公式イメージを⾃分でビルドしたイメージを指定して もこの記述が必要だった

Slide 15

Slide 15 text

buildspec.yml (3/3) u ビルドしてECRにアップ u REPOSITORY_URI はビルドプロジェクト作成時に指定 u ECRにアクセスするロールが必要

Slide 16

Slide 16 text

CodeBuild⽤ロール作成 (1/2) u サービスロールは”AWS CodeBuild”を指定

Slide 17

Slide 17 text

CodeBuild⽤ロール作成 (2/2) u ポリシーで”AmazonEC2ContainerRegistryPowerUser”を指定

Slide 18

Slide 18 text

ビルドプロジェクトを作成 (1/6)

Slide 19

Slide 19 text

ビルドプロジェクトを作成 (2/6) u Dockerイメージの指定 u ビルド環境イメージをプッ シュしたECRレポジトリ、 イメージを指定

Slide 20

Slide 20 text

ビルドプロジェクトを作成 (3/6) u ECRにプッシュするので出⼒アーティファクトはなし

Slide 21

Slide 21 text

ビルドプロジェクトを作成 (4/6) u ロールは先ほど作ったロールを指定

Slide 22

Slide 22 text

ビルドプロジェクトを作成 (5/6) u Dockerイメージを構築するので特権付与にチェック

Slide 23

Slide 23 text

ビルドプロジェクトを作成 (6/6) u Buildspec.ymlで使う環境変数を指定

Slide 24

Slide 24 text

ビルドを開始

Slide 25

Slide 25 text

結果 (1/2)

Slide 26

Slide 26 text

結果 (2/2)

Slide 27

Slide 27 text

まとめ u 何かの参考になれば幸いです u CodeBuildの戦いはまだ始まったばかりだ! u ⽇本語スタッフの⽅もがんばってください! u Qiita( http://qiita.com/tiibun/items/f0045011c86efca254fc )にもあ るので参考にしてください u ご静聴ありがとうございました