Skip to content

Instantly share code, notes, and snippets.

@dtan4
Created June 3, 2015 08:50
Show Gist options
  • Save dtan4/3847f8c9585e06de69fb to your computer and use it in GitHub Desktop.
Save dtan4/3847f8c9585e06de69fb to your computer and use it in GitHub Desktop.

開発戦略性を上げるためのデプロイ戦略

  • 吉羽さん

deploy

  • あらゆる環境へのコードやバイナリ、アセットなどの配布
  • インフラの構築はプロビジョニング

amazon

  • amazon.com
    • 平日のデプロイ感覚 11.6s
    • 1,000~ times / 1h
    • 10,000 ~ 30,000 hosts
  • Two pizza ルール
  • 作った人が運用もやる
    • you build it, you run it
  • クロスファンクショナルチーム
    • 人間とスキルセットの表
  • API によるチーム疎結合
  • デプロイ自動化と全チームでの利用

問題

  • 手順書 (xlsx) がメンテナンスされない
  • 手作業で間違う
  • 職人芸への依存
  • リリース、ロールバック失敗
  • 長時間作業
  • コスト増大
  • 清水の舞台から飛び下りる心構え
  • プロダクトの本質に集中したい

戦略

  • いつ、誰が、要件は、プロセスは

デプロイ自動化の基本原則

  • 完全自動化
  • 変更量最小化
  • 高速完了
  • 不可逆変更回避
  • 成功・失敗自動判定
  • 失敗時ロールバック
  • デプロイパターン集約
  • 常にリリース可能に保つ
  • 自動化コスト
    • 本番環境以外のデプロイもトータルで考える
    • 新人教育コスト、手作業で失敗した時のコスト

AWS

  • OpsWorks
    • カスタム構成 (Chef) + デプロイ
  • CodeDeploy
    • agent
  • 1 EC2 + 1 RDS
    • 手作業, rsync, cap, CodeDeploy, EBS
    • DNS フェイルオーバ or ELB + Sorry サーバでメンテナンスモード
  • 2 AZ
    • cap, CodeDeploy, EBS
    • 1台ずつ反映するか全部一気に反映するか
    • ELB Connection Draining
      • 処理中のリクエストが終わるまで一定時間待つ
    • 複数バージョンが共存してしまう
  • dev と prod の相違
    • ちゃんと管理する
    • 環境変数
    • AMI に埋め込まない
  • Auto Scaling
    • 稼働中インスタンスへのデプロイ
    • AMI の作り込み
      • 全部入り, Golden image (App 以外), 最小限 (Chef)
    • cloud-init 活用
    • Auto Scaling + cloud-init, EBS, CodeDeploy
  • AMI 自動作成
    • Jenkins -> Packer -> EC2 -> Serverspec -> AMI
  • blue-green
  • コンテナ
    • ポートマッピング変更
  • マイクロサービス
    • 各チームバラバラにデプロイ
    • API バージョニング
    • スロットリング
  • デプロイツール
    • 各個人間でのバージョン差異
    • CI, ChatOps に集約化
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment