Cloud Operator Days Tokyo 2023 の登壇資料です。 https://cloudopsdays.com/
マイクロサービス環境におけるToilを削減するTerraformの活用in DMMプラットフォーム@pospome
View Slide
登壇者名前:pospome(ぽすぽめ)所属:DMM.comTwitter:@pospome
内容についてマイクロサービス環境におけるTerraformの活用についてToil削減という観点で話します。
DMMプラットフォーム扱う領域:DMM会員、決済、DMMポイント、不正対策などエンジニア数:120名以上開発チーム数:16チームマイクロサービス数:約40サービスピーク時のリクエスト:19,000RPS*2016年くらいからマイクロサービスに取り組んでいる。
プラットフォームエンジニアリングへの取り組みDMMプラットフォームはプラットフォームエンジニアリングに取り組むことで開発効率を向上させている。開発チームプラットフォームチーム共通利用するインフラ環境やツールを提供している
プラットフォームエンジニアリングへの取り組み提供するツールの例● EKS/GKE● ArgoCD● Container Registry● Datadog● Pager Duty
コミュニケーションコストを低くする必要がある開発チームからプラットフォームチームに申請や作業依頼をする形にすると、待ちが発生してしまう。開発チームプラットフォームチーム共通利用するインフラ環境やツールを提供している申請 or 作業依頼
開発チームに独立性を持たせる開発チームが自身で責任を持ってツールを利用することで、プラットフォームとコミュニケーションせずに開発を進めることができる。対象 プラットフォームチーム 開発チームk8s(GKE & EKS) クラスターの構築・運用 k8sマニフェストの管理CDパイプライン ArgoCDの構築・運用 ArgoCDを利用したデプロイの実行
開発チームに独立性を持たせる提供するツールを開発チーム自身で適切に利用できる世界を目指す。● EKS/GKE● ArgoCD● Container Registry● Datadog● Pager Duty
トイルが発生してしまう開発チームに独立性を持たせても、プラットフォームチームへの作業依頼をゼロにすることはできない。● k8sへのアクセス権限の付与● Datadogへのログインアカウント発行● Container Registryのリポジトリ作成
トイルが発生してしまう開発チームを待たせないためにも即時対応しなければいけないものが多い。作業自体は数分で終わるものでも単純な作業工数で計れない悪影響がある。● コンテキストスイッチの切り替えによる作業効率の低下● 作業者のモチベーション低下
どうやって解決しているのか?
Terraformを利用することでトイルを削減している“Super Terraform”というリソース管理の仕組みでトイルを削減している。実体としてはTerraformである。
Super Terraformのコンセプト
Super Terraformはリソース管理の仕組みSuper Terraformはプラットフォームチームが提供するツール群に関連するリソースを管理するための仕組みである。単なるクラウドインフラのIaCではなく、“トイルを削減する” という思想をベースに設計されている。
Super Terraformはリソース管理の仕組み開発者が自身でSuper Terraform上のTerraform定義を編集することで以下の作業を完了することができる。● k8sへのアクセス権限の付与● Datadogへのログインアカウント発行● Container Registryのリポジトリ作成
Terraformの変数の値を編集するだけ開発者フレンドリーな形で抽象化されており、開発者はTerraformのプロバイダーを直接扱う必要はない。開発チームはTerraformの変数を編集するだけで任意の設定ができるようになっている。
最低限のガードレールは用意しているSuper Terraform内のディレクトリとファイルはCODEOWNERによって権限設定がされている。
最低限のガードレールは用意しているTerraformの変数に指定する値もバリデーションしていたり、特定の値しか指定できないようにしている。
あくまでも最低限のガードレールガードレールを厳しくすると申請の承認などが発生してしまい、本末転倒なのでガードレールとはいえ最低限のものである。誤操作や本当にヤバい設定を防ぐことを目的にしている。
各種トイルの解消例
トイルの種類トイルには大きく分けて2つの種類がある。1. 開発者管理2. アプリケーション管理
開発者管理Super Terraformで扱う開発者管理のユースケースは以下である。1. 各種ツールの利用申請2. 各種ツールの権限設定3. 各種ツールの権限削除
各種ツールの利用申請DMMプラットフォームで開発をするエンジニアは最初に各種ツールの利用申請をすることになる。申請者自身がSlack Workflowで必要情報を入力することで申請できる。
なぜSlackなのか?DMMは入社時にSlackアカウントが付与されているので、誰でもWorkflowを実行できる。誰かが代わりに申請する手間が省ける。
各種ツールの利用申請Slack Workflowの実行によって、Super Terraform上にPRが作られる。このPRをmergeすると、指定した権限で各種ツールが利用できる状態になる。
各種ツールの利用申請PRをmergeできる権限を持つのは、各チームの限られた人のみである。具体的には github_approver という属性がtrueになっている人であれば、merge できるようになっている。
各種ツールの利用申請申請者は自チームのエンジニアにPRのmergeを依頼することになる。利用申請が各チームで完結する。
各種ツールの利用申請誰を github_approver=true にするかは、各チームに任せている。各チームに責任を持って管理してもらう方針に倒している。
Super Terraformでも開発チームに独立性を持たせるSuper Terraformでも開発チームに独立性を持たせることで、プラットフォームチームとのコミュニケーションをなくす。● Slack Workflowで申請者自身が利用申請できるようにする。● 各チームに承認者を配置する。
各種ツールの権限設定Slack Workflowによる利用申請が完了すると、申請者自身がSuperTerraformにPRを作成することができるようになる。申請後は任意のタイミングで任意の権限設定が可能になる。
各種ツールの権限削除Super Terraformから定義を削除すれば各種ツールの利用も停止することができる。
Super Terraformの退職者検知機能について退職者が出た場合、Super Terraformが自動的に定義を削除してくれる。削除した場合、退職者の所属チームにSlackで連絡がいく。
Super Terraformの退職者検知機能について各チームで適切に退職者対応をしない可能性があるので、ガードレールとして用意している機能である。
アプリケーション管理のユースケースについて開発者管理のユースケースは以下である。1. 新規アプリケーションの開発に必要なリソースを作成する2. 各種設定変更
新規アプリケーションに必要なリソースを作成するDMMプラットフォームでは各種ツールを利用してアプリケーションを開発するために以下のリソースが必要になる。1. k8s上で動かすアプリケーションのマニフェストファイル2. ArgoCDのデプロイ設定ファイル(k8sのCRD定義)3. コンテナイメージを保存するContainer Registry4. AWS Transit Gatewayの接続設定(EKSを利用する場合のみ)
新規アプリケーションに必要なリソースを作成するアプリケーションを開発するためのリソースはSuper TerraformのGitHubリポジトリのGitHub ActionsのWorkflowで作成することができる。
作成されるPRWorkflowを実行すると、PRが作成される。PRを適切に編集して、mergeすると各種リソースが作られる。
新規アプリケーションに必要なリソースを作成するSuper Terraformで各種ツールの利用申請をした人であれば、誰でもWorkflowを実行することができる。PRのmergeも各チームで実行可能になっている。ツールの利用申請と同様に開発チームで作業が完結する方針で設計している。
アプリケーションと開発者の紐づけdevelopersというフィールドで、アプリケーションと開発者を紐付けることができる。この設定は以下に利用される。● アプリケーションごとのリソース権限管理● 連絡用のSlack User Groupの作成
Slack User Groupの作成
k8sマニフェストの生成とGitHubリポジトリ間の連携についてk8sマニフェストは他のリポジトリで管理されているので、そのリポジトリに対してPRを作成する形になっている。Super Terraformk8sマニフェストGitHubリポジトリPRをmerge PRを作成
k8sマニフェストの生成とGitHubリポジトリ間の連携についてk8sマニフェストを管理するGitHubリポジトリにk8sマニフェストのPRが作成される。開発チームはPRを適切に編集し、mergeするだけでいい。
各種設定を変更するアプリケーションの各種設定を変更する場合はTerraformの定義を編集するだけでいい。
おまけ:アプリケーションの削除Super Terraformではアプリケーションの削除をサポートしていない。アプリケーションを削除する機会が少ないからである。削除する場合はプラットフォームチームが手動で削除する。削減効果の高いToilのみ対応する方針になっている。
Super Terraformの課題
マイクロサービスと開発者の管理が甘い最終的にサービスカタログとして機能させる予定なので、Backstage, Datadog Service Catalog とのインテグレーションを進める予定だった。しかし、現状のSuper Terraformはリソース設計が甘く、改修を入れる必要がある。
複雑な処理になると辛いSuper TerraformはTerraformとGitHub Actions(シェル)で開発しているが、複雑な自動化になると、これらで完結させることが難しい。何かしらのプログラミング言語と組み合わせてプログラマブルに処理できるようにする必要がある。現時点では Dagger の採用を検討している。
まとめ
まとめSuper Terraformによってプラットフォームチームが抱えていた各種トイルを削減することができた。しかし、今後作り込もうとすると、辛くなりそうな雰囲気を感じている。