Slide 1

Slide 1 text

DevOps 2018.05.13 新卒エンジニア研修

Slide 2

Slide 2 text

佐藤 有花 Yuka Sato 株式会社ガイアックス 2015年4月入社 6月DCD配属 2016年6月RNDへ移籍 さきがけチーム所属 現在までTRUSTDOCK事業部で開発を担当 スペシャリストではないけれど 事業を作っていきたい系エンジニアです

Slide 3

Slide 3 text

本講義の目的 ● DevOps の本質を理解する ● DevOps の文脈でよく登場するキーワードについて理解する ○ 継続的インテグレーション、継続的デリバリー、継続的デプロイ ○ Immutable Infrastracture、Infrastracture as Code、Blue Green Deployment ● DevOps のための主要なツールとその使い方を知り、事業配属後の導入や運用に 役立てる

Slide 4

Slide 4 text

本講義の内容 ● DevOps とは ○ 30min ● DevOps の実践 ○ 30min ● 課題 ○ 30min ● Immutable Infrastracture / Infrastracture as Code / Blue Green Deployment ○ 30min ● 課題 ○ 60min ● TRUSTDOCK での DevOps ○ 15min

Slide 5

Slide 5 text

DevOps ってなに?

Slide 6

Slide 6 text

DevOps ってなに? 開発と運用が連携すること?

Slide 7

Slide 7 text

DevOps ってなに? ツールを使って自動化すること?

Slide 8

Slide 8 text

DevOps ってなに? 1日に何度もデプロイすること?

Slide 9

Slide 9 text

DevOps の定義を調べてみよう

Slide 10

Slide 10 text

DevOps の定義 DevOps はソフトウェア開発手法の一つ。開発(Development)と運用(Operations) を組 み合わせたかばん語であり、開発担当者と運用担当者が連携して協力する開発手法を さす。ソフトウェアのビルド、テスト、そしてリリースの文化と環境を以前よりも迅速に、頻 繁に、確実に発生する確立を目指している。(Wikipedia) DevOps とは、開発部門と運用部門が密に連携し、様々な手法と文化を取り入れ商品 やサービスの改善にかかる時間を短縮し、迅速にビジネスニーズに応えること。 (DevOps導入指南)

Slide 11

Slide 11 text

DevOps の定義 DevOps では、従来型のソフトウェア開発と、インフラストラクチャ管理プロセスを使用す るよりも速いペースで製品の進歩と向上を達成し、企業がアプリケーションやサービスを 高速で配信できるように、文化的な基本方針、プラクティス、ツールが組み合わされてい ます。この高速化により、企業は顧客により良いサービスを提供し、市場競争力を高め ることができます。(AWS) DevOpsとは、ソフトウェアの開発担当と導入・運用担当が密接に協力する体制を構築 し、ソフトウェアの導入や更新を迅速に進めること。(IT用語辞典 e-words) DevOps の定義は、厳格には決められていないのが現状

Slide 12

Slide 12 text

DevOps の定義 DevOps を調べると、働き方や文化、組織構造、ツール、アーキテクチャなどを内包する 広い概念であることが分かる ここで、DevOps という言葉の理解が皆バラバラだと ● 自分たちに DevOps が必要なのか? ● 自分たちは DevOps の何から始めるべきか?どこを取り入れるべきか? が判断しにくい だから、DevOps の本質を正しく理解する必要がある そこで、DevOps が誕生した背景を知り、DevOps が必要になった状況について考えて みよう

Slide 13

Slide 13 text

DevOps が誕生した背景

Slide 14

Slide 14 text

DevOps が誕生した背景 DevOps の誕生までの土壌として、以下の2点がある 1. アジャイル開発による継続的な改善への変化 2. 継続的な改善における運用課題

Slide 15

Slide 15 text

アジャイル開発による継続的な改善への変化 ビジネスニーズの変化の早さに対応するため、ウォーターフォール開発からアジャイル 開発へシフトした結果、従来では考えられなかった頻度でのリリースに対応する必要が 生まれた ● ウォーターフォール開発 ○ 要件定義・開発・テスト・リリースの工程を一つ一つ時間をかけて作り上げていく ● アジャイル開発 ○ 必要最小限の製品を作り上げ、その後も小さな変更を頻繁にリリースして改善していく そこで「効率化や自動化を行い、リリースまでにかかる時間を短縮しよう」という考え方 が生まれ、継続的に成果物を仕上げていく体制へと進化した

Slide 16

Slide 16 text

継続的な改善における運用課題 しかし、開発だけでは進められる効率化や自動化に限界があった 特にインフラの構築や設定変更には、開発チームと運用チームとが分断されていること で様々な問題が起こりやすかった 開発チームと運用チームが分断されていると... ● 運用はアプリの影響範囲が分からないため、中 途半端な対応しかできず技術的負債を抱えや すい ● 開発はモニタリング・冗長化・バックアップ等の 非機能要件をチェックし忘れる

Slide 17

Slide 17 text

DevOps の誕生 2009年に O'Reilly 主催のカンファレンス Velocity にて、Flickr のエンジニアが“10+ Deploys per Day” という発表を行い、ここで初めて「DevOps」という言葉が登場した 開発と運用で達成すべきミッションが異なるため、対 立関係が起こりやすいが... ● 開発は「改善のために変更したい」 ● 運用は「安定稼働のために変更したい」 開発も運用も「変化するビジネスニーズに応える」と いう同じミッションに向かおう 変更のリスクは手法と文化によって軽減しよう = DevOps だ!

