Upgrade to Pro — share decks privately, control downloads, hide ads and more …

メルコインのインフラ設計・構築と、信頼性のあるサービスをリリースするためのSREの取り組み /...

mercari
October 14, 2023

メルコインのインフラ設計・構築と、信頼性のあるサービスをリリースするためのSREの取り組み / SRE Initiatives to Design and Construct Mercoin’s Infrastructure and Release Reliable Services

メルコインのサービスローンチに伴って、SREがメルコインのインフラをどのように設計し、限られた時間の中で構築を行い、さらに数十あるマイクロサービスをバックエンドエンジニアと協力してProduction Readyな状態にし安全にローンチしたかをお話します。

In tandem with the service launch of Mercoin, SRE designed the infrastructure for Mercoin, building it in a limited amount of time and also managing to work with backend engineers to create dozens of microservices and get the service production-ready for what was ultimately a safe launch.

------
Merpay & Mercoin Tech Fest 2023は3日間のオンライン技術カンファレンスです。
IT企業で働くソフトウェアエンジニアおよびメルペイ・メルコインの技術スタックに興味がある方々を対象に2023年8月22日(火)、23日(水)、24日(木)の3日間、開催します。 Merpay & Mercoin Tech Fest は事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知ることができるお祭りです。

今年のテーマは「Unleash Fintech」。 メルペイ・メルコインのこれまでの技術的な取り組みはもちろん、メルカリグループのFintech事業における新たな挑戦をお伝えします。 セッションでは事業を支える組織・技術・課題などへの試行錯誤やアプローチなど多面的にご紹介予定です。

メルペイ・メルコインが今後どのようにUnleash(解放)していくのか、ぜひ見に来てください。

■イベント関連情報
- 公式ウェブサイト:https://events.merpay.com/techfest-2023/
- 申し込みページ:https://mercari.connpass.com/event/286670/
- Twitterハッシュタグ: #MerpayMercoinTechFest
■リンク集
- メルカリ・メルペイイベント一覧:https://mercari.connpass.com/
- メルカリキャリアサイト:https://careers.mercari.com/
- メルカリエンジニアリングブログ:https://engineering.mercari.com/blog/
- メルカリエンジニア向けTwitterアカウント:https://twitter.com/mercaridevjp
- 株式会社メルペイ:https://jp.merpay.com/

mercari

October 14, 2023
Tweet

More Decks by mercari

Other Decks in Technology

