Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

6,834 views

Published on

CodeBuildを始めるにあたり気になる疑問をまとめました

Published in: Internet
  • Login to see the comments

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

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

×