DCR (Dark Canary Release) でリリースしてみた件

どーも皆さまお久しぶりです!Technology Department(開発部)でインフラ周りを担当している山口です!
最近コロナウィルスの影響で全社的にリモートワークになり早1ヶ月。引きこもっているせいか着実にお腹まわりが成長してきてしまいましたw
そんなことはさておき、今回は最近取り入れ始めたDCRというリリース方法についてご紹介したいと思います!

そもそもDCRとは。。。

DCRてなんぞや?というところからだと思います。
自分も初め聞いたときはん?ちょっと何言ってるかわからない状態でしたww
DCRとはDark Canary Release(ダークカナリアリリース)の略のことで、数あるリリース方法のうちの一つですが、こちらを語る前にまずはカナリアリリースをご説明します。

カナリアリリースとは一部のユーザーに対して限定的にリリースを行います。
新機能や改修内容に関するフィードバックを得て、さらにより良いものにしながら段階的に全体に展開していくようなリリース方法です。
また、問題が起きた場合でも、本番環境からその部分だけ切り離すことによって、現行のバージョンに戻すことができ、 影響範囲を極力抑えられるところが利点です。

一方、DCRはそのカナリアリリースよりさらに開発者のみに範囲を絞った形でのリリースのことを指します。 本番環境下での検証を行うことで品質が向上をし、本番に影響を与えず確実かつ安全にリリースを行える点が大きなメリットです。

DCRを導入した背景として

従来のリリースだと、

  1. ロードバランサーからリリース対象のサーバーを切り離す
  2. 外部からアクセスが来ない状態を作る
  3. デプロイ
  4. アプリケーションの動作確認
  5. ロードバランサーに戻す

という作業を複数台実施するという流れでリリースを行ってきました。
このケースだと、本番での動作確認やHTTPS通信における検証が難しいということがあり、 より高い品質を担保した形でのリリースができればと思っていました。 そういった想いでリリース方法を検討していたところDCRと出会いました。

DCR活用術

実際Technology Departmentではどのような形で活用しているかご紹介します。
サービスのインフラとしては基本的にAWSを採用しており、 その中でELBとEC2インスタンスを使用してDCRを実現しています。 それでは具体的な手順を見ていきましょう。

事前準備

1. DCR用のターゲットグループ作成

  • DCRで使用するためのターゲットグループを別途作成します。
    f:id:gucchon90:20200313091618p:plain
    DCR用のターゲットグループ作成

2. ELBのリスナーにルール追加

  • 本番用のELBのリスナーの条件として社内で使用しているIPを登録します。
  • 転送先として本番用のターゲットグループを登録しておきます。
  • この時点では社内からも外部からもアクセスした場合とで差異はなく同じインスタンスを見ていることになります。
  • これでDCRを行う準備ができましたので、続いては具体的な手順についてご説明します。
    f:id:gucchon90:20200313091724p:plain
    ELBのリスナーにルール追加

具体的な手順

1. 本番用ターゲットグループから削除

  • 本番用のターゲットグループからデプロイ対象のインスタンスを削除します。
  • この時点でデプロイ対象のインスタンスはどこからもアクセスできない状態になります。
    f:id:gucchon90:20200313091828p:plain
    本番用ターゲットグループから削除

2. DCR用ターゲットグループへ登録

  • DCR用ターゲットグループにデプロイ対象のインスタンスを登録します。
    f:id:gucchon90:20200313091917p:plain
    DCR用ターゲットグループへ登録

3. ELBのルール変更

  • 先ほど社内IPを追加した転送先のターゲットグループをDCR用のターゲットグループに変更します。
  • この時点でデプロイ対象のインスタンスは、社内からのみアクセス可能な状態となります。
    f:id:gucchon90:20200313091955p:plain
    ELBのルール変更

4. デプロイ

  • 社内からアクセス可能、それ以外はアクセス不可という状況が確認取れたらデプロイを行います。

5. アプリケーションの確認

  • デプロイが完了したらアプリ側の検証を行います。

6. ELBのルールを戻す

  • 検証が完了したら、ELBのルールを本番用のターゲットグループに戻します。
    f:id:gucchon90:20200313092038p:plain
    ELBのルールを戻す

7. DCR用ターゲットグループから削除

  • DCR用ターゲットグループからデプロイ対象のインスタンスを削除します。
    f:id:gucchon90:20200313092130p:plain
    DCR用ターゲットグループから削除

8. 本番用ターゲットグループへ登録

  • 本番用ターゲットグループにデプロイ対象のインスタンスを登録します。
  • この時点でデプロイ対象のインスタンスは、社内からも外部からもアクセスすることが可能となります。
  • この作業を複数台分繰り返す必要がありますが、一旦ここまできたらDCRは完了となります。お疲れ様でした。
    f:id:gucchon90:20200313092159p:plain
    本番用ターゲットグループへ登録

ちなみにDCRの完成図としては以下のようになります。
このような状態を作りデプロイ・検証を行い残りのサーバーに対しても繰り返してリリースをします。

f:id:gucchon90:20200310191230p:plain
DCR完成図

最後に

いかがだったでしょうか。これからもDCRによるリリースにより、高品質なサービスをどんどんリリースしていきます!
皆様もDCRでのリリースが可能なサービス、インフラ構成であれば、ぜひ検討しみてはいかがでしょうか?
さらにユーザーやエンジニアに優しい技術、手段を探求しながら日々奮闘して参ります!!

また、バレットグループでは、ご一緒に働いていただける仲間を募集しております。 bltinc.co.jp