Slide 1

Slide 1 text

© DMM.com で実現する 〜サーバレスで デプロイする仕組みと工夫点〜 2018/11/23 JAWS-UG金沢 #36

Slide 2

Slide 2 text

© DMM.com 自己紹介 : 業界2年目 元認証基盤チーム 現カスタマーサービスサポートチーム バックエンドエンジニア 好きな サービス:

Slide 3

Slide 3 text

© DMM.com アジェンダ

Slide 4

Slide 4 text

© DMM.com 話すこと ・認証基盤チームのデプロイ/リリース方法 ・ の構成 ・工夫した点

Slide 5

Slide 5 text

© DMM.com 話さないこと ・ とはなにか? ・各種 リソースの説明

Slide 6

Slide 6 text

© DMM.com 目次 ・ 導入前 ・デプロイ/リリースの流れ ・ 導入後 ・ コマンドの仕組み ・工夫ポイント ・まとめ

Slide 7

Slide 7 text

© DMM.com 導入前

Slide 8

Slide 8 text

© DMM.com 導入前 ・ デプロイでデプロイ作業を実施 ・リリース作業はすべて コンソールで手動操作 ・総作業時間(検証含め)約4時間 ・ 〜2週に1回リリース

Slide 9

Slide 9 text

© DMM.com デプロイ/リリースの流れ

Slide 10

Slide 10 text

© DMM.com Auto Scaling group デプロイ 本番用 instances Auto Scaling group instances

Slide 11

Slide 11 text

© DMM.com Auto Scaling group 検証 本番用 instances Auto Scaling group instances 検証用

Slide 12

Slide 12 text

© DMM.com Auto Scaling group リリース 本番用 instances Auto Scaling group instances

Slide 13

Slide 13 text

© DMM.com のデプロイ方式は インプレースデプロイと デプロイ の2通り 検証時の 切り替えや、 インスタンス破棄のタイミングを コントロールしたかったので、 インプレースデプロイを選択 なぜインプレースデプロイを使うか?

Slide 14

Slide 14 text

© DMM.com リリース作業リスト 1.待機系 の起動 2. によるデプロイ 3. のインスタンス台数を増やす 4.検証用 に切り替え 5.本番用 に切り替え (リリース) 6.待機系 の縮退

Slide 15

Slide 15 text

© DMM.com 手動操作の問題点 ・操作の再現性がなくなりがち ・操作履歴を追いづらい ・ミスしやすい ・作業に時間がかかる ・作業状況が見えづらい

Slide 16

Slide 16 text

© DMM.com 導入後

Slide 17

Slide 17 text

© DMM.com デプロイ

Slide 18

Slide 18 text

© DMM.com リリース

Slide 19

Slide 19 text

© DMM.com 導入後の変化 1〜6の作業をすべて に変更 ・各作業は用意された コマンドを一度打つだけ ・操作履歴が で一覧できるようになった ・バリデーションを入れることでミスしづらくなった ・総作業時間1時間程度になった ・作業状況が で一覧できるようになった ・週1回リリース

Slide 20

Slide 20 text

© DMM.com コマンドの仕組み

Slide 21

Slide 21 text

© DMM.com VPC コマンドの裏側 production development AWS resources VPC AWS resources

Slide 22

Slide 22 text

© DMM.com コマンド引数で異なる環境に対し操作する

Slide 23

Slide 23 text

© DMM.com VPC 具体的な構成例 デプロイ VPC リリース

Slide 24

Slide 24 text

© DMM.com 工夫ポイント

Slide 25

Slide 25 text

© DMM.com ・デプロイ/リリース操作のバリデーション ・ コマンドのタイムアウト対策 ・デプロイの失敗通知 工夫ポイント

Slide 26

Slide 26 text

© DMM.com デプロイ/リリース操作のバリデーション 前段の で共通のバリデーション処理 ・許可した ユーザ名のみ ・許可した チャンネル名のみ ・実行するチャンネル名とコマンドの引数の比較  (実行コマンドの打ち間違いを防ぐ)

Slide 27

Slide 27 text

© DMM.com VPC production development AWS resources VPC AWS resources

Slide 28

Slide 28 text

© DMM.com ・許可した チャンネルでのみ実行可 チャンネル名によるバリデーション

Slide 29

Slide 29 text

© DMM.com ・実行するチャンネルとコマンドの環境の比較  (実行コマンドの打ち間違いを防ぐ) コマンド引数によるバリデーション

Slide 30

Slide 30 text

© DMM.com コマンドのタイムアウト対策 ・前段の は   コマンドの受付完了レスポンスを返す  ( 以内にレスポンスを返さないと   タイムアウトする)  https://api.slack.com/slash-commands#responding_basic_receipt ・後段の は   リソースの処理結果を返す

Slide 31

Slide 31 text

© DMM.com VPC を二段構えにして コマンドのタイムアウトを防ぐ コマンド実行 Slash Commands コマンドの実行結果 response_url コマンドの受付通知 callback

Slide 32

Slide 32 text

© DMM.com コマンドの受付通知

Slide 33

Slide 33 text

© DMM.com コマンドの実行結果

Slide 34

Slide 34 text

© DMM.com デプロイの失敗を検知できるようにする 問題点  アプリケーションの挙動がおかしいので調べてみるとデプ ロイに失敗していた。  デプロイに失敗しているのに誰も気づかない。

Slide 35

Slide 35 text

© DMM.com デプロイの失敗を検知できるようにする 解決策  デプロイの失敗を 通知する。

Slide 36

Slide 36 text

© DMM.com デプロイの失敗通知のようす

Slide 37

Slide 37 text

© DMM.com デプロイ失敗通知の仕組み

Slide 38

Slide 38 text

© DMM.com デプロイの失敗通知 イベントのトリガーを設定する

Slide 39

Slide 39 text

© DMM.com デプロイの失敗通知 トリガー先の と を連携させる

Slide 40

Slide 40 text

© DMM.com まとめ

Slide 41

Slide 41 text

© DMM.com VPC を活用して でリリースすることができた production development AWS resources VPC AWS resources

Slide 42

Slide 42 text

© DMM.com ・ミスしにくい  バリデーション機能をもたせる ・再現性が高い   からコマンドを打つだけ ・操作履歴がわかりやすい   で実行したコマンドが一覧できる リリース作業を 化したメリット

Slide 43

Slide 43 text

© DMM.com ・作業時間の短縮   コンソールを操作する必要がない ・作業状況がオープンに  誰がどの作業をしているかすぐにわかる リリース作業を 化したメリット

Slide 44

Slide 44 text

© DMM.com ・サーバ管理の必要がない ・ リソース間の連携が簡単   や   など ・構成をコード化して残せる   ・タイムアウトの工夫が必要   の応答時間、 コマンドの応答時間 を利用した サーバレス構成の特徴

Slide 45

Slide 45 text

© DMM.com ありがとうございました