概要
今年ももうすぐ終わりですね。
「今年の反省は今年のうちに」ということで、今回は年末に本番でやらかしたお話を投稿したいと思います。
遡ること2日前、私は現在エンジニアをしているインターンで、ファイルをアップロードするシステムのバグ修正を行っていました。
コーディングはすんなりとすすみ、無事デプロイも終了。本番でちゃんとアップロードできるかの軽いテストを行い、その日は退社しました。
翌日、出勤するやいなや、上司に呼び出されました。
上司 「〇〇くん, ファイルアップロードのシステムさわった?なんか変なファイルが上がってるんだけど...」
私 「変なファイル...ですか ?」
指定されたurlを確認してみると, なんとそこには友人が熱唱している**私アイドル宣言の音源がアップロードされていました。**
(ちなめっちゃいい曲です 聞いてみてください)
幸いにもファイルは非公開設定になっており、アップロードも自社のテスト用アカウントで行ったものだったので、「俺くんはキモオタ」という噂が会社中に流れるだけですみました。 いや普通に死にたい。
が、もしもそのファイルが公開設定で、ユーザーの目に触れてしまっていたら...考えるだけでゾッとします。
(余談)なんの実装をしようとしていたのか
背景として、なんの実装をしようとしていたのかについて軽くふれておきます。(なぜ本番環境でテストをするはめになったのかという話に若干繋がりますが、読み飛ばしてもらっても全く問題ありません。)
ことは「なぜか本番だけサイズの大きいファイルのアップロードができない」という問題から始まりました。
そもそも弊社では従来以下の図のように「ファイルそのものをAPIに渡し、s3にアップロードする」という仕組みをとっており、本番では前段にAPI Gatewayを設置していました。調査の結果、API Gatewayの仕様上、10MB以上のファイルのリクエストははじかれていることが発覚しました。
そこで回避策として、APIからはアップロード用のpresigned-urlを発行 => ファイルはフロントから直接アップロードという構成を取ることにしたわけです。
より詳細な説明が欲しい方はこの記事などが参考になると思います。
ちなみに、ステージング環境では前段のAPI Gatewayを省略していたため同じ状況は起こっていませんでした。(それが原因の一端を担うことになったのですが...)
一体何が原因だったか
一体なぜこのようなミスが起きてしまったのでしょうか?
私が無能だったからと一括りにしてしまうのは簡単ですが、同じミスを繰り返さないためにきちんと分析してみようと思います。
開発時もよくわからないファイルをあげていた
件のファイルですが、Finderで動画を検索した時にトップに出てきていました。
中身は知っていたものの、開発中は**「どうせ開発環境だから」**という意識で、何も考えずに同ファイルでアップロードのテストをしていました。結果本番でのテストアップロードの際も同じファイルを無意識であげてしまう事態につながりました。
適当なファイルをあげる、適当な名前をつける(タイトルにう●ことつける)など、本番環境でやってはいけないことは開発中もやらないようにしようという教訓を得ました。
本番という意識があまかった
そもそも開発中のサービスは正式リリース前で、利用客もほとんどおらず、本番に多少変なデータやバグのあるプログラムがあがってしまってもほとんど被害が出ない状況でした。ここから「本番だけどある程度適当でいいや」という甘えが生じ、結果今回の自体に繋がりました。(おかげで失敗に対して被害はほとんど出なかったわけですが...)
しかしながら、このような意識のままでは正式リリース後も同じようなミスをし、取り返しのつかない失敗をしていたかもしれません。
たとえリリース前でも本番環境であるという意識はきちんともとうという教訓を得ました。
ステージングがうまく機能していなかった
弊社でもいわゆる「ステージング環境」は存在していたものの、あくまで「本番と同様のデータで齟齬がでないかをチェックする」ための環境であり、本番の構成とはかなりの差がありました。(今回で言えばAPIの前段にAPI Gatewayを設置していないなど)
そもそも、本番とステージングで同等の構成をとっていれば、本番でテストをしなければならないような状況になることもなかったでしょう。
ステージングは本番の写絵として、本番と全く同じ構成で作るべしという教訓を得ました。
来年気をつけること
以上を受けて、今後開発をする際には以下のことに気をつけてやろうと思います。
- 本番でやらないことは開発でもやらない。
- 本番環境であるという意識をきちんともつ。
- ステージングを機能させる(本番環境と同等の構成でつくる)
来年はこんなしょぼいミスをしないよう、日々精進していきます。