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

ZOZOTOWN のクラウドインフラ構築技術とその運用手法

ZOZOTOWN のクラウドインフラ構築技術とその運用手法

Azure 上の ZOZOTOWN のクラウドインフラ運用から得た環境の構築・管理自動化についての知見、およびそのインフラ上で稼働するアプリケーションの CI/CD フローと現状の課題について

takenakaJ

July 25, 2019
Tweet

More Decks by takenakaJ

Other Decks in Technology

Transcript

  1. © ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 開発部 リプレースチーム エンジニア
 竹中 達志


    2017年7月 株式会社スタートトゥデイ工務店(現 株式会社 ZOZOテクノロジーズ)入社
 ZOZOTOWN バックエンドを担当
 2018年10月~ ZOZOTOWN リプレースを担当
 2
  2. © ZOZO Technologies, Inc. アジェンダ
 • アーキテクチャ概要
 
 • Infrastructure

    の管理
 ◦ Packer、Ansible、Terraform
 
 • CI/CD の流れ
 ◦ Wercker、SonarQube、kustomize
 
 • オンプレ側の影響を少なくするための工夫
 3
  3. © ZOZO Technologies, Inc. アーキテクチャ概要
 4 SQL Database Azure Cache

    For Redis Azure Container Registry On Premiss Azure Kubernetes Service Application Gateway (L7 Load Balancer) Data Service Express Route push, merge Wercker ssh bastion
  4. © ZOZO Technologies, Inc. bastion
 6 SQL Database Azure Cache

    For Redis Azure Container Registry On Premiss Azure Kubernetes Service Application Gateway (L7 Load Balancer) Data Service Express Route push, merge Wercker ssh bastion
  5. © ZOZO Technologies, Inc. • そもそも bastion とは?
 ◦ 踏み台サーバーのこと


    
 • 環境変更は一か所からにしたい
 ◦ アプリケーション開発とインフラ基盤の整備を同じ場所からやらない
 
 • 各環境(dev、stg、prd)専用の bastion を用意
 ◦ 事故を防ぐ
 
 • image 作成&構成管理は Packer + Terraform + Ansible
 bastion
 7
  6. © ZOZO Technologies, Inc. • インフラ構築をテンプレートファイル(.tf ファイル)を使用して自動化するためのツー ル
 
 •

    複数のクラウドプロバイダーに対応
 
 • https://www.terraform.io/
 
 Terraform
 9
  7. © ZOZO Technologies, Inc. クラウドインフラ管理
 12 SQL Database Azure Cache

    For Redis Azure Container Registry On Premiss Azure Kubernetes Service Application Gateway (L7 Load Balancer) Data Service Express Route push, merge Wercker ssh bastion
  8. © ZOZO Technologies, Inc. • 一気に作ると事故る
 ◦ Terraform plan の結果をちゃんと見る


    ◦ Terraform apply でも、書いてあったリソースを tf ファイルから削除していればク ラウド上のリソースが消されてしまうので注意
 
 • 削除はクラウド側で Lock をかけておく
 ◦ 「うっかり」は起こる
 
 • 対応していないリソースや設定もある
 ◦ Azure CLI 等を組み合わせるしかない
 Terraform 利用時の注意
 14
  9. © ZOZO Technologies, Inc. アプリケーションと CI/CD
 15 SQL Database Azure

    Cache For Redis Azure Container Registry On Premiss Azure Kubernetes Service Application Gateway (L7 Load Balancer) Data Service Express Route push, merge Wercker ssh bastion
  10. © ZOZO Technologies, Inc. アプリケーションの deploy
 • コード静的解析
 ◦ push

    → SonarQube
 ◦ コードレビュー
 
 • リリースバージョン作成
 ◦ リリースバージョン push → Wercker → ACR へ image を 作成
 
 • Kubernetes クラスタへの deploy
 ◦ Canary 環境の pod へ version 指定した image を apply
 ◦ 問題がなければ全台リリース
 16
  11. © ZOZO Technologies, Inc. アプリケーションのデプロイ
 17 Azure Container Registry Azure

    Kubernetes Service push, merge Wercker ssh bastion Canary Production ① ②
  12. © ZOZO Technologies, Inc. アプリケーションの deploy
 • CD 自動化への課題
 ◦

    Canary リリースから全台リリースへの条件
 ◦ Rollback の条件
 ◦ などなど
 
 • Spinnaker といった CD ツール
 ◦ 検証に時間がかかる
 18
  13. © ZOZO Technologies, Inc. Kubernetes への deploy
 • kustomize で各環境の設定分離(pod

    数、resources など)
 ◦ yaml ファイルの見通しをよくする
 
 • namespace を分けると余計なリソースへの変更を防げる
 ◦ 事故を防ぐ
 
 19 # kustomization.yaml namespace: sample-namespace commonLabels: label1: label1-value label2: label2-value
  14. © ZOZO Technologies, Inc. オンプレとの通信
 20 SQL Database Azure Cache

    For Redis Azure Container Registry On Premiss Azure Kubernetes Service Application Gateway (L7 Load Balancer) Data Service Express Route push, merge Wercker ssh bastion
  15. © ZOZO Technologies, Inc. オンプレとの通信
 • L7 Load Balancer をはさむ


    ◦ オンプレ側からのエンドポイントを「クラスタ単位」にしたい
 ▪ オンプレ側の変更の方が手間がかかる
 
 • 「クラスタ単位」とは
 ◦ Kubernetes クラスタそのものではない
 ◦ Kubernetes の 複数の service リソースをまとめた単位とも見れる
 ◦ オンプレ側からは「どのクラスタに接続しているか」だけわかればよい
 21
  16. © ZOZO Technologies, Inc. クラスタ単位
 22 SQL Database Azure Cache

    For Redis Azure Container Registry On Premiss Azure Kubernetes Service Application Gateway (L7 Load Balancer) Data Service クラスタ単位
  17. © ZOZO Technologies, Inc. クラスタ単位で接続する
 23 On Premiss SQL Database

    Azure Cache For Redis Azure Kubernetes Service Application Gateway (L7 Load Balancer) SQL Database Azure Cache For Redis Azure Kubernetes Service Application Gateway (L7 Load Balancer)
  18. © ZOZO Technologies, Inc. 総括
 • 基本は自動化する
 
 • 自動化する

    = 消えるときも早い
 ◦ 環境の分離はミス防止に役立つ。最悪の事態を想定すること
 
 • 既存の環境との兼ね合いも大事
 ◦ 変更しにくい部分に引きずられないように
 24