Member-only story
DropboxをNginxからEnvoyにマイグレーションする方法(第四章)
11 min readJan 21, 2021
今回はDropboxをNginxからEnvoyにマイグレーションするやり方をご説明します。今回の記事は長いので6回に分けてお送ります。今回は4回目です。
Building and Testing
デフォルトでは、Nginxはカスタムシェルベースのコンフィギュレーションシステムとmakeベースのビルドシステムを使ってビルドされます。これはシンプルでエレガントですが、インクリメンタル、分散、密閉、再現性のあるビルドの利点をすべて利用できるようにするため、Bazelで構築されたmonorepoに統合するのにはかなりの労力がかかりました。
Google は Nginx、BoringSSL、PCRE、ZLIB、Brotli ライブラリ/モジュールで構成される Bazel で構築された Nginx 版をオープンソース化しました。
テスト面では、Nginx は Perl によるインテグレーションテストを別のリポジトリで行っており、ユニットテストはありません。
Lua を多用し、ビルドインのユニットテストフレームワークがないため、モックコンフィグとシンプルな Python ベースのテストドライバを使ったテストを行うことにしました。
class ProtocolCountersTest(NginxTestCase):@classmethoddef setUpClass(cls):super(ProtocolCountersTest, cls).setUpClass()cls.nginx_a = cls.add_nginx(nginx_CONFIG_PATH, endpoint=["in"], upstream=["out"],)cls.start_nginxes()@assert_delta(lambda d: d == 0, get_stat("request_protocol_http2"))@assert_delta(lambda d: d == 1, get_stat("request_protocol_http1"))def test_http(self):r = requests.get(self.nginx_a.endpoint["in"].url("/"))assert r.status_code == requests.codes.ok
その上で、生成された全てのコンフィグを前処理(例えば、全てのIPアドレスを127/8のものに置き換える、自己署名TLS認証への切り替えなど)し、その結果に対してnginx…