メタップスの開発環境を公開します!re:shine編(2020年11月版)

f:id:meetaps:20201111113945p:plain

こんにちは!メタップス人事の香東です。

メタップスでは全社員の約3割を占めるエンジニアによって数多くのプロダクトが生まれ、運用されています。
その技術はプロダクトごとに大きく異なり、多岐に渡っています。

そこで、メタップスのエンジニアがどのような技術を利用して開発を行っているのかについてmeetapsでまとめていくことにしました!今回はその第一弾として、メタップスのプロダクトである「re:shine」の開発状況を紹介します。

 

下にある画像の表がre:shineが利用している開発技術の一覧となっております。
※主に利用しているものをピックアップしているため、全ての利用技術ではありません。

f:id:meetaps:20201111113831p:plain

インフラ

AWS
インフラをAWSで構築しています。AWSはUIコンソール上での各種リソースの作成もできますが、re:shineではTerraformにてコードの管理を行っています。(Infrastructure as Code)

Terraform
Terraformでコード化することにより、GitHub上でインフラの状況を管理することができます。そうすることでインフラの構成状況の把握、変更履歴の管理、変更時のレビューをgitのフローに乗せて行うことができます。

Docker
re:shineではサーバーリソースの最適化や、開発段階から本番運用まで一貫した環境の統一化を図ることができるDocker技術に早期から着目し、運用をはじめました。Dockerを利用することで、WEBアプリケーションの開発で多く見られるインフラレイヤーとアプリケーションレイヤー管理の分離による不具合の発生を防ぐことができます。そのDockerを軸に、インフラのコード管理を始め、AWSのマネージドサービスを多く取り入れる事で、多くの技術を使いながらもインフラにかける管理コストの圧縮、最適化を実現できております。

メタップスでは、こういったre:shineサービスで取り入れた技術を、他に展開することができ、SRE活動の軸ともなっていて、メタップスの技術を支える存在になっています。

AWS ECS
AWS環境のアプリケーション運用にはECSを利用しています。メタップスではECSのローンチ後、すぐに導入を進め、いち早くコンテナのワークロードを実現しました。現在はre:shineチームのSREがメタップスグループ各社のインフラを横断的に見ているため、新規サービスの殆どはECSをベースとしたアプリケーション構成で運用しています。また、ECSリリース当初はデプロイフローも確立されていなかったため、自社でデプロイツール「genova」(https://github.com/metaps/genova)を開発し、CLIからのデプロイを始め、Slack BotやGitHubのコミットをトリガーとした自動デプロイを可能にしています。

アプリケーション

Ruby on Rails
WEBアプリケーションの構築にRuby on Railsを採用しています。コードを簡潔に書くことができ、慣れると短い時間でWEBアプリケーションを構築することができます。rubyの経験者が多いre:shineチームでは標準言語として導入しています。

Vue.js
フロント開発ではVueを利用しています。学習コストが低く、日本では開発者も年々増えている為、採用しました。現在は、Vue3への移行準備中です。

ログ・監視

Flunetd
アプリケーションはコンテナベースで運用しているため、各種ログはバックエンドに配置されたFlunetdで集約しています。Fluentd自体はECS Fargateで運用しており、急激なトラフィック増加に対しても柔軟なスケールアウトが可能となる設計になっています。管理するログとしては、アプリケーションログのほか、AWSの各サービスが生成するイベントログも対象としています。Fluentdはログを受信後にフォーマットを整形し、特定パターンに一致する文字列があればSlackへ通知を行うほか、S3やElasticsearch Serviceといったストレージにログを配送します。

Datadog
インフラの監視基盤としてはDatadogを採用しています。Datadogの利点として、Terraformでルールを管理できることやプロセス監視やAPM、インシデントレポート管理といったインフラを運用する上で必要な機能が一通り提供されていることにあります。

セキュリティ

インフラのセキュリティ対策として、ファイアウォールにAWS WAF、脆弱性スキャンにVuls、脅威分析にGuardDuty、ガバナンスとしてCloudTrail、Config、SecurityHubなどを利用しています。各種ログはLambdaを介して分析を行い、重要度の高いアラートはSlackに通知する仕組みとなります。アプリケーションの対策としては、Dockerベースの環境構成となるため、CIにTrivyを組み込み、異常があればこちらもSlackに通知する流れとしています。最近ではSREチームでセキュリティ定例の運用を発足しました。定例では直近報告されたセキュリティの脅威について、各プロダクトへの影響調査・IPS/IDS運用の定期的な見直し・セキュリティ運用の自動化といった課題に対する話し合いを設けています。

その他ツール

Git
基本的にGitflowに則った開発フローです。実装→ユニットテスト作成しローカルでの確認後GitへPush→CircleCI上でのコーディングスタイルチェック、コード静的解析チェック、ビルドチェック、ユニットテスト実行をしています。re:shineサービスサイトではフロントエンドをSPA、バックエンドをAPIという構成をとっています。


 

re:shine、メタップスエンジニアの利用技術や開発環境の一部をざっくりと紹介させていただきました。また、メタップスでは新しい技術やツールの導入を積極的に検討しているため、上記の情報も現時点のものになります。記載できていないものや最新情報については直接お話しさせていただく機会をご用意します。カジュアル面談も実施しますので、詳細が気になる、興味がある、という方はぜひお問い合わせください!

また、re:shineでは「フリーランス型正社員」という新しい働き方も提供しております。こちらもご検討ください!

re:shineだけでなく、他のプロダクトに関しても随時公開していきます。乞うご期待🌸