Upgrade to Pro — share decks privately, control downloads, hide ads and more …

急成長するサービスを支える DevOps 戦略と組織変革へのアプローチ / Approaches of DevOps and Organization

急成長するサービスを支える DevOps 戦略と組織変革へのアプローチ / Approaches of DevOps and Organization

July Tech Festa 2017 で「急成長するサービスを支える DevOps 戦略と組織変革へのアプローチ」という発表をしてきた
http://kakakakakku.hatenablog.com/entry/2017/08/27/234215

July Tech Festa 2017
https://2017.techfesta.jp/

Yoshiaki Yoshida

August 27, 2017
Tweet

More Decks by Yoshiaki Yoshida

Other Decks in Technology

Transcript

  1. 吉田 慶章 @kakakakakku - Makuake : CyberAgent Crowd Funding, Inc.

    - 約2年前に JOIN (社内異動) - 責任範囲 - インフラ / サーバサイド - エンジニアリングマネージャー / スクラムマスター - 技術広報
  2. 吉田 慶章 @kakakakakku - 趣味 - 技術ブログを毎週書くこと - http://kakakakakku.hatenablog.com/ -

    副業 - プログラミング講師 - 今年は「技術支援 / コーチング」にも挑戦中
  3. 今日話すこと 急成長を支える ( ≒ 守る ) ための DevOps 戦略 急成長を支える

    ( ≒ 攻める ) ための DevOps 戦略 DevOps 戦略に必須だった 組織変革 へのアプローチ
  4. ノンバーバルなコミュニケーション - ノンバーバル = 非言語 - ようするに「表情, 態度, トーンなど」のこと -

    うなずき, 笑顔, 目線, ジャスチャーなど - 「話したい人」と「話したくない人」の違い - 参加者から「ノンバーバル」な反応があると嬉しい - ミーティングの場などでも, 活用できる
  5. Chef リファクタリング - 冪等性が保証されていないレシピが大量にあった - execute (shell 実行) を使う場合は creates

    / not_if とセットで - レシピを実行すると必ずミドルウェアが再起動されていた - notifies を使う - など, 他にもいろいろと - 結果的に, ほぼ全てをリファクタリングした
  6. Chef 関連ツールの導入 - RuboCop : 誰でも Ruby っぽく書けるように - 指摘

    1000件 → 0件 に - Foodcritic : Chef のアンチパターン実装を繰り返さないように - 指摘 150件 → 0件 に - Berkshelf : オレオレレシピを書かないように - Fluentd / Jenkins / Mackerel / PHP など
  7. Serverspec の活用 - サーバ構成の期待値がわからなかったため, リバースエンジニアリングを頑張った - history | grep vi

    を叩くと歴史が見えてくる - つらい - 期待値を Serverspec の spec として実装し, 繰り返し適用した - 構築後のサーバ確認ではなく, スノーフレークサーバの把握のために活用した - 全ロールで spec が通ったときは爽快だった
  8. インフラ CI の導入 - 開発プロセスを確立するために インフラ CI を導入した - CircleCI

    を使う - Chef レシピを修正してプルリクエストを送ると, 自動的に CI が実行される - RuboCop - Foodcritic - knife solo + Serverspec with Docker
  9. 必要なメトリクスを可視化できるように - メトリクスを可視化できていなく, 意思決定を行える状態ではなかった - 僕の口癖「全てはモニタリングから始まるんだ!」 - サーバメトリクス : Mackerel

    と Zabbix + Grafana を併用 - AWS メトリクス : CloudWatch - 各種エラーログ : Elasticsearch + Kibana - アプリケーションパフォーマンス : New Relic APM
  10. Mackerel の導入 - メトリクス取得 / アラート設定 / プロセス監視 / ダッシュボード管理

    - 設定値は全て Chef / cloud-init でプロビジョニングできるように - アラート設定とダッシュボード管理は Infrastructure as Code に - mkr monitors - mkr dashboards
 \ なんと, 2日前に「グラフボード」リリース! /
  11. Zabbix をもっと積極的に使う - メトリクスを活用するために Zabbix スクリーン職人になった - 後に grafana-zabbix を導入して,

    さらに便利に - 大量に出続けていたアラートの精査 - 日常的に無視されているアラートがあるのは危険 ⚠ - ほぼ全てのアラート設定を見直した - Zabbix 自体をチューニングし, サーバ数増加による負荷に対応
  12. New Relic APM - New Relic APM : Deployment Tracking

    - ただし Pro 限定 - デプロイ日時を記録することができる - デプロイ前後でのパフォーマンス確認が容易になる
  13. 毎日, 健康診断を受けているような状況に - どんどん発覚する異常値 / ボトルネック / 課題 - 効果のある改善施策を日々出せるように

    - ウェブサーバのメモリリークを撲滅 - ディスク使用量が異常に減り続けているサーバを改善 - など, 他にもいろいろと - アラートが鳴らなくても「何かしら起きている」という共通認識を作れた
  14. AWS Well-Architected Framework - クラウドネイティブなアーキテクチャのベストプラクティス集 - 抽象的な原則 - CDP (Cloud

    Design Pattern) と合わせて読むのが良い - 「質問集」を活用して「Well-Architected と言えるか?」と考える
  15. AWS Well-Architected Framework - 一般的な設計の原則 - 必要キャパシティーの推測をやめる - 本稼働スケールͰシステムをテストする -

    アーキテクチャ変更のリスクを低減する - 自動化によってアーキテクチャ実験を簡単にする - 発展するアーキテクチャの許可 - 5本の柱 - セキュリティ - 信頼性 - パフォーマンス効率 - コスト最適化 - 運用上の優秀性
  16. 「質問集」の例 - SEC 5. AWS リソースへの自動化されたアクセス (アプリケーション、スクリプト、サードパーティーツール
 またはサービスからのアクセスなど) をどのように制限していますか -

    REL 8. システムはコンポーネントの障害にどのように対応しますか - PERF 1. システムに対して適切なインスタンスタイプはどのように選択していますか - PERF 5. システムに最適なストレージソリューションをどのように選択していますか - COST 1. キャパシティーが必要量を満たしているが大幅に超えていないことをどのように実現していますか
  17. 具体的に改善した内容 (ほんの一部) - IAM Role を使えるように - ネットワーク (VPC) を再設計して運用しやすいように

    - 最適なインスタンスタイプで稼働できるように - Standard (Magnetic) EBS を撲滅できるように - など, 他にもいろいろと - 社内勉強会や雑談を通して, メンバーに知識を横展開した
  18. それって本当に「コスト削減」なの? - 1台のインスタンスに EIP をアタッチして運用されていた機能があった - かなり重要な機能で, 軽微なプロビジョニングを行うことも難しかった - 事前アナウンス

    + 平日夜間メンテナンス - これは「コスト削減」ではなく「運用上の障害」では? - ELB を使うことにし, 信頼性も運用しやすさも向上した - インスタンスタイプも1個下げることで, 2台になってもコストは同じ
  19. Aurora 移行 - データベースのライフサイクルは長い - ウェブサーバと比較すると, スケールアウトも難しく, SPOF になりがち -

    データベースで障害が起きると大惨事になる - もともと RDS ではなく MySQL 5.5 on EC2 を運用していた - uptime 1000 days 以上 \(^o^)/ - 急成長を支えるデータベースに移行をしたかった
  20. Aurora 移行 - Aurora を採用した理由 - クエリパフォーマンスの高さ - 限りなくゼロに近い, Reader

    のレプリカラグ - 高速なフェイルオーバー - MySQL 5.6 完全互換
 
 「Aurora 事例祭り」
  21. データドリブンな意思決定ができるように - Aurora 移行前は, 分析用のクエリを本番環境のスレーブに投げていた - スレーブが高負荷状態になることも - 分析用の Aurora

    Reader を用意し, サービス影響を気にしなくてよいように - Redash も導入し, 組織全体がデータドリブンな雰囲気に ( ダッシュボード 27個 ) ( クエリ 146個 )
  22. サーバレス - 定義はいろいろあれど, FaaS (Function as a Service) + α

    と考える - 銀の弾丸ではないが, 要件に合えば, 積極的に導入していく - ステートレス - イベントドリブン - スケールアウト - マイクロサービス - 現在, 開発中のものもあったり...?
  23. サーバレス - 新しい技術を導入する場合は, スモールスタートを意識する - 成功体験があると, 導入障壁が下がる - メンバーに知識を横展開するため, まずは社内ツールで導入した

    - 開発用のインスタンスを平日夜間と週末に自動的に停止するツール - CloudWatch Events + Lambda (Node.js) - CircleCI + Apex + ESLint
  24. フルマネージドサービス - 少人数で開発を回していくために, 運用コストをもっと下げたかった - AWS フルマネージドサービスを「当たり前に」使う - CloudFront /

    Route 53 / S3 - RDS / Amazon Elasticsearch Service / ElastiCache - Lambda / SQS / ECS - などなど - ECS (Docker) も, 要件に合えば, 積極的に導入していく
  25. DevOps は文化であるはずなのに - 経営層が全員非エンジニア & CTO 不在 - 何を伝えるにしても共通言語がなく, 高コストなコミュニケーションになる

    - 価値観の相違により, 伝わらなかったことも多々あった - 「なぜ DevOps なのか?」 - 「なぜ技術的負債と向き合う必要があるのか?」 - UI/UX などと違って DevOps は特に理解されにくい
  26. エンジニアリングのことを知ってもらう - 社内の技術勉強会に必ず参加してもらった - ブログ記事 / 勉強会資料を見てもらった - 「どうでしたかー?」と毎回感想を聞くように工夫した -

    プログラミング入門書を買って写経してもらった - プログラミング / デバッグの難しさを知ってもらえたのは効果があった - GitHub のアクセス権限を与えて, プルリクエストのレビュー風景を見てもらった - パフォーマンス改善をしたらグラフを見せてアピールをした
  27. なぜ計画が重要なのか? - 無駄を無くすため - 優先順位を明確にし, 今やるべきことを今やる - 信頼残高を増やすため - 「先週まで進捗

    90% だったのですが, 考慮漏れがあり 50% です 」 - 何度も続くと信頼残高が無くなる - 「あの人が言うなら成功しそう」感 - 僕の計画スキルをメンバーに横展開することで, 信頼を勝ち得る
  28. まとめ 急成長を支える ( ≒ 守る ) ための DevOps 戦略 急成長を支える

    ( ≒ 攻める ) ための DevOps 戦略 DevOps 戦略に必須だった 組織変革 へのアプローチ