インフラ未経験エンジニアが構築したGCPがたった数ヶ月でAWSに移行された話

こんにちは、株式会社カミナシのエンジニア @imu です。

はじめに

2021年11月に以下の開発者ブログを公開しました。

kaminashi-developer.hatenablog.jp

α版として構築したインフラですが、2022年1月にインフラ移行の話が突如検討されました。 なぜ最終的にAWSへ移行になったのかと私が何を感じたのかをお話します!

補足
  • 完全移行したのはAPIサーバーです。クライアントアプリはCloudBuild + Firebase Hostingの環境が残った状態です。
  • 移行後のAWS構成図はここでは共有していません。また別の機会に。
  • GCPを否定する記事ではありません。

本記事で様々なコメントを頂いておりますが、追加で補足をさせてください。

記事内の「私がGCPを選択した理由」で、私個人が勝手な意思決定をしてGCPを選択したように受け止められてしまう書き方でした。

インフラを構築した当時はMySQL 8.x系が利用できるのがGCPで、社内の分析はBigQueryを利用していたため、予めGCP側に寄せておくほうが後々メリットがあるのでは?とチーム内で検討していました。

また、α版からβ版へフェーズが変わる際にはインフラ環境を見直す話も事前にありました。

その上で私がインフラ構築をお願いされたとき、GCPに詳しいメンバーもいない中、新しいことにチャレンジしたいという気持ちを後押ししてくれて構築しています!

私個人としては、GCPにチャレンジ出来たことはポジティブにとらえています!

移行の話は突然に

新年早々「新規プロダクトのインフラについてGCPAWSにすべきか、利用ユーザーが少ない2022年2月までに決めておきたいという話」がslackで流れた。GCP環境を徐々に整備していた私は「???」状態になった。事前に何も聞いてないし、何が起きているかさっぱりだった。

通知されてから数日後、MTGが開催され議論されたことは以下の通りです。

  • GCPを使うメリット、デメリットの洗い出し
    • GCPのインフラエンジニアを採用できるのか
    • 数年先を見据えたときに、GCPに投資する価値があるか
  • 将来プロダクト間で共有の情報を扱う可能性がある
    • マルチクラウドにした場合のGCP <-> AWS間のデータの持ち方や参照方法など
  • GCP, AWSのナレッジ共有

上記のことを踏まえて、最終的にざっくり以下の内容になりました。

MySQLのバージョンも今現在では差がなくなり、社内のナレッジや採用を考えるとAWSに移行待ったなしとなりました。

余談)私が当時GCPを選択した理由
  • MySQL 8.xを使いたい
    • RDB再帰的な構造になることが既に分かっているので、8系の関数が利用したかった
    • Aurora MySQL 8系がサポートされメリットなくなってしまった…(ここが辛い)
  • インフラ環境を一から作る機会は滅多にないので、既にIaC化されたAWSはモチベーションが個人的に上がらない
  • カミナシレポートの分析はBigQueryを利用していたので、Auroraからの移行の手間を減らしたい
  • やるからには新しいことをしたい!(←コレが一番大事だけど、メンバーからもチャレンジを認めてくれました

見てわかる通り、ほとんど私のモチベーションで決めたインフラです。なので、GCPで絶対にやっていきたい!とは強く言えないし、社内のリソースを鑑みると無理だったので、AWSに移行は必然だったと思いました。更に、GCPを今採用するのは早すぎるという意見もあったので…。 (なので、正直インフラに対してのモチベーションはガクッと落ちましたね…。もちろん正論だし納得しました。)

AWS移行計画

下記画像の通り、APIサーバー部分をAWSへ移行する計画を立てました。

まずはGCPAWS間のサービスマッピングを作成して、どの機能がどれに当たるのかを整理しました。移行期間が限られていたので、後戻りが難しいものを優先的に作成していくことになりました。

既にカミナシレポートはAWSをほぼIaC化しているため、必要なサービスを選択しながら構築するだけになりました。

私は実際に手を動かす機会はほとんどなく、AWSを熟知しているメンバーが移行する際のDesign Docがまとめられており、非常に分かりやすくて私は勉強させてもらいました!

移行期間は短く、2週間で対応しなければなりませんでしたが、ほぼオンスケジュールでDevelop環境も無事に移行され、あとは本番環境の移行のみとなりました。

移行当日

2022年2月上旬。

IaC化されているのでTerraform Cloudを使って、AWS環境が構築されるのを待つだけです! (環境だけではなくOrganizationも変更していたので、少し躓いたけど問題なく移行完了)

私が対応したことは

  • GCPからMySQLのデータをDumpをする
  • AWSのAurora MySQLにデータをImportをする
  • GCPで使わなくなった環境の停止や削除をする

です。短い期間だったけど、α版の運用が出来て良かったなと思います!

所感

  • GCPの経験が少しでも出来たことは私にとってスキルアップになった
  • 結果論にはなりますが、AWSになるなら最初から議論すべきだった
    • 私のモチベーションでGCPを選択したが、先を見据えてやっても良かったかなと思いました
    • モチベーションを高く持つ要素を見つければ良かったかも知れない
  • AWSも慣れていかないとな…

おわりに

まさかGCPの環境が数ヶ月で終わりを迎えるだなんて思ってもいませんでした。正直GCPでやってみたいなと思いましたが、議論した内容でGCPを絶対にやるべき!とまでは思えませんでしたね。

ですが、組織が拡大していくなかでGCPを採用できる機会があればやってきたいと思いました!GCPの経験は私自身の財産になったかなと思うので、コレはコレで良しとしておきましょう。

と、カミナシって面白いことやってるエンジニアがいるんだなと興味をもっていただければ良いです笑

実際に事業やどんなエンジニアが働いているのか等、気になることがありましたら、カジュアルにお話できればなと思いますので、TwitterのDMや下記の採用情報サイトからご連絡お待ちしております!

最後まで読んでいただき、ありがとうございました!

careers.kaminashi.jp