スタートアップの開発の失敗を赤裸々に語るライトニングトークに8社のCTOやエンジニア、プロダクトマネージャーが登壇。本記事では、株式会社Handii CTOの森雄祐氏による「ステージング環境でばっちり検証したけど、本番で沼った話」と題したトークの内容をお伝えします。
※本記事はCoral Capital出資先約80社からなるスタートアップコミュニティー「Coral Family」のうち、CTO・エンジニアが定期的に集まるCoral Developers。その中から生まれたイベント「スタートアップ開発しくじり先生LT」の発表を記事化したものです。
自己紹介をします。HandiiでCTOをやっています普段はRustでサーバーサイドのコードを書いていることが多いです。前職ではC++やC#を書いていました。フロントエンドがTypeScriptとReactで作られているので、それらもちょっと書きます。
HandiiはいわゆるFintechスタートアップです。法人クレカ決済で「クレカ審査が通らない」などのペイン(苦痛)を抱えている会社向けに法人向けプリペイドカードを発行しています。ポチポチすればカードを何枚でも作れて、営業さんなどに配れば経費精算をしないで済むようになります。
外部連携でトラブル発生
今回のプロジェクトの概要です。私たちのサービスの情報を外部のサービスから参照してもらい、サービス連携を開発することになりました。当社は参照系APIをいくつか新規に開発し、ステージング環境を先方に開放、それを元に先方の会社は開発を進める形です。
ステージング環境は、ロードバランサーがあって、うちはAWSを使っているのでALB(Application Load Balancer)なのですが、その下にコンテナがぶら下がっている構成です。図の左上にあるのが普通のクライアントです。ステージング環境の画面をテスターや開発者が検証に使ったりしています。左下のサーバーは連携先です。
さて、開発が進んで本番デプロイになりました。しばらくすると、先方からメールが来ました。メールには「Service Not Foundと出て接続できません、ご確認よろしくおねがいします」と書いてありました。
「なんで?」とよくよく考えたら、ステージング環境ではサードパーティ向けのURLドメインと、ユーザー向けのドメインを一緒にしてたのですが、本来は別ドメインが設定されていて、本番環境はそのようになっていたんですよね。そのため、ドメインで動くように設定を入れないといけなかったんですが、そのままではロードバランサーで想定したルーティングがされなくなってしまいます。どうするか、社内でも相当の混乱がありました。
結果としていい感じに設定が完了しました。ロードバランサーに本来設定されているべきドメインとの紐付けを設定し、アクセスされたドメインに合わせて適切なルーディングがされるよう構成を修正しました。
ところが「またエラーが出た」とメールが来ます。今度はHTTPSの証明書不正でした。ドメインが変わったので、今までのロードバランサーの証明書だとダメです。そうかそうか、言われてみればそうだということで、ドメインに合わせて証明書を付けました。
しかし、なぜかエラーのログが流れてきます。今度は何なのか。認証系はJSON Webトークン(JWT)でやっているのですが、そこで”Invalid Issuer”というエラーが出ていました。JWTのIssuer(発行元)が、ドメイン変更により検証するべき値とずれてしまっていました。そこで新しいドメインに合わせて検証するようにしました。今度は本番環境で動きました。
教訓:「準本番」と本番環境の違いは大きい
なぜしくじったのか。普段はサーバーサイドのコードを書いていることが多いので、インフラ関連の知見が深くないということもありました。ステージング環境は準本番なので、本番とは違います。慌ただしさの中で気の緩みもありました。
ここで一句。「本番で 疎通するまで 気を抜くな」。この句で締めさせていただきたいと思います。
(執筆:星 暁雄)
【スタートアップ開発しくじり先生のトークまとめ、全記事一覧】
- 本番環境にホットフィックスをリリースして破壊した話(justInCase Technologies)
- 売れる!と確信して出した機能の利用社数が1社で膝から崩れ落ちた話(カミナシ)
- フロントエンドをゼロから作り上げ、しくじってきた青春の思い出(ファンファーレ)
- 組織で向き合う、しくじりと開発体制の歴史(hokan)
- WordPressが技術負債になった話(クレジットエンジン)
- ステージング環境でばっちり検証したけど、本番で沼った話(クレジットエンジン) ※本記事
- 通知機能をマイクロサービス化していたらユーザ一斉通知でしくじった話(Seibii)
- 守りからはじめるカスタマーサクセス(空)
Editorial Team / 編集部