Transcript

  1. Masaki Iino 2019年5月にメルチャリに参画し、インフラとバック エンドを担当。2020年2月からメルペイSREチーム に参加。2021年からメルコインSREのテックリードと してメルコイン事業の立ち上げを担当。 株式会社メルコイン Site Reliability Engineering

    Takaaki Yuhara 2019年6月にメルペイのSREとして入社。2021年か らはメルコインのSREチームでネットワークやインフ ラ周りを中心に事業の立ち上げを担当。 株式会社メルコイン Site Reliability Engineering
  2. Secure by default 間 違った危 険な設 定が 出 来 ないようにセキュリ

    ティ設定を追加していく Addon 始めから使える設定を最 小限にし、必要に応じて 限定的に例外を許可す る Default
  3. Secure by default GCP Organization Security Policyで制約を強制 セキュリティチームと協力して全てのOrganization security policyを一つづつ

    検討 GCP Organizationレベルでポリシーを強制 下記資料で推奨されている設定を参考にポリシーを強化 • Google Cloud security foundations guide • CIS Benchmark: Google Cloud Computing Platform
  4. Secure by default 採用しているポリシーの例 • compute.requireOsLogin ◦ SSH keyをMetadataに埋め込んで使うことを防止 •

    compute.requireShieldedVm ◦ ブートローダーやOSの改ざんを防止 • iam.automaticIamGrantsForDefaultServiceAccounts ◦ GCEのデフォルトサービスアカウントへの Editor権限の付与を防止 • storage.publicAccessPrevention ◦ GCSのパブリック公開を制限
  5. メルカリグループのSRE Infrastructure Platform team Mercari SRE Merpay SRE Mercoin SRE

    Merpay Mercari Mecoin PlatformとSREチーム • カンパニーごとにSREがいる ◦ Mercari SRE ◦ Merpay SRE ◦ Mercoin SRE • インフラ基盤の開発運用を担当する Platformチームがいる
  6. メルペイのインフラ管理 Merpay microservice team Infrastructure Platform team component A B

    C Platform team Service A team Service B team Owner Manage Support Merpay SRE Merpay common • SREチームは開発チームのサポートと共通機能の開発運用を担当 • Platformチームはインフラ基盤の開発運用とインフラ全体のオーナー D E
  7. メルコインのインフラ管理 Mercoin microservice team Infrastructure Platform team component A B

    C Platform team Service A team Service B team Owner Support Mercoin SRE • SREチームは開発チームのサポート、共通機能の開発運用、 インフラ全体のオーナー • Platformチームはインフラ基盤の開発運用 Manage Mercoin common D E
  8. リソースとデータの配置 バックアップを 含 むアプ リケーションの 全 てのリ ソースとデータを国内で 管理 Tokyo/Osaka

    CloudDNSなどGCPが グローバルで 提 供 して いるサービスはリージョ ンレス Global
  9. GKE Project メルコインのアーキテクチャ Kubernetes Cluster Gateway API Service Auth token

    Service A Service B Service C Project A Project B Project C Cloud Load Balancing Cloud Spanner Cloud Spanner Cloud Spanner Pub/Sub Pub/Sub 共通のGKEクラスター 01 個別のProject 02 レイヤーアーキテクチャ 03
  10. VPCの構成 Shared VPC Host Project Service Project B subnetworks Service

    Project A GKE GKE VPC Firewall Cloud NAT Cloud DNS Service Project C Memorystore Service Project D GCE Shared VPC Shared VPC構成 01 Default Deny Firewall 02
  11. Private Service Connect(PSC) Mercoin Organization Mercari Organization Project VPC Kubernetes

    Cluster ILB Service Attachment Project VPC Kubernetes Cluster PSC Endpoint Service A Service B Gateway メルコインとメルカリ間連携で Private Service Connect接続 対象のServiceと接続元のProjectを絞って限定公開。VPC Peeringなどは不要。 Service X
  12. メルコインのGKE Cluster • Private Cluster ◦ 外部IPアドレスを持たないノード構成 ◦ ノードや同じVPC内のホストはPrivate Endpoint経由でControl

    Planeと通信 ◦ インターネット上のホストは Public Endpoint経由でControl Planeと通信 Authorized networkによって指定したIPアドレスからのみの接続を許可 ◦ ワークロードから外部向けの通信は Cloud NATを経由 GKE Private Cluster Control Plane Node A Node Z Internet Cloud NAT Authorized network Public Endpoint Private Endpoint Kubernetes API Server Kubectl client
  13. メルコインのGKE Cluster • その他の機能(一例) ◦ Network Policy ▪ deny by

    default policyを強制 ◦ Cloud DNS for GKE (VPC scope) ◦ Google Group for RBAC ◦ Workload Identity ◦ Istio ▪ GKEのadd-onは使わず、指定したバージョンを使うために個別にセットアップ ▪ Canary releaseの時のTraffic Managementや, マイクロサービス間の mTLS などで活 用
  14. メルコインのmicroservices Mercoin GKE Cluster Namespace A Namespace B Namespace C

    Microservice A Microservice B Microservice C Service A Team Service B Team Service C Team Project A Project B Project C Cloud Spanner Pub/Sub Cloud Spanner Memorystore GCE Cloud Spanner
  15. メルコインのmicroservices Mercoin GKE Cluster Namespace A Namespace B Namespace C

    Microservice A Microservice B Microservice C Service A Team Service B Team Service C Team Project A Project B Project C Cloud Spanner Pub/Sub Cloud Spanner Memorystore GCE Cloud Spanner
  16. メルコインのmicroservices Mercoin GKE Cluster Namespace A Namespace B Namespace C

    Microservice A Microservice B Microservice C Service A Team Service B Team Service C Team Project A Project B Project C Cloud Spanner Pub/Sub Cloud Spanner Memorystore GCE Cloud Spanner Kubernetes resources Namespace Deployment Service ServiceAccount RoleBinding NetworkPolicy Istio VirtualService BackendConfig FrontendConfig Ingress … Cloud Resources Spanner Pub/Sub Secret Manager Service Account Project IAM Spanner IAM PubSub IAM Secret Manager IAM Workload Identity …
  17. IaCと抽象化 • インフラをTerraformやYAMLなどで記述する一方で、専門的な知識や実装も不可欠 • チームの開発を促進しメルコインで定めた設定をプロビジョニングできるように、 SREが抽象化 したモジュールを提供 • これらを使うことで開発者は、全ての設定を 1つ1つ行う必要なく、標準化されたものをプロビ

    ジョニングできる • GCP resources, PagerDuty, GitHub, Datadogや一部のKubernetes resourceなどの設定を Terraformで定義 • Kubernetes の workload に関わるresourcesはCUEによって抽象化 Service X Team Kubernetes Service X Team PR & Review PR & Review GitHub CI/CD Pipeline Kit を配布 CI/CD Pipeline
  18. Terraform modulesの一例 • microservices-starter-kit ◦ 専用のGCP ProjectやKubernetes Namespaceなど、microserviceに関わる基本的に 設定など •

    microservices-team-kit ◦ Google Groupの管理とグループ単位の IAM設定や、OnCallチームの設定、GitHub teamの管理などチームのユーザー管理を一元化 • microservices-spanner-kit ◦ Spanner instanceやdatabase、バックアップの設定、 Spanner autoscalerの設定など • microservices-slo-kit ◦ SLOを定義しそれに対応した Datadog monitor設定など
  19. Conftestによるコードの検証 • CI/CD PipelineにてTerraformやKubernetesのコードを検証 ◦ 一例 ▪ モジュールに対する検証 • Shared

    VPCへの接続が許可されているか ▪ Terraformの検証 • VPC Firewallでログが有効になっているか ▪ Kubernetesマニフェストの検証 • 特権モード、ホストネットワークの使用 など Service X Team Kubernetes Service X Team PR & Review PR & Review GitHub CI/CD Pipeline CI/CD Pipeline Conftestでコードを検証