Title 【解説】第7章 はじめての本番デプロイ
Speaker 光野 達朗 Tatsuro Mitsuno (技術開発本部 SRE部 テックリード)
2020/04/28 【オンライン】#技術書典 頒布本「ZOZO TECH BOOK」解説会 Vol.1 https://zozotech-inc.connpass.com/event/173309/ #zozotech
【解説】第7章 はじめての本番デプロイ #技術書典 頒布本「ZOZO TECH BOOK」解説会 Vol.1 株式会社ZOZOテクノロジーズ 技術開発本部 SRE部 テックリード 光野達朗Copyright © ZOZO Technologies, Inc.
View Slide
© ZOZO Technologies, Inc.株式会社ZOZOテクノロジーズ 技術開発本部 SRE部 テックリード 光野 達朗 2012年ヤフー株式会社にサーバサイドエンジニアとして入社。2016年4月からは株式会社VASILYでインフラエンジニア。2018年4月から現職。現在はAWSを専門とするSREテックリードとして、クラウドアーキテクチャの構築と信頼性向上に従事。 ウィスキーと葉巻が好き。愛してる。 2
© ZOZO Technologies, Inc.本章の概要 ● 本章では、AWS上に作られる本番環境への自動デプロイについて具体的な手法を説明しています。 ● 状況設定 ○ デプロイするアプリケーションはWebAPI ○ 本番環境は、複数のサーバから構成されユーザトラフィックが常に発生 ● デプロイを自動化する際に考慮すべき部分を挙げ、AWSのサービスを用いて具体的な対策を行います。 ● なお、テスト(アプリケーションの動作を保証する行為全般)については取り扱いません。 3
© ZOZO Technologies, Inc.本文と発表内容の対応 章構成 ● 7.1 はじめに ○ 導入部分、デプロイ大事 ● 7.2 デプロイしましょ ○ 環境構築について ● 7.3 本番デプロイのために考慮すべき課題たち ○ 3つの課題について ● 7.4 おわりに ○ 内容の要約、素敵なデプロイライフを! 4
© ZOZO Technologies, Inc.本文と発表内容の対応 章構成 ● 7.1 はじめに ○ 導入部分、デプロイ大事 ● 7.2 デプロイしましょ ○ 環境構築について ● 7.3 本番デプロイのために考慮すべき課題たち ○ 3つの課題について ● 7.4 おわりに ○ 内容の要約、素敵なデプロイライフを! 5本文に載っていない話をします。 デプロイ自動化の動機部分を補足します 環境構築が中心なので、 本発表では取り上げません。完成図だけ。 内容を要約して説明します。 CodeDeployはいいぞ おわりに
© ZOZO Technologies, Inc.6デプロイを自動化するモチベーション Icons made by Smashicons from www.flaticon.comエンジニア ユーザアプリケーション本番環境利用開発 デプロイデプロイ:アプリケーションを本番環境に配置する行為全般 デプロイしないと、ユーザに新しい価値を提供できない
© ZOZO Technologies, Inc.7デプロイを自動化するモチベーション Icons made by Smashicons from www.flaticon.comエンジニア ユーザアプリケーション利用開発 デプロイ手動でも良い $ zip ; scp ; mv ; unzip ; ... デプロイ先
© ZOZO Technologies, Inc.8デプロイを自動化するモチベーション Icons made by Smashicons from www.flaticon.comエンジニア ユーザアプリケーション利用開発 デプロイサーバが10台、100台だったら・・・?
© ZOZO Technologies, Inc.9デプロイを自動化するモチベーション Icons made by Smashicons from www.flaticon.comAさんユーザ利用デプロイAさんとBさんのデプロイ作業は同じ? 開発Bさんデプロイ開発 デプロイ先
© ZOZO Technologies, Inc.10デプロイを自動化するモチベーション Icons made by Smashicons from www.flaticon.comAさんユーザ利用デプロイ一番集中したいのはここ 開発Bさんデプロイ開発 デプロイ先
© ZOZO Technologies, Inc.11デプロイを自動化するモチベーション Icons made by Smashicons from www.flaticon.comAさんユーザ利用開発Bさん開発 デプロイ素敵な仕組み本番環境へのデプロイを自動化するモチベーション 作業効率を高める / 作業品質を維持する / 開発に集中する
© ZOZO Technologies, Inc.デプロイを自動化すモチベーション 12● 開発したアプリケーションは、デプロイしてユーザへ届ける必要がある ○ デプロイ:アプリケーションを本番環境に配置する行為全般 ● デプロイは、手動でもできる ○ zipで固めたアプリケーションを、サーバにscpして、unzipして、mv ● 1台ならまだなんとかなるが、デプロイ先が10台100台と増えると破綻する ● 仮に1台であったとしても、手作業は常に作業ミスと隣り合わせ ○ Aさんの作業品質と、Bさんの作業品質が同じかはわからない ○ 反映するだけのために、 ● 複数台に対して、安心安全にアプリケーションを反映する仕組みがあることで、エンジニアは開発に集中できる
© ZOZO Technologies, Inc.本章で構築するネットワーク 13
© ZOZO Technologies, Inc.本章で構築するネットワーク 14環境再現用のCloudFormationテンプレートあり〼https://github.com/st-tech/zozotechbook1-ch07-deploypipeline/
© ZOZO Technologies, Inc.本番デプロイのために考慮すべき課題たち 1. 複数の反映対象を管理すること 2. 反映前後で処理を安全に継続すること 3. 失敗を検知しロールバックすること 15
© ZOZO Technologies, Inc.本番デプロイのために考慮すべき課題たち 1. 複数の反映対象を管理すること 2. 反映前後で処理を安全に継続すること 3. 失敗を検知しロールバックすること 16全てCodeDeployを使って解決が可能で、本文ではCodeDeploy中のどの設定が対応するかを説明している
© ZOZO Technologies, Inc.課題その1. 複数の反映対象を管理すること 17Icons made by Smashicons from www.flaticon.comアプリケーショングループAグループB● アプリケーションは、グループAにだけデプロイしたい● サーバは、トラブルやAutoScalingで入れ替わるかもしれない◯必要なものデプロイ先を賢く絞り込む仕組み◯CodeDeployでは...タグ or AutoScalingGroupでデプロイ先を指定できるため、サーバ1つ1つを特別視しなくて良い
© ZOZO Technologies, Inc.課題その2. 反映前後で処理を安全に継続すること 18● アプリケーションの更新には、プロセスの更新を伴う事が多い● ユーザトラフィックを受けたまま更新するとエラーとなる◯必要なものプロセス切り替えの瞬間をユーザに気づかせない仕組み◯CodeDeployでは...トラフィックが無い状態を作る。LBデタッチ / デプロイ / LBアタッチミドルウェアがGracefull restartに対応していればなお良しアプリケーションIcons made by Smashicons from www.flaticon.comLB(ロードバランサ)ユーザトラフィック
© ZOZO Technologies, Inc.課題その3. 失敗を検知しロールバックすること 19● トラブルは、デプロイ起因の場合が多い● 本番にデプロイして発生する問題をゼロにするのは難しい◯必要なもの異常検知とロールバックする仕組み◯CodeDeployでは...1. デプロイスクリプトの処理結果(exit code)2. CloudWatch Alarmの2パターンでロールバックが可能Icons made by Smashicons from www.flaticon.comアプリケーション正常動作不具合発生本番環境
© ZOZO Technologies, Inc.20CodeDeployをしっかり使えば多くの課題を解決可能要約すると
© ZOZO Technologies, Inc.おわりに 21● ZOZO TECH BOOK VOL.1 第7章では、 本番環境への自動化されたデプロイについて説明しました ● 自動化することで、作業効率を高め作業品質を維持し開発に集中できます ● 安全なサービスリリースのために、 デプロイパイプライン構築を計画してください ● ネットワークとデプロイパイプラインのサンプルコードあり〼 https://github.com/st-tech/zozotechbook1-ch07-deploypipeline/