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.
【AWS Black Belt Online Seminar】
AWS上のJenkins活用方法
アマゾンウェブサービスジャパン株式会社
トレーニングデリバリマネージャ 大村 幸敬
2017.01.24
自己紹介
• 大村 幸敬 (Yukitaka Ohmura)
– トレーニングデリバリマネージャ
• トレーニングの実施とトレーニングコース開発
– DevOps Engineering on AWS
– Developing on AWS
–...
AWS Black Belt Online Seminar とは
AWSJのTechメンバがAWSに関する様々な事を紹介するオンラインセミナーです
【火曜 12:00~13:00】
主にAWSのソリューションや
業界カットでの使いどころなどを紹...
内容についての注意点
• 本資料では2017年1月24日時点のサービス内容および価格についてご説明しています。最新
の情報はAWS公式ウェブサイト(http://aws.amazon.com)にてご確認ください。
• 資料作成には十分注意してお...
Agenda
1. Jenkinsで何ができるのか?
2. Jenkins サーバ(Master)の構成
3. ビルド処理のオフロード
4. 目的に合わせたパイプライン
5
今回の内容
• 話すこと
– JenkinsをAWS上で使用する際のポイント
– JenkinsとAWSサービスとの連携
• AWS CodeCommit / AWS CodeBuild/ AWS CodeDeploy / AWS CodePi...
Jenkinsで何ができるのか?
7
DevOpsと自動化
8
DevOps = 文化+プロセス+ツール
開発者 顧客
releasetestbuild
plan monitor
デリバリのパイプライン
フィードバックループ
ソフトウェア開発のライフサイクル高速化
モノリシックな開発プロセス
9
開発者
releasetestbuild
デリバリパイプラインアプリ
10
• Service-Oriented
Architecture (SOA)
• 単一の目的
• APIでのみ連携
• “Microservices”
11
• Two-pizza teams
• 全ての主導権
• 全ての責任
• 良くしようとする動機
• “DevOps”
Microserviceの開発ライフサイクル
12
開発者 デリバリパイプラインサービス
releasetestbuild
releasetestbuild
releasetestbuild
releasetestbuild
releasete...
DevOps タスク
13
MonitorProvisionDeployTestBuildCode
継続的インテグレーション
(CI = Continuous Integration)
継続的デリバリ
(CD = Continuous Deli...
DevOpsタスクとAWS開発者用サービスの位置付け
14
MonitorProvisionDeployTestBuildCode
Elastic Beanstalk
OpsWorks for Chef Automate
OpsWorks St...
Jenkins
• オープンソースの自動化サーバ
– ソフトウェア開発におけるテスト、ビルド、デプロイの自動化
– ビルドパイプラインの構成
– 多彩なプラグインによる拡張
15
画像: https://wiki.jenkins-ci.org/...
AWS開発者用サービスとJenkinsの位置付け
16
MonitorProvisionDeployTestBuildCode
Elastic Beanstalk
OpsWorks for Chef Automate
OpsWorks Stac...
Jenkinsの画面例
• トップ画面
– プロジェクト
ステータス一覧
17
Jenkinsの画面例
• プロジェクト設定画面
18
Jenkinsを使用したビルド実行の例
プロジェクトのビルド履歴
19
個別ビルドのログ
Jenkinsの基本構成
20
Jenkinsユーザ
DeveloperGitHub
Amazon S3
Artifact
(パッケージ)
①commit
②pull
③Build/Test
④パッケージング
Jenkins
Master
Jenkinsサーバ(Master)をどう構成するか?
21
Jenkinsユーザ
DeveloperGitHub
Amazon S3
Artifact
(パッケージ)
Jenkins
Master HA化
ビルド処理をどのようにオフロードするか?
22
Jenkinsユーザ
Jenkins
Master
Jenkins
Worker
JenkinsとAWSサービスとの連携をどうするか?
23
Jenkinsユーザ
Jenkins
Master
目的に合わせたパイプラインを
どのように構成するか
Jenkins on AWSの検討ポイント
1. Jenkins サーバ(Master)をどのように構成するか
– スペック、セキュリティ、高可用性、ベストプラクティス
2. ビルド処理をどのようにオフロードするか
– Jenkins Work...
Jenkins サーバ(Master)をどう構成するか
25
Jenkins Master on EC2
• 構築手順
• スペック
• セキュリティ
• 高可用性
• ベストプラクティス
26
Jenkins Master on EC2 構築手順
1. EC2インスタンスを立てる
1. セキュリティグループは22と8080ポートへの接続を許可
2. Jenkinsをパッケージインストールして起動
3. ブラウザでホストへアクセスしてア...
Jenkins Master のスペック
• OS
– Linux / Windows / Docker
• CPUとネットワーク
– 処理内容によって必要スペックは大きく変わる(HTTP接続ごとに3スレッド)
– Workerを立てることでM...
Jenkins Master のセキュリティ
• SSLを有効化
– ELBをJenkins Masterの前に立ててSSL Terminateすることを推奨
• CSRF防御を有効化
– Jenkins 2.xではデフォルトで有効化済み(設定...
Jenkins Masterの高可用性
• Jenkins Masterの設定を疎結合化して外出し
– 設定ファイル($JENKINS_HOME)をNFSストレージなどに置き
Jenkins Masterからマウント
– インスタンス数1で固定...
Jenkins Masterのベストプラクティス
• セキュリティグループによるアクセス制御
• 十分なインスタンススペックの確保
• バックアップ・リストアの計画
– EBSスナップショット / $JENKINS_HOMEの退避 / S3 P...
ビルド処理をどのようにオフロードするか
32
ビルド処理の特徴
• 実施タイミングが未確定
– 迅速な開発のため各々のコミットごとに自動的にテストを実行
• 処理時間は時限的
– 数分〜数十分
– 長いとデリバリプロセスが遅延するため通常は短い
• ビルドターゲットに合わせた環境が必要
–...
Jenkins Worker
• ビルド処理をJenkins Masterとは異なるインスタンス
(Worker)で実行する
– ビルド処理をスケールアウト
– 環境ごとに異なるWorkerを用意
– 必要なときだけWorkerを起動する
• ...
Jenkins Worker on EC2
• ビルドを実行するaインスタンスがなければ新規にインスタンスを作成
– Amazon EC2 Pluginを使用
– インスタンスにラベルをつけビルド対象を指定
– Jenkins MasterがW...
Jenkins Worker on EC2(設定例)
Jenkinsの管理→システムの設定
36
Jenkinsシステムの設定→「クラウド」の設定
Jenkins Masterインスタンスに
IAM Roleを付与していれば
Credentia...
Jenkins Worker on EC2(設定例)
Jenkinsシステムの設定→ 「クラウド」の設定続き
37
ここで指定した文字列を
プロジェクトのラベル式で指定
Jenkins MasterからSSH接続
できるよう
セキュリティグルー...
Jenkins Worker on EC2(設定・実行例)
Jenkinsプロジェクトの設定
38
ビルド実行時の様子
Labelsで指定した文字列を指定
(サジェストあり)
インスタンスの起動待ち
インスタンスが起動すると
ビルド実行
Jenkins Worker on Amazon EC2 Spot Fleet
• ビルド実行時Spot Fleet上のインスタンスに処理を指示
– Amazon EC2 Fleet Pluginを使用
– ビルド処理の投入数に応じ、Spot ...
Jenkins Worker on Amazon EC2 Spot Fleet(設定例)
40
SpotFleetで起動するため
「リクエストと維持」を指定
Jenkins MasterからSSH接続できるよう
キーペアとセキュリティグループを...
Jenkins Worker on Amazon EC2 Spot Fleet(設定例)
41
Jenkinsの管理→システムの設定
ここで指定した台数の範囲で
SpotFleetのターゲット容量が調整
ここで指定した文字列を
プロジェクトの
...
コンテナとは何か?
42
• OS仮想化
• プロセス隔離
• イメージ
• 自動化Server
Guest OS
Bins/Libs Bins/Libs
App2App1
コンテナとCI/CD
• ビルドで使用する環境とアプリケーションを
コンテナ上で動作させる
– コンテナが動く環境であればどこでも同じように動く
– Workerインスタンスはコンテナさえ動くようにしておけばよい
• 多様な環境のテストを並列し...
Amazon EC2 Container Service (ECS)
44
• 特徴(https://aws.amazon.com/ecs/)
– 管理ノード不要の、安定かつ高パフォーマン
スなクラスタ管理サービス
– Serviceスケジュー...
Jenkins Worker on Amazon ECS
• WorkerをECS上のDockerコンテナで実行する
– Amazon EC2 Container Service Pluginを使用
– 異なる環境(コンパイラやライブラリ)のW...
Jenkins Worker on Amazon ECS(設定例)
46
ECSクラスターの設定
ECSを使用する場合
クラスターのインスタンス数は
ここで指定(JenkinsはScaleを指示しない)
調査用にキーペアを指定しておく
インスタ...
Jenkins Worker on Amazon ECS(設定例)
47
Jenkinsの設定
ECS
Worker Task
AWS API
(WorkerTask起動)
・JNLP(5000)でマスターと通信
・HTTP(8080)でJen...
Jenkins Worker on Amazon ECS(実行例)
48
Jenkins上はオフラインに見える
ECS上はタスクが無いように見える
ビルドを開始するとタスクが作成され処理が実行
終了するとすぐにタスクは削除
AWS CodeBuild
• フルマネージドのビルドサービス
• ソースコードのコンパイル、テストの実行、
パッケージング等のビルド処理を実施
• スケーラブルで並列ビルド処理が可能
• 各種言語用のDocker Imageが用意されているほ...
AWS CodeBuild as Jenkins Worker
• WorkerとしてCodeBuildのProjectを実行する
– Jenkins CodeBuild Pluginを使用
– https://GitHub.com/awsla...
JenkinsとCodeBuildのインテグレーション例
• RedmineのテストをJenkins+CodeBuildで実行
– Ruby on Railsで書かれたコードをRSpecでテスト
– 自身のGitHubにRedmineプロジェク...
CodeBuildとのインテグレーション例
52
CodeBuild Projectの設定
GitHubリポジトリを指定
ビルド環境の
Docker Imageを指定
ここでは標準で提供される
UbuntuベースのRuby環境を使用
スペックは...
CodeBuildとのインテグレーション例
53
ソースコードのトップディレクトリにCodeBuildのビルド設定ファイル (buildspec.yml) を追加…
phases: 各ステージで実行するコマンドを指定
install: スクリプ...
CodeBuildとのインテグレーション例
54
• JenkinsにPluginを導入
• Projectのビルドフェーズで「Run build on AWS CodeBuild」を追加
Regionとアクセスキー、シークレットキーを指定
C...
CodeBuildとのインテグレーション例
55
Jenkinsのビルド画面にCodeBuild Dashboardが追加 CodeBuildの画面も同様の表示
Jenkins Workerの構成方法まとめ
• Amazon EC2
• Amazon EC2 Spot Fleet
• Amazon ECS
• AWS CodeBuild
56
目的に合わせたパイプラインをどのように構成するか
57
パイプラインとDevOpsタスク位置付けの例
58
本番
provision
Deploy
Monitor
Code
ソース
Build
ビルド
インテグレー
ションテスト
Provision
Deploy
Test
• すべての必要なプラット...
パイプライン
• 継続的デリバリの一連の工程を自動化
– 素早いデリバリの実現
– 問題発生時のフィードバック高速化
– 再現性のあるタスク実施
– デリバリプロセスの再利用
• Jenkinsにおける2種類の自動化
– 『自動化の進展は2つの...
パイプラインの構成方法
• Jenkins
– Pipelineプラグイン(Jenkins2より標準搭載)
– 一連のパイプライン処理をスクリプトで記述
– 各種AWSのサービスとPluginにより連携
• AWS CodePipeline
–...
JenkinsとAWSサービスとの連携
• Pluginで各種AWSサービスと連携
– Code
• CodeCommit (Git Pluginで連携)
– HTTPS接続の際Gitと同様のID/PWによる認証が可能に(2016/12)
– ...
AWS開発者用サービスとJenkinsの位置付け(再掲)
62
MonitorProvisionDeployTestBuildCode
Elastic Beanstalk
OpsWorks for Chef Automate
OpsWorks ...
DevOps Tasks mapping for Amazon EC2
63
Provision
Deploy
TestBuildCode
EC2
OS
config
Packages
config
Application
Deploy
Provisioning & Deploy Task Coverage for EC2
64
EC2
OS
config
Packages
config
Application
Deploy
Other
AWS Services
Cloud
F...
目的別 Jenkins & AWSサービス パイプラインパターン
• シンプル パイプライン
• コンテナ パイプライン
• モバイルアプリ パイプライン
• セキュリティ自動化 パイプライン1, 2
65
シンプル パイプライン
• コードがcommitされたらアプリケーションサーバへデプロイする
① コードをcommit
② CodePipelineがcommitを検知
③ Jenkinsでビルドを実行してS3へ格納
④ CodePipelin...
コンテナ パイプライン
• コードがcommitされたらDocker Imageを作成しECSへデプロイする
① コードをcommit
② Jenkinsがcommitを検知してコードを取得
③ JenkinsがECRからDocker Imag...
モバイルアプリ パイプライン
• 各種モバイル端末上のテストを実行するためコードが
commitされたらAWS Device Farmにアプリケーションを
送ってテストを実行する
① コードをcommit
② Jenkinsがcommitを検知...
セキュリティ自動化 パイプライン1
• セキュリティチェックをCI/CDの中で自動的に実行
開発スピードがセキュリティ対応のため遅れないようにする
① 開発者がCloudFormationのコードをcommit
② Jenkinsがcommit...
セキュリティ自動化 パイプライン2
① 開発者がCloudFormationのコードをcommit
② Jenkinsがcommitを検知してコードを取得してビルドプロセスを開始
③ JenkinsがセキュリティチームのS3からCodeDepl...
参考:AWSサービスによるパイプライン
• コンテナの継続的デプロイ
• サーバレスアプリケーションの継続的デリバリ
71
AWS CodePipeline
72
• 特徴 (http://aws.amazon.com/jp/codepipeline/)
– デプロイまでのプロセスを管理
• Build/Test/Deployを組み合わせたフロー管理
• AWSサー...
参考:コンテナの継続的デプロイ
73
• コンテナをECSに継続的デプロイするためのリファレンスアーキテクチャ
• CloudFormationテンプレートが提供されておりすぐにお試しいただけます
原文→https://github.com/a...
参考:サーバレスアプリケーションの継続的デリバリ
74
• サーバレスアプリケーションモデル(SAM)を使用
• AWS API GatewayとAWS Lambdaで構成
• テスト/ベータ/ガンマそれぞれでテストし本番へリリース
• リリー...
まとめ
75
1. Jenkinsで何ができるのか?
2. Jenkins サーバ(Master)の構成
3. ビルド処理のオフロード
4. 目的に合わせたパイプライン
参考資料
• Jenkins Official Site(英語)
– https://jenkins.io/
• Jenkins on AWS White Paper (英語)
– https://d0.awsstatic.com/whitep...
Q&A
77
オンラインセミナー資料の配置場所
• AWS クラウドサービス活用資料集
– http://aws.amazon.com/jp/aws-jp-introduction/
• AWS Solutions Architect ブログ
– 最新の情報...
公式Twitter/Facebook
AWSの最新情報をお届けします
79
@awscloud_jp
検索
最新技術情報、イベント情報、お役立ち情報、
お得なキャンペーン情報などを日々更新しています!
もしくは
http://on.fb.me/...
AWSの導入、お問い合わせのご相談
AWSクラウド導入に関するご質問、お見積り、資料請求を
ご希望のお客様は以下のリンクよりお気軽にご相談ください
https://aws.amazon.com/jp/contact-us/aws-sales/
...
AWS Black Belt Online Seminar
• 1月の配信予定
– 1月25日(水) 18:00-19:00 AWS Storage Gateway
– 1月31日(火) 12:00-13:00 AWSで実現するDisaster...
AWS Black Belt Online Seminar
• 2月の配信予定
– 2月1日(水) 18:00-19:00 AWS OpsWorks
– 2月8日(水) 18:00-19:00 AWS Batch
– 2月9日(木) 12:00...
簡単なアンケートにご協力ください。
• 画面に表示されるアンケートフォームに入力をお願いします。
皆様のご意見は、今後の改善活動に活用させて頂きます。
コメント欄には1行で自由な内容を書き込み下さい。
例)
- 本オンラインセミナーへのご意見
...
ご参加ありがとうございました
84
85
補足:ElasticBeanstalkでJenkins Masterを稼働させる
• ElasticBeanstalkのコンテナ上にJenkins Masterを構成することで、
EC2インスタンスの管理負荷を低減させることが可能
• ポイント...
補足:ElasticBeanstalkでJenkins Masterを稼働させる
87
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "jenkins"
},
"Ports": [
{
"...
Upcoming SlideShare
Loading in …5
×

AWS Black Belt Online Seminar AWS上のJenkins活用方法

10,401 views

Published on

2017/1/24

Published in: Technology
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

AWS Black Belt Online Seminar AWS上のJenkins活用方法

  1. 1. 【AWS Black Belt Online Seminar】 AWS上のJenkins活用方法 アマゾンウェブサービスジャパン株式会社 トレーニングデリバリマネージャ 大村 幸敬 2017.01.24
  2. 2. 自己紹介 • 大村 幸敬 (Yukitaka Ohmura) – トレーニングデリバリマネージャ • トレーニングの実施とトレーニングコース開発 – DevOps Engineering on AWS – Developing on AWS – Architecting on AWS – Data Warehousing on AWS など – 経歴:SIerで自社サービスの開発・運用 金融系のインフラPM – 好きなもの:アウトドアと日本酒と娘^2 – 好きなサービス:AWS CLI 2
  3. 3. AWS Black Belt Online Seminar とは AWSJのTechメンバがAWSに関する様々な事を紹介するオンラインセミナーです 【火曜 12:00~13:00】 主にAWSのソリューションや 業界カットでの使いどころなどを紹介 (例:IoT、金融業界向け etc.) 【水曜 18:00~19:00】 主にAWSサービスの紹介や アップデートの解説 (例:EC2、RDS、Lambda etc.) ※開催曜日と時間帯は変更となる場合がございます。 最新の情報は下記をご確認下さい。 オンラインセミナーのスケジュール&申し込みサイト – https://aws.amazon.com/jp/about-aws/events/webinars/ 3
  4. 4. 内容についての注意点 • 本資料では2017年1月24日時点のサービス内容および価格についてご説明しています。最新 の情報はAWS公式ウェブサイト(http://aws.amazon.com)にてご確認ください。 • 資料作成には十分注意しておりますが、資料内の価格とAWS公式ウェブサイト記載の価格に 相違があった場合、AWS公式ウェブサイトの価格を優先とさせていただきます。 • 価格は税抜表記となっています。日本居住者のお客様が東京リージョンを使用する場合、別途 消費税をご請求させていただきます。 • AWS does not offer binding price quotes. AWS pricing is publicly available and is subject to change in accordance with the AWS Customer Agreement available at http://aws.amazon.com/agreement/. Any pricing information included in this document is provided only as an estimate of usage charges for AWS services based on certain information that you have provided. Monthly charges will be based on your actual use of AWS services, and may vary from the estimates provided. 4
  5. 5. Agenda 1. Jenkinsで何ができるのか? 2. Jenkins サーバ(Master)の構成 3. ビルド処理のオフロード 4. 目的に合わせたパイプライン 5
  6. 6. 今回の内容 • 話すこと – JenkinsをAWS上で使用する際のポイント – JenkinsとAWSサービスとの連携 • AWS CodeCommit / AWS CodeBuild/ AWS CodeDeploy / AWS CodePipeline • AWS CloudFormation / AWS OpsWorks / AWS ElasticBeanstalk / Amazon CloudWatch • Amazon EC2 / Amazon ECS / Amazon ECR / AWS Lambda / Amazon S3 / Amazon EFS • 話さないこと – ビルド、テスト、デプロイの詳細 – サードパーティツール・サービス(CircleCI、TravisCIなど) – サービスのロードマップ 6
  7. 7. Jenkinsで何ができるのか? 7
  8. 8. DevOpsと自動化 8 DevOps = 文化+プロセス+ツール 開発者 顧客 releasetestbuild plan monitor デリバリのパイプライン フィードバックループ ソフトウェア開発のライフサイクル高速化
  9. 9. モノリシックな開発プロセス 9 開発者 releasetestbuild デリバリパイプラインアプリ
  10. 10. 10 • Service-Oriented Architecture (SOA) • 単一の目的 • APIでのみ連携 • “Microservices”
  11. 11. 11 • Two-pizza teams • 全ての主導権 • 全ての責任 • 良くしようとする動機 • “DevOps”
  12. 12. Microserviceの開発ライフサイクル 12 開発者 デリバリパイプラインサービス releasetestbuild releasetestbuild releasetestbuild releasetestbuild releasetestbuild releasetestbuild
  13. 13. DevOps タスク 13 MonitorProvisionDeployTestBuildCode 継続的インテグレーション (CI = Continuous Integration) 継続的デリバリ (CD = Continuous Delivery) 継続的デプロイ (Continuous Deploy) 継続的 監視と改善
  14. 14. DevOpsタスクとAWS開発者用サービスの位置付け 14 MonitorProvisionDeployTestBuildCode Elastic Beanstalk OpsWorks for Chef Automate OpsWorks Stacks Cloud Watch Cloud Formation Code Deploy Code Commit Code Pipeline Code Build
  15. 15. Jenkins • オープンソースの自動化サーバ – ソフトウェア開発におけるテスト、ビルド、デプロイの自動化 – ビルドパイプラインの構成 – 多彩なプラグインによる拡張 15 画像: https://wiki.jenkins-ci.org/display/JENKINS/Logo The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project. (プロジェクトページ https://jenkins.io/ より)
  16. 16. AWS開発者用サービスとJenkinsの位置付け 16 MonitorProvisionDeployTestBuildCode Elastic Beanstalk OpsWorks for Chef Automate OpsWorks Stacks Cloud Watch Cloud Formation Code Deploy Code Commit Code Pipeline Code Build
  17. 17. Jenkinsの画面例 • トップ画面 – プロジェクト ステータス一覧 17
  18. 18. Jenkinsの画面例 • プロジェクト設定画面 18
  19. 19. Jenkinsを使用したビルド実行の例 プロジェクトのビルド履歴 19 個別ビルドのログ
  20. 20. Jenkinsの基本構成 20 Jenkinsユーザ DeveloperGitHub Amazon S3 Artifact (パッケージ) ①commit ②pull ③Build/Test ④パッケージング Jenkins Master
  21. 21. Jenkinsサーバ(Master)をどう構成するか? 21 Jenkinsユーザ DeveloperGitHub Amazon S3 Artifact (パッケージ) Jenkins Master HA化
  22. 22. ビルド処理をどのようにオフロードするか? 22 Jenkinsユーザ Jenkins Master Jenkins Worker
  23. 23. JenkinsとAWSサービスとの連携をどうするか? 23 Jenkinsユーザ Jenkins Master 目的に合わせたパイプラインを どのように構成するか
  24. 24. Jenkins on AWSの検討ポイント 1. Jenkins サーバ(Master)をどのように構成するか – スペック、セキュリティ、高可用性、ベストプラクティス 2. ビルド処理をどのようにオフロードするか – Jenkins Workerの利用 – ビルド環境の多様性、ビルド環境コストの低減 3. 目的に合わせたパイプラインをどのように構成するか – JenkinsとAWSサービスとの連携 24
  25. 25. Jenkins サーバ(Master)をどう構成するか 25
  26. 26. Jenkins Master on EC2 • 構築手順 • スペック • セキュリティ • 高可用性 • ベストプラクティス 26
  27. 27. Jenkins Master on EC2 構築手順 1. EC2インスタンスを立てる 1. セキュリティグループは22と8080ポートへの接続を許可 2. Jenkinsをパッケージインストールして起動 3. ブラウザでホストへアクセスしてアンロック – Jenkins 2.x系以降 – /var/lib/jenkins/secrets/initialAdminPassword に 記載されているパスワードを入力すると利用可能 4. インストールするプラグインを選択 以上 27 (Amazon Linuxの場合) $ sudo yum update –y $ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo $ sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key $ sudo yum install jenkins –y $ sudo service jenkins start
  28. 28. Jenkins Master のスペック • OS – Linux / Windows / Docker • CPUとネットワーク – 処理内容によって必要スペックは大きく変わる(HTTP接続ごとに3スレッド) – Workerを立てることでMasterの処理をオフロード可能 • インスタンスタイプ – 大量の並列処理が継続して行われる場合はM4を – 間欠的な処理はT2でもよいがCPUクレジットの使い切りに注意 • ストレージ – Masterにはログが格納されるためビルド実行総数に注意 – ビルドをMaster上で行う場合は、扱うデータ量×プロジェクト数に注意 – プロジェクト設定およびビルド記録保護のためEBSスナップショットの取得を行う 28
  29. 29. Jenkins Master のセキュリティ • SSLを有効化 – ELBをJenkins Masterの前に立ててSSL Terminateすることを推奨 • CSRF防御を有効化 – Jenkins 2.xではデフォルトで有効化済み(設定を確認すること) • Master上でビルドせずWorkerを使う – 誤ったビルド処理によって $JENKINS_HOME (設定、履歴データを配置するディレクトリ)にアクセスされると、 Jenkins環境に悪影響を及ぼす可能性がある • Workerへのアクセス制御を有効化 – Jenkins 1.5.80.x以降ならMaster-Worker間の通信を安全に行う設定を有効化する – Jenkins 2.xならデフォルトで有効化(設定有効化済みを確認すること) • 適切なユーザ認証を行う – Jenkins独自、OS認証、LDAP認証が利用可能 • ネットワークアクセスの保護 – デフォルトは8080ポートで稼働するが、Linuxならiptablesで80ポートへリダイレクト可能 – メンテナンスのためのSSH(22番ポート)アクセスが必要 – セキュリティグループでこれらのポートへのアクセスを制御する。アクセス元IPを最小限にする 29
  30. 30. Jenkins Masterの高可用性 • Jenkins Masterの設定を疎結合化して外出し – 設定ファイル($JENKINS_HOME)をNFSストレージなどに置き Jenkins Masterからマウント – インスタンス数1で固定したAutoScaling(AutoHealing)を構成し、 Jenkins Masterが故障した際に代替インスタンスを自動で起動 • 考慮点 – ELBをJenkins Masterの前に立ててエンドポイントを固定する – NFSストレージにはAmazon EFSなど可用性の高いストレージを使用 • マウントのためAZに依存しないDNS Nameが利用可能 https://aws.amazon.com/fr/about-aws/whats-new/2016/12/simplified-mounting-of-amazon-efs-file-systems/ – 今後の再利用を考えCloudFormationでテンプレート化する 30
  31. 31. Jenkins Masterのベストプラクティス • セキュリティグループによるアクセス制御 • 十分なインスタンススペックの確保 • バックアップ・リストアの計画 – EBSスナップショット / $JENKINS_HOMEの退避 / S3 Plugin • Workerの追加・削除が容易になるよう構成 • 使用しないときはWorkerノードを止める • MasterおよびWorkerのモニタリングを行う Jenkinsオフィシャル Best Practiceも参照 – https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Best+Practices 31
  32. 32. ビルド処理をどのようにオフロードするか 32
  33. 33. ビルド処理の特徴 • 実施タイミングが未確定 – 迅速な開発のため各々のコミットごとに自動的にテストを実行 • 処理時間は時限的 – 数分〜数十分 – 長いとデリバリプロセスが遅延するため通常は短い • ビルドターゲットに合わせた環境が必要 – 複数のライブラリバージョンでテストするなど 33
  34. 34. Jenkins Worker • ビルド処理をJenkins Masterとは異なるインスタンス (Worker)で実行する – ビルド処理をスケールアウト – 環境ごとに異なるWorkerを用意 – 必要なときだけWorkerを起動する • AWSにおけるWorkerの構成方法 – Amazon EC2 – Amazon EC2 Spot Fleet – Amazon ECS – AWS CodeBuild 34
  35. 35. Jenkins Worker on EC2 • ビルドを実行するaインスタンスがなければ新規にインスタンスを作成 – Amazon EC2 Pluginを使用 – インスタンスにラベルをつけビルド対象を指定 – Jenkins MasterがWorkerインスタンスへSSH接続し、初期設定を実施 – Workerインスタンス上でビルドを実行し結果を得る – 指定した時間アイドルが続くとWorkerインスタンスを削除 • スポットインスタンスが利用可能 – 使われていないEC2インスタンスに入札して格安利用(最大90%程度のコストカットが可能) – よりコスト効率の高いビルド処理が可能 – 起動時に入札価格がスポット価格を下回っているとインスタンスは起動しない – ビルド中にスポット価格が入札価格を上回るとインスタンスが削除されビルドは失敗する 35 https://wiki.jenkins-ci.org/display/JENKINS/Amazon+EC2+Plugin EC2 EC2 スポットインスタンス SSH
  36. 36. Jenkins Worker on EC2(設定例) Jenkinsの管理→システムの設定 36 Jenkinsシステムの設定→「クラウド」の設定 Jenkins Masterインスタンスに IAM Roleを付与していれば Credentialsは必要なし(推奨) 詳細はPluginのドキュメントを参照
  37. 37. Jenkins Worker on EC2(設定例) Jenkinsシステムの設定→ 「クラウド」の設定続き 37 ここで指定した文字列を プロジェクトのラベル式で指定 Jenkins MasterからSSH接続 できるよう セキュリティグループを指定 サブネットも指定する SSH接続を考慮 Jenkinsシステムの設定→ 「クラウド」の設定続き(拡張設定) スポットを使う場合にチェック ビッド価格を指定
  38. 38. Jenkins Worker on EC2(設定・実行例) Jenkinsプロジェクトの設定 38 ビルド実行時の様子 Labelsで指定した文字列を指定 (サジェストあり) インスタンスの起動待ち インスタンスが起動すると ビルド実行
  39. 39. Jenkins Worker on Amazon EC2 Spot Fleet • ビルド実行時Spot Fleet上のインスタンスに処理を指示 – Amazon EC2 Fleet Pluginを使用 – ビルド処理の投入数に応じ、Spot Fleetで稼働するインスタンス数をコントロールす る(最小/最大を指定) – WorkerインスタンスへJenkins MasterがSSH接続し初期設定を実施 • Spot Fleet – 配分戦略に応じて複数のスポットプールを自動的に利用 – Fleet全体でターゲット容量(インスタンス数 or vCPU数)を満たす – Jenkinsが指示したWorkerインスタンス数を維持するようコントロール 39 https://wiki.jenkins-ci.org/display/JENKINS/Amazon+EC2+Fleet+Plugin SSH EC2 Spot Fleet
  40. 40. Jenkins Worker on Amazon EC2 Spot Fleet(設定例) 40 SpotFleetで起動するため 「リクエストと維持」を指定 Jenkins MasterからSSH接続できるよう キーペアとセキュリティグループを指定 EC2スポットインスタンス作成
  41. 41. Jenkins Worker on Amazon EC2 Spot Fleet(設定例) 41 Jenkinsの管理→システムの設定 ここで指定した台数の範囲で SpotFleetのターゲット容量が調整 ここで指定した文字列を プロジェクトの ラベル式で指定 Jenkins Masterインスタンスに IAM Roleを付与していれば Credentialsは必要なし(推奨) 詳細はPluginのドキュメントを参照
  42. 42. コンテナとは何か? 42 • OS仮想化 • プロセス隔離 • イメージ • 自動化Server Guest OS Bins/Libs Bins/Libs App2App1
  43. 43. コンテナとCI/CD • ビルドで使用する環境とアプリケーションを コンテナ上で動作させる – コンテナが動く環境であればどこでも同じように動く – Workerインスタンスはコンテナさえ動くようにしておけばよい • 多様な環境のテストを並列して実行可能 – ビルドのたびにクリーンな設定のテスト環境が用意される – 1つのインスタンス上で複数の環境を同時にテスト可能 43
  44. 44. Amazon EC2 Container Service (ECS) 44 • 特徴(https://aws.amazon.com/ecs/) – 管理ノード不要の、安定かつ高パフォーマン スなクラスタ管理サービス – Serviceスケジューラで多様なロングランニ ングプロセスを実行する基盤に • コンテナを必要な台数稼働させる • ELB連携で、デプロイも簡単に – Run Taskでバッチジョブを実行する基盤に • どこかのEC2でコンテナを起動して処理させる • 価格体系 (https://aws.amazon.com/ecs/pricing/) – 無料 • 利用するEC2, EBS, ELBなどの料金のみ発生 管理されたEC2クラスタ上に、コンテナを自在に配置できる Amazon ECR Amazon ECS Elastic Load Balancing
  45. 45. Jenkins Worker on Amazon ECS • WorkerをECS上のDockerコンテナで実行する – Amazon EC2 Container Service Pluginを使用 – 異なる環境(コンパイラやライブラリ)のWorkerを容易に作成 – 実行のたびにクリーンな環境を使用 • ECSとの連携 – クラスターのインスタンスはECSが管理 – CloudWatchとAutoScalingによりインスタンス数の自動調整が可能 4545 ECS Worker Task AWS API (WorkerTask起動) https://wiki.jenkins-ci.org/display/JENKINS/Amazon+EC2+Container+Service+Plugin 処理状況の通知
  46. 46. Jenkins Worker on Amazon ECS(設定例) 46 ECSクラスターの設定 ECSを使用する場合 クラスターのインスタンス数は ここで指定(JenkinsはScaleを指示しない) 調査用にキーペアを指定しておく インスタンスからJNLPで Masterへ接続できるよう サブネットと セキュリティグループを指定 ロールはデフォルトでよい
  47. 47. Jenkins Worker on Amazon ECS(設定例) 47 Jenkinsの設定 ECS Worker Task AWS API (WorkerTask起動) ・JNLP(5000)でマスターと通信 ・HTTP(8080)でJenkins Agentを取得 HTTPS HTTP 8080 ELBを経由せずMasterに アクセスできるURLを指定 ここで指定した文字 列をプロジェクトの ラベル式で指定 ※プロジェクトの設定はEC2と同様 Jenkins Masterインスタンスに IAM Roleを付与していれば Credentialsは必要なし(推奨) 詳細はPluginのドキュメントを参照
  48. 48. Jenkins Worker on Amazon ECS(実行例) 48 Jenkins上はオフラインに見える ECS上はタスクが無いように見える ビルドを開始するとタスクが作成され処理が実行 終了するとすぐにタスクは削除
  49. 49. AWS CodeBuild • フルマネージドのビルドサービス • ソースコードのコンパイル、テストの実行、 パッケージング等のビルド処理を実施 • スケーラブルで並列ビルド処理が可能 • 各種言語用のDocker Imageが用意されているほか、 カスタムImageを使用して自身のアプリケーションに 合わせたビルド環境を利用可能 • API、CLIから起動するほか、 CodePipelineやJenkinsとの連携を提供 • 料金 • コンピューティングタイプ別 (build.general1.*) • ビルド1分間あたりの料金 • 1ヶ月にbuild.general1.smallを100分間分の無料利用枠 49
  50. 50. AWS CodeBuild as Jenkins Worker • WorkerとしてCodeBuildのProjectを実行する – Jenkins CodeBuild Pluginを使用 – https://GitHub.com/awslabs/aws-codebuild-jenkins-plugin – 上記ソースをpull→mvn installでコンパイル→.hpiファイルをJenkinsにupload • CodeBuildを使用するメリット – 処理内容を設定(buildspec.yml)として記述 – Projectの実行時間に応じた料金 – フルマネージドでインスタンスの管理やスケーラビリティの考慮が不要 – 実行のたびにクリーンな環境を使用 50 AWS CodeBuild
  51. 51. JenkinsとCodeBuildのインテグレーション例 • RedmineのテストをJenkins+CodeBuildで実行 – Ruby on Railsで書かれたコードをRSpecでテスト – 自身のGitHubにRedmineプロジェクトのクローンを作成しておく 1. GitHubからソースコードを取得 2. CodeBuildコンテナ上に環境を構築 3. RSpecのテストを実施 4. テストが成功したらzipパッケージを作成してS3へ 51 AWS CodeBuild
  52. 52. CodeBuildとのインテグレーション例 52 CodeBuild Projectの設定 GitHubリポジトリを指定 ビルド環境の Docker Imageを指定 ここでは標準で提供される UbuntuベースのRuby環境を使用 スペックは3タイプから指定 Railsでテストを実行するための 環境変数を指定
  53. 53. CodeBuildとのインテグレーション例 53 ソースコードのトップディレクトリにCodeBuildのビルド設定ファイル (buildspec.yml) を追加… phases: 各ステージで実行するコマンドを指定 install: スクリプトを実行して必要パッ ケージの追加やgemのインスト ールを実施 pre_build: テスト用DBデータの投入 build: RSpecの実行 post_build: zipパッケージの作成 artifacts: 作成したパッケージの場所を指定 installフェーズで実行するスクリプト(抜粋) ※YAML書式がおかしい、各phasesのスペルを間違えた、 などの場合全くビルド処理が実行されないので注意 特に…”pre-build” ではなく “pre_build” です
  54. 54. CodeBuildとのインテグレーション例 54 • JenkinsにPluginを導入 • Projectのビルドフェーズで「Run build on AWS CodeBuild」を追加 Regionとアクセスキー、シークレットキーを指定 CodeBuildのプロジェクト名を指定。今回ソースはCodeBuildのProject内で指定済み
  55. 55. CodeBuildとのインテグレーション例 55 Jenkinsのビルド画面にCodeBuild Dashboardが追加 CodeBuildの画面も同様の表示
  56. 56. Jenkins Workerの構成方法まとめ • Amazon EC2 • Amazon EC2 Spot Fleet • Amazon ECS • AWS CodeBuild 56
  57. 57. 目的に合わせたパイプラインをどのように構成するか 57
  58. 58. パイプラインとDevOpsタスク位置付けの例 58 本番 provision Deploy Monitor Code ソース Build ビルド インテグレー ションテスト Provision Deploy Test • すべての必要なプラット フォームでインテグレーショ ンテスト • 静的コード分析 • パフォーマンステスト ベータ テスト Provision Deploy Test • 手動テスト • 負荷テスト • エンドツーエンド機能テスト
  59. 59. パイプライン • 継続的デリバリの一連の工程を自動化 – 素早いデリバリの実現 – 問題発生時のフィードバック高速化 – 再現性のあるタスク実施 – デリバリプロセスの再利用 • Jenkinsにおける2種類の自動化 – 『自動化の進展は2つの側面から考えることができます。一つは,ソフ トウェア開発に必要な様々な作業それぞれの「部品の自動化」という 側面です。もう一つは,それら全体の順序や組み合わせを自動化する 「流れの自動化」という側面です』(川口氏) • http://gihyo.jp/dev/column/newyear/2017/continuous-integration- and-continuous-delivery 59
  60. 60. パイプラインの構成方法 • Jenkins – Pipelineプラグイン(Jenkins2より標準搭載) – 一連のパイプライン処理をスクリプトで記述 – 各種AWSのサービスとPluginにより連携 • AWS CodePipeline – Amazon社内のプロセスから生まれたパイプライン構築サービス – マネジメントコンソールやCLIを使用してパイプラインを定義 – CodePipeline Pluginによる連携や各種AWSのサービスとの連携 60 https://wiki.jenkins-ci.org/display/JENKINS/AWS+CodePipeline+Plugin
  61. 61. JenkinsとAWSサービスとの連携 • Pluginで各種AWSサービスと連携 – Code • CodeCommit (Git Pluginで連携) – HTTPS接続の際Gitと同様のID/PWによる認証が可能に(2016/12) – Build • CodeBuild – Test • (3rd Party Tools) – Deploy/Provision • CloudFormation • CodeDeploy • Elastic Beanstalk • (OpsWorksにはPluginがない模様) 61
  62. 62. AWS開発者用サービスとJenkinsの位置付け(再掲) 62 MonitorProvisionDeployTestBuildCode Elastic Beanstalk OpsWorks for Chef Automate OpsWorks Stacks Cloud Watch Cloud Formation Code Deploy Code Commit Code Pipeline Code Build
  63. 63. DevOps Tasks mapping for Amazon EC2 63 Provision Deploy TestBuildCode EC2 OS config Packages config Application Deploy
  64. 64. Provisioning & Deploy Task Coverage for EC2 64 EC2 OS config Packages config Application Deploy Other AWS Services Cloud Formation Elastic Beanstalk* OpsWorks Stacks** Code Deploy *) Fully managed configuration **) Configurable by Chef Recipe Customize with Additional Configuration Covered ELB/SQS/RDS Custom Layers with Chef Recipe cfn init.ebextension appspec.yml Instances & Layers
  65. 65. 目的別 Jenkins & AWSサービス パイプラインパターン • シンプル パイプライン • コンテナ パイプライン • モバイルアプリ パイプライン • セキュリティ自動化 パイプライン1, 2 65
  66. 66. シンプル パイプライン • コードがcommitされたらアプリケーションサーバへデプロイする ① コードをcommit ② CodePipelineがcommitを検知 ③ Jenkinsでビルドを実行してS3へ格納 ④ CodePipelineがCodeDeployを起動 ⑤ CodeDeployがApplication Serversへデプロイ 66 Developer CodeCommit CodePipeline CodeDeploy Application Servers Jenkins (EC2インスタンス) ① ② ③ ④ ⑤
  67. 67. コンテナ パイプライン • コードがcommitされたらDocker Imageを作成しECSへデプロイする ① コードをcommit ② Jenkinsがcommitを検知してコードを取得 ③ JenkinsがECRからDocker Imageをpull* ④ Jenkinsが更新されたコードでDocker Imageを再作成 ⑤ Jenkinsが更新されたDocker ImageをECRへpush* ⑥ Jenkinsが更新されたタスク/サービスをECS上で起動 67 Developer CodeCommit Jenkins ECS ECR ① ② ③ ④ ⑤ ⑥ *) Docker Build and Publish pluginからCredential Helper を使用したECRアクセスが可能 https://aws.amazon.com/blogs/compute/authenticating-amazon-ecr-repositories-for-docker-cli-with-credential-helper/
  68. 68. モバイルアプリ パイプライン • 各種モバイル端末上のテストを実行するためコードが commitされたらAWS Device Farmにアプリケーションを 送ってテストを実行する ① コードをcommit ② Jenkinsがcommitを検知してコードを取得 ③ JenkinsがアプリケーションとテストをDevice Farmに送り各種モバイル端 末上でテストを実行する 68 Developer CodeCommit Jenkins ① ② ③Tester Device Farm
  69. 69. セキュリティ自動化 パイプライン1 • セキュリティチェックをCI/CDの中で自動的に実行 開発スピードがセキュリティ対応のため遅れないようにする ① 開発者がCloudFormationのコードをcommit ② Jenkinsがcommitを検知してコードを取得してビルドプロセスを開始 ③ Jenkinsがセキュリティコントロール用のコードをセキュリティチームのリポジトリから取得 (許可されたIPアドレス範囲や許可されたAMIが何か、などを記載) ④ Jenkinsが開発者のCloudFormationテンプレートに対しセキュリティチェックを実施 (問題が見つかれば処理は停止する) ⑤ チェックに合格したらCloudFormationの実行を開始 69 Developer CodeCommit (Developer) Jenkins CloudFormation CodeCommit (Security Team) ① ② ③ ④ ⑤
  70. 70. セキュリティ自動化 パイプライン2 ① 開発者がCloudFormationのコードをcommit ② Jenkinsがcommitを検知してコードを取得してビルドプロセスを開始 ③ JenkinsがセキュリティチームのS3からCodeDeployの設定ファイル(AppSpec.yml)に対して行う べき設定情報を取得する ④ Jenkinsが開発者が作成したAppSpec.ymlとセキュリティチームのAppSpec.ymlをマージする ⑤ JenkinsがすべてのコンテンツをzipにまとめてS3に配置する ⑥ JenkinsがCodeDeployを起動し、EC2がS3バケットからzipファイルを取得してデプロイを開始する ⑦ セキュリティチームのAppSpec.ymlの処理に成功した場合のみCodeDeployが正常終了を返す 70 Developer CodeCommit (Developer) Jenkins S3 S3 ① ② ③ ④ ⑤ ⑦⑥ CodeDeploy Application Servers
  71. 71. 参考:AWSサービスによるパイプライン • コンテナの継続的デプロイ • サーバレスアプリケーションの継続的デリバリ 71
  72. 72. AWS CodePipeline 72 • 特徴 (http://aws.amazon.com/jp/codepipeline/) – デプロイまでのプロセスを管理 • Build/Test/Deployを組み合わせたフロー管理 • AWSサービスやサードパーティとの連携が充実 – パイプラインのバックアップ – 見やすいUI • Management Consoleで操作・確認 • 価格体系 (http://aws.amazon.com/jp/codepipeline/pricing/) – 1アクティブパイプライン毎に$1/月 – 1ヶ月に1つのパイプラインを無料提供 デプロイワークフロー管理サービス BuildSource Beta Production
  73. 73. 参考:コンテナの継続的デプロイ 73 • コンテナをECSに継続的デプロイするためのリファレンスアーキテクチャ • CloudFormationテンプレートが提供されておりすぐにお試しいただけます 原文→https://github.com/awslabs/ecs-refarch-continuous-deployment 日本語→https://aws.amazon.com/jp/blogs/news/continuous-deployment-to-amazon-ecs-using-aws-codepipeline-aws-codebuild- amazon-ecr-and-aws-cloudformation/
  74. 74. 参考:サーバレスアプリケーションの継続的デリバリ 74 • サーバレスアプリケーションモデル(SAM)を使用 • AWS API GatewayとAWS Lambdaで構成 • テスト/ベータ/ガンマそれぞれでテストし本番へリリース • リリースは手動承認 blog: https://aws.amazon.com/blogs/compute/continuous-deployment-for-serverless-applications/ CFnテンプレート: https://s3.amazonaws.com/awscomputeblogmedia/serverless-pipeline.yaml サンプルSAMアプリソースコード: https://s3.amazonaws.com/awscomputeblogmedia/timestamp_app.zip
  75. 75. まとめ 75 1. Jenkinsで何ができるのか? 2. Jenkins サーバ(Master)の構成 3. ビルド処理のオフロード 4. 目的に合わせたパイプライン
  76. 76. 参考資料 • Jenkins Official Site(英語) – https://jenkins.io/ • Jenkins on AWS White Paper (英語) – https://d0.awsstatic.com/whitepapers/DevOps/Jenkins_on_AWS.pdf – https://www.amazon.com/dp/B01MD0T33X (Kindle版) • DevOps on AWS – AWSの考えるDevOpsと各サービスの位置付けについて – https://aws.amazon.com/jp/devops/ • AWS Labs @GitHub – 各種リファレンスアーキテクチャのCFnテンプレートやサンプルコード – https://github.com/awslabs/ • AWSクラウドサービス活用資料集 – 各種サービス/ソリューションカットのオンラインセミナー資料 – https://aws.amazon.com/jp/aws-jp-introduction/ • DevOps Engineering on AWS(オフィシャルトレーニング) – AWSのDevOpsサービスを学ぶ3日間のコース。日本の最新事例も交え、ラボとディスカッションで理解を深めます。試験対策にも。 – https://aws.amazon.com/jp/training/course-descriptions/devops-engineering/ 76
  77. 77. Q&A 77
  78. 78. オンラインセミナー資料の配置場所 • AWS クラウドサービス活用資料集 – http://aws.amazon.com/jp/aws-jp-introduction/ • AWS Solutions Architect ブログ – 最新の情報、セミナー中のQ&A等が掲載されています – http://aws.typepad.com/sajp/ 78
  79. 79. 公式Twitter/Facebook AWSの最新情報をお届けします 79 @awscloud_jp 検索 最新技術情報、イベント情報、お役立ち情報、 お得なキャンペーン情報などを日々更新しています! もしくは http://on.fb.me/1vR8yWm
  80. 80. AWSの導入、お問い合わせのご相談 AWSクラウド導入に関するご質問、お見積り、資料請求を ご希望のお客様は以下のリンクよりお気軽にご相談ください https://aws.amazon.com/jp/contact-us/aws-sales/ ※「AWS 問い合わせ」で検索してください
  81. 81. AWS Black Belt Online Seminar • 1月の配信予定 – 1月25日(水) 18:00-19:00 AWS Storage Gateway – 1月31日(火) 12:00-13:00 AWSで実現するDisaster Recovery • 申し込みサイト https://aws.amazon.com/jp/about-aws/events/webinars/ (もしくは「AWS イベント」で検索)
  82. 82. AWS Black Belt Online Seminar • 2月の配信予定 – 2月1日(水) 18:00-19:00 AWS OpsWorks – 2月8日(水) 18:00-19:00 AWS Batch – 2月9日(木) 12:00-13:00 Docker on AWS – 2月22日(水) 18:00-19:00 Amazon EC2 Systems Manager – 2月28日(火) 12:00-13:00 IoT向け最新アーキテクチャパターン • 申し込みサイト https://aws.amazon.com/jp/about-aws/events/webinars/ (もしくは「AWS イベント」で検索)
  83. 83. 簡単なアンケートにご協力ください。 • 画面に表示されるアンケートフォームに入力をお願いします。 皆様のご意見は、今後の改善活動に活用させて頂きます。 コメント欄には1行で自由な内容を書き込み下さい。 例) - 本オンラインセミナーへのご意見 - 今後オンラインセミナーで取り上げて欲しい題材 - 発表者への激励 等々… ※Q&A同様に書き込んだ内容は主催者にしか見えません 83
  84. 84. ご参加ありがとうございました 84
  85. 85. 85
  86. 86. 補足:ElasticBeanstalkでJenkins Masterを稼働させる • ElasticBeanstalkのコンテナ上にJenkins Masterを構成することで、 EC2インスタンスの管理負荷を低減させることが可能 • ポイント – JenkinsのオフィシャルDockerイメージを使用する – ウェブサーバ環境で、プラットフォームはDocker、環境タイプは単一インスタンスを使用する – Dockerrun.aws.json および .ebextensionsを使用してElasticBeanstalk用のデプロイパッケー ジを作成する(次ページ参照) – 注意 • Jenkinsの初期パスワードを確認できるよう、EC2インスタンスにログインするキーペアを指定する • $JENKINS_HOMEはEC2インスタンスの/var/jenkinsに配置される 86
  87. 87. 補足:ElasticBeanstalkでJenkins Masterを稼働させる 87 { "AWSEBDockerrunVersion": "1", "Image": { "Name": "jenkins" }, "Ports": [ { "HostPort": "8080", "ContainerPort": "8080" } ], "Volumes": [ { "HostDirectory": "/var/jenkins_home", "ContainerDirectory": "/var/jenkins_home" }, { "HostDirectory": "/var/run/docker.sock", "ContainerDirectory": "/var/run/docker.sock" } ], "Logging": "/var/log/jenkins" } container_commands: 01-jenkins-user: command: useradd -u 1000 jenkins || echo 'User already exist!' 02-jenkins-user-groups: command: usermod -aG docker jenkins 03-jenkins-home: command: mkdir /var/jenkins_home || echo 'Directory already exist!' 04-changeperm: command: chown jenkins:jenkins /var/jenkins_home デプロイパッケージ(jenkins-eb.zip)の作成手順 $ find . -type f ./.ebextensions/instance.config ./Dockerrun.aws.json $ zip -r jenkins-eb.zip Dockerrun.aws.json .ebextensions/ adding: Dockerrun.aws.json (deflated 56%) adding: .ebextensions/ (stored 0%) adding: .ebextensions/instance.config (deflated 48%) $ ls Dockerrun.aws.json jenkins-eb.zip Dockerrun.aws.json instance.config

×