Slide 18

Slide 18 text

DevOps の本質 こうした背景から、開発と運用が「変化するビジネスニーズに応える」という同じミッション に向かって協力する、そのために様々な手法や文化を取り入れることが DevOps と言 える これを踏まえて、本講義では DevOps の定義を下記として進める DevOps とは、開発と運用が密に連携し 様々な手法と文化を取り入れ 迅速にビジネスニーズに応えること

Slide 19

Slide 19 text

自分たちに DevOps は必要?

Slide 20

Slide 20 text

自分たちに DevOps は必要? 正解はない が、新規事業の初期段階ではクラウドが当たり前であり 「開発と運用の対立」は少ないが「開発と運用の兼任」が多い 開発しか見えていないと、運用開始後に多くの問題が発生したり、継続的に改善を続け ることが難しくなったりするかもしれない 自分たちのその時の課題に合わせて、必要なところから取り入れよう

Slide 21

Slide 21 text

DevOps の実践

Slide 22

Slide 22 text

開発サイクルの効率化

Slide 23

Slide 23 text

開発サイクルの効率化 変更をコミット→ビルド・テスト→テスト環境にデプロイ→本番環境にデプロイ この開発サイクルを効率化しよう

Slide 24

Slide 24 text

継続的インテグレーション (CI) とは、バージョン管理システムにコードをコミットしたタイミ ングで、自動的にコードのビルドとテストを実行すること 継続的インテグレーション

Slide 25

Slide 25 text

● 早期に問題を発見できる ● テストやビルドを変更の度に実行するコストが削減できる ● テストやビルドの実行漏れを防げる ● テスト結果が見える化され、チームで共有できる 継続的インテグレーション

Slide 26

Slide 26 text

継続的インテグレーション 1. 開発者は自分のローカル環境にコードをチェックアウトする 2. コードの変更が完了したら、変更をコミットし、リポジトリにプッシュする 3. CI サーバはリポジトリを監視し、変更が発生したときにチェックアウトする 4. CI サーバは設定ファイルに記されたとおりに環境を構築し、コードのビルド、ユニッ トテストと統合テストを実行する 5. CI サーバは成功をチームに通知する 6. ビルドまたはテストが失敗した場合、CI サーバは失敗をチームに通知する 7. チームはできるだけ早く問題を修正する 8. 継続的にプロジェクト全体の統合とテストを継続する

Slide 27

Slide 27 text

CI ツール 自前で CI サーバを立てることもできるが、継続的インテグレーションを支援するツール を利用することで楽に導入できる - Jenkins - CircleCI - TravisCI

Slide 28

Slide 28 text

継続的デリバリー (CD) とは、継続的インテグレーションを拡張した概念であり、本番環 境へのリリースの手前までを自動化する セキュリティテスト、性能テスト、負荷テスト、障害テスト、受け入れテストなどのあらゆる テストの自動化を含む 継続的デリバリー

Slide 29

Slide 29 text

継続的デプロイ 継続的デプロイ (CD) はさらに拡張した概念であり、本番環境へのリリース完了までを 自動化する

Slide 30

Slide 30 text

インフラ管理の効率化

Slide 31

Slide 31 text

Infrastructure as Code Infrastructure as Code とは、インフラの設定変更手順を自動化するためにコード化す ること。これにより、ソフトウェア開発の手法をインフラの構築にも適用可能とすること ● インフラの構成や設定を共有できる ● 誰でも再現でき、属人性を排除できる ● 自動化により迅速に確実に設定が適用できる ● バージョン管理やテスト駆動開発などの開発手法を適用可能になる

Slide 32

Slide 32 text

Infrastructure as Code Infrastructure as Code を実現するツールとして、プロビジョニングツール(構成管理 ツール)がある ● Chef ● Itamae ● Ansible

Slide 33

Slide 33 text

Immutable Infrastructure Immutable Infrastracture は、一度構築・稼働したインフラには手を加えないという考え 方。変更を加える際は古いサーバを破棄し、新しくサーバを一から構築する 変更の度に手動でサーバ構築するのは大変なので、Infrastracture as Code で自動化 する 古いサーバから新しいサーバに切り替えるのにサービス停止が必要になるので、Blue Green Deployment を取り入れる

Slide 34

Slide 34 text

Blue Green Deployment Blue Green Deployment とは、Blue と Green と呼ばれる2種類の環境を用意し、どち らか一方のみユーザが利用するようにする ユーザが利用していない環境にリリース作業を行い、Blue と Green の接続先を切り替 えることで、サービス停止なく切り替え完了させる トラブル発生時には、ユーザの接続先を戻すだけで復旧が可能となる。切り替え後、トラ ブルに対する調査や対応はもう一方の環境に対して行えば良い ● サービス停止なしに変更をリリース可能 ● ロールバックが簡単

Slide 35

Slide 35 text

応用課題 ● CircleCI でプロジェクトを作り、ビルドしてみよう ● Github と CircleCI を連携し、ビルドが通るまで master ブランチにマージできない ようにしよう ● CodeDeploy を使って既存のサーバに最新のコードを自動デプロイしよう ● CI でビルドが成功したら、CodeDeploy でデプロイが実行されるようにしよう ● Ansible でサーバに設定を適用しよう ● CodeDeploy を使って Blue-Green Deployment をやってみよう