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

【解説】第7章 はじめての本番デプロイ / zozotechbook1-ch07-deploypipeline

【解説】第7章 はじめての本番デプロイ / zozotechbook1-ch07-deploypipeline

Title
【解説】第7章 はじめての本番デプロイ

Speaker
光野 達朗 Tatsuro Mitsuno (技術開発本部 SRE部 テックリード)

2020/04/28 【オンライン】#技術書典 頒布本「ZOZO TECH BOOK」解説会 Vol.1
https://zozotech-inc.connpass.com/event/173309/
#zozotech

Tatsuro Mitsuno

April 28, 2020
Tweet

More Decks by Tatsuro Mitsuno

Other Decks in Technology

Transcript

  1. © ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 技術開発本部 SRE部
 テックリード
 
 光野

    達朗
 2012年ヤフー株式会社にサーバサイドエンジニアとして入 社。2016年4月からは株式会社VASILYでインフラエンジニ ア。2018年4月から現職。現在はAWSを専門とするSREテッ クリードとして、クラウドアーキテクチャの構築と信頼性向上 に従事。
 ウィスキーと葉巻が好き。愛してる。
 
 2
  2. © ZOZO Technologies, Inc. 本章の概要
 • 本章では、AWS上に作られる本番環境への自動デプロイについて具体的な手法 を説明しています。
 • 状況設定


    ◦ デプロイするアプリケーションはWebAPI
 ◦ 本番環境は、複数のサーバから構成されユーザトラフィックが常に発生
 • デプロイを自動化する際に考慮すべき部分を挙げ、AWSのサービスを用いて具体 的な対策を行います。
 • なお、テスト(アプリケーションの動作を保証する行為全般)については取り扱いま せん。
 3
  3. © ZOZO Technologies, Inc. 本文と発表内容の対応
 章構成
 • 7.1 はじめに
 ◦

    導入部分、デプロイ大事
 
 • 7.2 デプロイしましょ
 ◦ 環境構築について
 
 • 7.3 本番デプロイのために考慮すべき課題たち
 ◦ 3つの課題について
 
 • 7.4 おわりに
 ◦ 内容の要約、素敵なデプロイライフを!
 4
  4. © ZOZO Technologies, Inc. 本文と発表内容の対応
 章構成
 • 7.1 はじめに
 ◦

    導入部分、デプロイ大事
 
 • 7.2 デプロイしましょ
 ◦ 環境構築について
 
 • 7.3 本番デプロイのために考慮すべき課題たち
 ◦ 3つの課題について
 
 • 7.4 おわりに
 ◦ 内容の要約、素敵なデプロイライフを!
 5 本文に載っていない話をします。
 デプロイ自動化の動機部分を補足します
 環境構築が中心なので、
 本発表では取り上げません。完成図だけ。
 内容を要約して説明します。
 CodeDeployはいいぞ
 おわりに

  5. © ZOZO Technologies, Inc. 6 デプロイを自動化するモチベーション
 Icons made by Smashicons

    from www.flaticon.com エンジニア ユーザ アプリケーション 本番環境 利用 開発 デプロイ デプロイ:アプリケーションを本番環境に配置する行為全般
 デプロイしないと、ユーザに新しい価値を提供できない

  6. © ZOZO Technologies, Inc. 7 デプロイを自動化するモチベーション
 
 Icons made by

    Smashicons from www.flaticon.com エンジニア ユーザ アプリケーション 利用 開発 デプロイ 手動でも良い
 $ zip ; scp ; mv ; unzip ; ...
 デプロイ先
  7. © ZOZO Technologies, Inc. 8 デプロイを自動化するモチベーション
 
 Icons made by

    Smashicons from www.flaticon.com エンジニア ユーザ アプリケーション 利用 開発 デプロイ サーバが10台、100台だったら・・・?

  8. © ZOZO Technologies, Inc. 9 デプロイを自動化するモチベーション
 
 Icons made by

    Smashicons from www.flaticon.com Aさん ユーザ 利用 デプロイ AさんとBさんのデプロイ作業は同じ?
 開発 Bさん デプロイ 開発 デプロイ先
  9. © ZOZO Technologies, Inc. 10 デプロイを自動化するモチベーション
 
 Icons made by

    Smashicons from www.flaticon.com Aさん ユーザ 利用 デプロイ 一番集中したいのはここ
 開発 Bさん デプロイ 開発 デプロイ先
  10. © ZOZO Technologies, Inc. 11 デプロイを自動化するモチベーション
 
 Icons made by

    Smashicons from www.flaticon.com Aさん ユーザ 利用 開発 Bさん 開発 デプロイ 素敵な 仕組み 本番環境へのデプロイを自動化するモチベーション
 作業効率を高める / 作業品質を維持する / 開発に集中する

  11. © ZOZO Technologies, Inc. デプロイを自動化すモチベーション
 12 • 開発したアプリケーションは、デプロイしてユーザへ届ける必要がある
 ◦ デプロイ:アプリケーションを本番環境に配置する行為全般


    • デプロイは、手動でもできる
 ◦ zipで固めたアプリケーションを、サーバにscpして、unzipして、mv
 • 1台ならまだなんとかなるが、デプロイ先が10台100台と増えると破綻する
 • 仮に1台であったとしても、手作業は常に作業ミスと隣り合わせ
 ◦ Aさんの作業品質と、Bさんの作業品質が同じかはわからない
 ◦ 反映するだけのために、
 • 複数台に対して、安心安全にアプリケーションを反映する仕組みがあることで、エ ンジニアは開発に集中できる

  12. © ZOZO Technologies, Inc. 本番デプロイのために考慮すべき課題たち
 1. 複数の反映対象を管理すること
 
 2. 反映前後で処理を安全に継続すること


    
 3. 失敗を検知しロールバックすること
 16 全てCodeDeployを使って解決が可能で、 本文ではCodeDeploy中のどの設定が対応するかを説明している
  13. © ZOZO Technologies, Inc. 課題その1. 複数の反映対象を管理すること
 
 17 Icons made

    by Smashicons from www.flaticon.com アプリケーション グループA グループB • アプリケーションは、 グループAにだけデプロイしたい • サーバは、トラブルやAutoScalingで 入れ替わるかもしれない ◯必要なもの デプロイ先を賢く絞り込む仕組み ◯CodeDeployでは... タグ or AutoScalingGroupで デプロイ先を指定できるため、 サーバ1つ1つを特別視しなくて良い
  14. © ZOZO Technologies, Inc. 課題その2. 反映前後で処理を安全に継続すること
 
 
 18 •

    アプリケーションの更新には、 プロセスの更新を伴う事が多い • ユーザトラフィックを受けたまま更新 するとエラーとなる ◯必要なもの プロセス切り替えの瞬間を ユーザに気づかせない仕組み ◯CodeDeployでは... トラフィックが無い状態を作る。 LBデタッチ / デプロイ / LBアタッチ ミドルウェアがGracefull restartに対応 していればなお良し アプリケーション Icons made by Smashicons from www.flaticon.com LB(ロードバランサ) ユーザトラフィック
  15. © ZOZO Technologies, Inc. 課題その3. 失敗を検知しロールバックすること
 
 
 19 •

    トラブルは、 デプロイ起因の場合が多い • 本番にデプロイして発生する問題を ゼロにするのは難しい ◯必要なもの 異常検知とロールバックする仕組み ◯CodeDeployでは... 1. デプロイスクリプトの処理結果 (exit code) 2. CloudWatch Alarm の2パターンでロールバックが可能 Icons made by Smashicons from www.flaticon.com アプリケーション 正常動作 不具合発生 本番環境
  16. © ZOZO Technologies, Inc. おわりに
 21 • ZOZO TECH BOOK

    VOL.1 第7章では、
 本番環境への自動化されたデプロイについて説明しました
 • 自動化することで、作業効率を高め作業品質を維持し開発に集中できます
 • 安全なサービスリリースのために、
 デプロイパイプライン構築を計画してください
 • ネットワークとデプロイパイプラインのサンプルコードあり〼
 https://github.com/st-tech/zozotechbook1-ch07-deploypipeline/