freeeの開発情報ポータルサイト

インフラ爆速構築記〜freeeの場合〜

こんにちは。この記事は freee基盤チームアドベントカレンダー の4日目になります。

認証認可基盤チームのアプリケーションエンジニアを担当している てらら です。
社内の人にはエンジニアではなく、freee Tech Nightの司会の人、またはSlackで良く見かける人といった方が伝わりやすいかもしれません。

1位. てらら. 2874 2位. 2217 3位. 1881 4位. 1448 5位. 1353 6位. 1347 7位. 1302 8位. 1227 9位. 1209 10位. 1203 11位. 1168
社内Slackの直近1ヶ月Public Channelで投稿したメッセージ数ランキングで1位を取ったてらら

今回はアプリケーションエンジニアな私がfreeeで初めてインフラ構築に携わった時の体験談を書いていこうと思います。

マジ価値サマリー(このお知らせでお伝えしたいこと)

freeeのインフラ構築は3人日あれば作れるよ

背景

freeeではこれまで通例として、インフラ領域をSREチームに委ねてアプリケーションエンジニアはアプリケーション領域に専念する分担となっていました。
昨年の取り組みでSREをEnablingするチームが産まれ、そこから徐々にインフラ領域のタスクが移管されてきました。
developers.freee.co.jp

そしてついに私も新しいマイクロサービスを手がけることになり、インフラ構築を行うこととなりました。

てららの技術スタック

  • AWSは7年前にAPI Gateway パターンの流行りに乗っかって触ってそれっきり
  • Azureはまぁまぁ触ってた。Azure DevOps + App Serviceは楽ちんで助かる
  • k8s何もわからん。EKS何もわからん
  • 推し活歴は3年半くらい👯‍♀️

今回のゴール

私が担当するマイクロサービスはfreeeのシステム内通信しかない末端のマイクロサービスです。
実は今回利用したインフラ構築ツールはwebサービス前提で出来ているので一部手順を噛み砕きながら進めています(なのに爆速)

VPCの中に外部サービスからの通信があり、S3、ALBを経てEKS clusterに接続する。cluster内ではenvoyとアプリケーションpodがそれぞれ3AZに分かれて配置されている。アプリケーションはGitHubからArgoCDを経て作られている。VPCの外側にIAMとECRのサービスが記載されている。
構築するサービスの外観

インフラが出来上がるまでのざっくりした流れやボリューム感

なお今回は2名体制です。

no 開始日 概要 備考
1 7/21(金) ペア作業で インフラ構築の流れドキュメントを読み合わせながらタスクを切り出した これインフラ作業
2 7/21(金) ペア作業で アプリケーション用のリポジトリ作った
3 7/21(金) ペア作業で インフラ構成図 / トラフィックパターンを書いてみた これインフラ作業
4 7/24(月) ソロ作業で アプリケーションのfirst commit
5 7/24(月) ソロ作業: インフラ構築ツールを使いながらインフラ構築 これインフラ作業。今回の話
6 7/26(水) ソロ作業で アプリケーションのディレクトリ構成検討
7 7/27(木) ソロ作業で アプリケーションのCI/CD構築
8 8/1(火) インフラ疎通完了なう これインフラ作業

今回の内容は5の「インフラ構築ツールを使いながらインフラ構築」をお話しします。

インフラ構築ツールの流れ

ざっくりした流れは以下の通りです。

順序 作業内容 想定される必要時間
1 インフラ構築ツール の GitHub repo を clone する 30 分〜1 時間程度
2 インフラ構築ツール の設定ファイルを準備する 約 5 時間
3 インフラ構築ツール で Terraform リソース定義を生成する 30 分〜1 時間程度
4 AWS role の mapping を記述する 約 1〜2 時間
5 インフラ構築ツール で AWS のサービス側リソース定義を準備する 30 分〜1 時間程度
6 インフラ構築ツール で AWS のクラスタ側リソース定義を準備する 約 2〜3 時間
7 AWS サービス側リソース定義をシンプルにする 約 2 時間
8 インフラ構築ツール で クラスタ内のリソース定義を準備する 約 5 時間
9 新規サービスにトラフィックを流す設定を投入する 約 1〜2 時間
10 必要に応じて、他プロダクト・サービスとの通信を許可する 約 2〜3 時間
11 RDS の接続ユーザの準備 約 2 時間

インフラ構築の際に使用するアプリケーションはSREチームで用意してくれているサンプルRailsアプリケーションです。最早アプリケーションすら不要。

構築の詳細

詳細に関してはインフラ構築ツールの中身に触れなければなりませんが、yamlに数行の設定ファイルを記入し、コマンドを打つだけで今回のゴールで示したAWSリソース定義が出来上がるイメージです。
(インフラ構築ツールの中身はきっとSREチームの誰かが発表してくれるはず!)

結果から言うとほとんどが何も考えずにただインフラ構築ツールの通り進めていき、チェックポイントに沿ってSREにレビューをお願いしながら進めていくことで安心しながら進めることができました。

必要に応じて、他プロダクト・サービスとの通信を許可する

この部分に関してのみ、関連サービスのsecurity groupを理解しながら実装する必要がありますが、ここまでの流れの中で体系的に学んでいった知識を使えば実装できる内容なので達成感を味わうことができます。
作業者のスキルに依存せず、心理的負担もなく進めることができ、さらには構築が終わった後はfreeeのインフラ構築を完全に理解することができます。

うおおお!繋がった!!!!大感謝!!!!!
てららが歓喜の雄叫びをあげている様子

まとめ

  • インフラ構成を全く理解しておらず、IaCの実装方法も不安でしたが、Pull Requestを出しながら設定値の整合性を確認していくとかなり効率的にキャッチアップ出来ました。今ではインフラの構成変更でPull Request出せる自信あります。一石二鳥!
  • インフラ構成ツールにPull Requestを出せたので充実度が半端ないです
  • 実は当時SREチームは複数案件を同時に新規構築フォローしていましたが、こちらからの質問や作業依頼等を爆速で反応していただき、かつめちゃくちゃ優しくて感動しました。

freeeのSREは最高です!

おわりに

いかがでしたでしょうか。 freeeの開発文化の1つに「世話を焼いていくスタイル」というものがあります。チーム内外を問わず周囲を自分の知見で助けられているか、疾風迅雷の如く反応しているか、といった内容ですがまさにそれが体現されている経験だったと感じています。 他のチームも同じように試行錯誤しながらいかに素早くアウトカムを出せるか、に注力しておりとても楽しい毎日を送っています。

さて、明日5日目は、せんとくん(sentokun) による freee 権限管理基盤を開発するチームのこれまでを語ろう! 後編です。
前編ではチームの課題を整理し目指すチームの状態を定義していましたが、一体どのような改善を行なっていったか楽しみですね!