KEMBAR78
CodeBuildを身近にするためのはじめの一歩 | PDF
AWS CodeBuildを身近にするための
はじめの一歩
自己紹介
会社:クラスメソッド株式会社AWS事業部
名前:千葉 淳
好きなこと:仲間と家族とAmazon
はまっていること:自転車(ツール・ド・ちば参戦。2日で200km走
った)
2
今日伝えたいこと
CodeBuildを身近に!
さくっと使える!
覚えること少ない!
3
CodeBuildの位置付け
4
CodeBuild3行まとめ
GitHub/CodeCommit/Bitbucket/S3から ファイルを取得 し
指定した コマンド を
好きな Dockerコンテナ上で実行 する
5
気になること
いろいろ
6
CodeBuild対応言語は?
Dockerコンテナ上で動くものすべて
AWSドキュメントでサンプルが用意されているもは
C++、Go、Slaca、Java/Maven
Node.js、Python、Ruby
.Net Core in Linux
Docker
サンプルはこちらから
7
利用ケースサンプル
Dockerコンテナイメージを作成しECRへプッシュ
GitHubのプルリクをトリガーにビルド
AWS Con gを利用してCodeBuildの変更をトラッキング
ビルドの完了通知
ビルド後にCodeDeployを使ってEC2へデプロイ
SAMを使ったデプロイ
EBへのデプロイ
サンプルはこちらから
8
コマンド指定方法は?
buildspec.ymlを書く
ソースのトップに置く
以上、それだけ!
9
buildspec.ymlの書き方は①?
version: 0.2
env:
variables:
key: "value" # 環境変数を指定
parameter-store:
key: "value" #Systems Managerから取得し、値は暗号化できる
phases:
install: # パッケージインストール
commands:
- command
pre_build: # ビルド前処理
commands:
- command
10
buildspec.ymlの書き方は②?
build: # ビルド/テスト
commands:
- command
post_build: # アーカイブ化(ZipやJarなど)、ECRへのプッシュ
commands:
- command
artifacts:
files: # S3へアップするファイルを指定
- location
11
環境変数の指定方法3つ
buildspec.ymlのvariables
システム共通の環境変数を指定
buildspec.ymlのparameter-store
暗号化したいパラメータを指定(キーなど)
CodeBuildプロジェクトの設定
環境別の環境変数を指定(test/stg/prdとか)
12
指定できるコンテナは?
AWSで用意されているもの
OS:Ubuntu、Amazon Linux
対応:Android/Docker/Golang/Java/Node.js/Python Ruby/.Net
Core
詳細はこちら
カスタマイズしたコンテナも利用できる
DockerHub
ECR
13
CodeBuild内でプロセス起動できる?
例えば、Apache起動してcrulでlocalhost:80アクセス
答え: できる
テストが捗りそう
14
apache起動してcurlでリクエスト取得できた
phases:
install:
commands:
- echo install httpd
- apt-get update -y
- apt-get install -y apache2 curl
pre_build:
commands:
- echo start httpd
- /etc/init.d/apache2 restart
build:
commands:
- echo curl localhost
- curl localhost:80
15
コンテナからインターネット接続でき
る?
例えば、RSS取得して表示するとか
答え: できる
実はビルド以外にも使える!?
16
取得結果
17
buildspec.yml
version: 0.2
phases:
install:
commands:
- echo install
- pip install feedparser
build:
commands:
- echo start get-devio-rss.py
- python get-devio-rss.py
18
get-devio-rss.py
import feedparser
RSS_URL = "https://feed.classmethod.jp/blog/daily.rss"
result = feedparser.parse(RSS_URL)
for entry in result['entries']:
print("title:", entry.title)
print("link: ", entry.link)
19
実行トリガーは何指定できる?
CloudWatch Events
時間やAWSサービスのAPIをトリガーに実行
ただしLambdaやCodePipeline経由で実行
CodePipeline
ビルド以外のデプロイプロセスまでのフローを定義
GitHub
pushやプルリクをトリガーにビルド実行
即時実行
20
指定できるソースは?
GitHub
CodeCommit
Bitbucket※注意:CodePipeline利用時は未対応
S3
21
ブランチも指定できるの?
答え: できる
ビルド開始時にブランチ名とバージョンを指定
22
実行ログはどうやってみる?
Codebuildの画面(最後の10000行を表示)
CloudWatch Logs(全行のログ)
23
Build完了後に通知できる?
答え: できる
1. buildspec.yml内でSNSへpublishする行を追加
version: 0.1
environment_variables:
plaintext:
AWS_DEFAULT_REGION: "region-ID"
SNS_TOPIC_ARN: "arn:aws:sns:region-ID:account-ID:topic-name"
phases:
post_build:
commands:
- echo Build completed on `date`
- aws sns publish --topic-arn $SNS_TOPIC_ARN --subject 'AWS CodeBuild - Build Co
24
2. CodeBuildで利用するIAMロールに権限を追加
### BEGIN ADDING STATEMENT HERE ###
{
"Effect": "Allow",
"Resource": [
"*"
],
"Action": [
"sns:SendMessage",
"sns:Publish"
]
},
### END ADDING STATEMENT HERE ###
参考
25
ビルド環境のスペックと料金
以下の3タイプから選択。料金は分単位。
タイプ
メモ
リ
(GB)
vCPU
ディスク
容量(GB)
ビルド1分あたり
の料金(USD)
build.general1.small 3 2 64 0.005
build.general1.medium 7 4 128 0.010
build.general1.large 15 8 128 0.020
参考
26
料金例
build.general1.small
1ヶ月100回のビルド
1ビルド5分
ビルド時間(分) = 100 回のビルド* 5 分= 500 分
ビルドの月額= 500 分* $0.005 = $2.5
参考
27
制限事項
主なデフォルトの制限
ビルドタイムアウト時間:5~480分(8 時間)
同時ビルド実行数:20
詳細はこちら
28
デモ
29
デモ
1. Apacheを起動して、curlでアクセス(ブランチ名:master)
2. Developers.IOのRSSを取得する(ブランチ名:get-rss)
30
まとめ
31
まとめ
CodeBuildでは
任意のDockerコンテナで
任意のコマンドを実行し
処理を行うことができる
技術的ハードルは低く、簡単に利用できる
もっと身近に!
32
おしまい
33

CodeBuildを身近にするためのはじめの一歩