見出し画像

Techouseの開発を支えるマルチプロダクト型アーキテクチャ

はじめまして、Techouseで技術責任者をしている山崎と言います。
Techouseには2020年3月に入社し、以後一環してプロダクトの開発に携わってきました。面談でお話する機会もあるかと思いますので、以後お見知りおきくださいますと幸いです。
Techouseのプロダクト開発における技術的な内容を、Tech Blogとして今後定期的にご紹介していきたいと思っています。今回は初めての記事ということですので、大きなレベルでTechouseの技術についてご紹介していきたいと思います。

画像
山崎 良祐(技術責任者)
大阪府立大学 工学部経営工学科卒。10歳でプログラミングをはじめ、13歳でインターネットに触れる。大学卒業後は株式会社インターネットイニシアティブ(IIJ)、SMN株式会社にて複数のサービス開発に携わる。2020年、株式会社Techouseに入社し、技術責任者として開発部門を統括。

Techouseはマルチプロダクト型の企業です。各プロダクトごとに独立したシステムがあり、各プロダクトごとに開発チームが企画・開発・テスト・デプロイ・運用までを一気通貫して対応できる体制を目指しています。このような場合、理想的には、プロダクトごとに独立したインフラがあり、一つのプロダクトで何かの変更を実施しても他のプロダクトへトラブルが波及しないようにする構成が望ましいと言えます。また、ステージングやQA用の環境に対する変更が本番に影響を及ぼさない構成が望ましいと言えましょう。

わたしが入社した2020年当時では1つのAWSアカウントにすべてのプロダクトがテスト・本番の区別なく入っている状態でしたが、この当時からすでにマルチプロダクト型企業の状態でしたので、分離していくための背骨を構築しました。このとき導入したプロダクトは下記の3つです。

  • AWS Organization

  • AWS IAM Identity Center (旧: AWS Single Sign-on)

  • AWS Transit Gateway

まず AWS Organization を使って、プロダクトごと・環境ごとに独立した AWSアカウントを作成します。AWS アカウントは AWS の請求単位です。
みなさんが IAMやルートアカウントを利用してログインしたときに出てくる AWS Management Console の右上のボタンをクリックすると出てくる12桁の番号が AWSアカウントの番号となります。
この AWSアカウントの中にVPCを作り、Subnetを作成し、インスタンスを配置し……というふうにしてAWSを利用するわけです。

画像

AWSアカウントをまたいだ操作や構成変更はデフォルトではできません。
そのため AWSアカウントがプロダクト・環境単位での分割にもっとも適しています。しかしAWSアカウントごとにクレジットカード番号やログインユーザの情報を登録しなければいけませんが、そこを AWS Organizationが解消してくれるというわけです。請求が1つに集約され、認証もまとめられるので、簡単にAWSアカウントを作ったり消したりできます。

画像

Techouseではプロダクトの検証を頻繁に実施していますので、検証開始するたびにAWSアカウントを作成し、終了後にAWSアカウントの削除を実施しています。ゴミが残らずきれいさっぱり消えてくれるのはたいへん気持ちがよいものです。
つづいて AWS IAM Identity Center を利用して、OneLoginとOpenID Connect を利用した認証連携を導入します。Techouseでは OneLoginを全員利用必須のサービスとして導入しており、業務用のGoogle Workspacesや、Salesforce や、社内からしかアクセスできない管理画面の類などの認証をすべて OneLoginに寄せています。
まず OneLoginで認証をし、つづいてAWS Organizationの画面でログイン先のAWS アカウントを選択する、という流れでAWS Management Consoleが利用可能となります。

画像

この構成はAWSが提供しているリファレンスアーキテクチャに従っているだけですので、とくに苦労もなく導入できてしまいました。しかしあまりご存じの方は多くないようで、入社された方が目を丸くしているところを見るたびに導入してよかったと思いますw
そしてAWSアカウントを横断した通信のためにTransit Gatewayを導入します。

画像

Techouseでは Amazon Aurora PostgreSQLまたはAmazon Aurora MySQLを主力のRDBとして採用していますので、そこに対するオペレーションをSQL経由で実行するために踏み台が必要となります。また、ごくごく稀ではありますがAmazon Elasticache Redisに対する直接的なコマンド実行を実施するときにも踏み台は利用します。この踏み台から各AWSアカウント内のVPCに通信するため、Transit Gatewayを利用しているというわけです。
(余談ですが、この踏み台は、複数人で共用して利用する昔ながらの SSH踏み台として運用しています。すなわち1人1ユーザ(UID)を手動で発行しています。最近はUID・GIDや、ファイルパーミッションなどのUNIXの基本概念を体感的に理解できる機会がなく、そのあたりの機能を学習するのに若手が苦労していることが多いようで、敢えて昔風のUNIXのオペレーションを残すことにより直感的に学べる機会を作っているというわけです。)

これらの仕組みを利用して、Techouseではエンジニアとして入社した方に1人1つずつ学習用のAWSアカウントを払い出しています。月に100ドルまで自由に使え、請求まわりの処理は不要です。危険な操作をしようとしても他のAWSアカウントとは完全に分離されているためまったく安全であることが保証されている環境です。

自己研鑽意欲の高い方をTechouseでは募集しておりますので、興味がありましたらぜひご応募ください!
少しでもご興味あれば、複数ポジションでまだまだたくさんの仲間を募集しています。技術のお話だけでなく、具体的な制度や会社のカルチャーをカジュアル面談でご紹介させていただきます。


いいなと思ったら応援しよう!

ピックアップされています

Tech Blog

  • 9本

コメント

ログイン または 会員登録 するとコメントできます。
Techouseは、"We Develop."をスローガンに掲げ、時代ごとの課題を解決する事業を創造し続ける企業です。社会が変わるたび、新たな課題が現れるため、私たちは特定の事業ドメインを定めず、自らも変化し続けることで、時代ごとの課題を解決する事業を次々に創造します。
Techouseの開発を支えるマルチプロダクト型アーキテクチャ|株式会社Techouse
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1