会員限定2018/11/06失敗しがちなDevOps、メルカリ流「DevOps文化の醸成の仕方」とは(後編)メルカリはこの1年、マイクロサービスアーキテクチャにどう取り組み、実現のためになにをしてきたのか。Mercari」で紹介されました。新野淳一(本記事は「Publickey」より転載)新野淳一(本記事は「Publickey」より転載)ITジャーナリスト/Publickeyブロガー。大学でUNIXを学び、株式会社アスキーに入社。副編集長などを経て1998年退社、フリーランスライターに。2000年、株式会社アットマーク・アイティ設立に参画、オンラインメディア部門の役員として2007年にIPOを実現、2008年に退社。フリーランスとして独立し、2009年にブログメディアPublickeyを開始。本記事は「メルカリが「マイクロサービス」に本気で取り組む理由」の続きですDevOps文化を組織内に醸成する次はDevOps文化の醸成です。この1年で、マイクロサービスの開発者が自分たちでできるようになったことが大きくふたつあります。ひとつ目は、インフラのセットアップとプロビジョニング。ふたつ目はサービスのデプロイです。プロビジョニングから。先ほど、各開発チームがKubernetesのネームスペースやGCPのサービスにアクセスできるようにした、という話をしました。そこで例えばGCPのデータベースを使いたいときにはデータベースをセットアップする、という作業を行います。これがプロビジョニングです。Code」の文化を浸透させることで実現しています。具体的なツールとしては、HashiCorpの「Terraform」を使っています。Terraformは、GCPやAWSなどのクラウドサービスを抽象化して、宣言的にコードとしてインフラのあるべき状態を記述することで、その状態になるようにプロビジョニングを実行してくれます。各マイクロサービスごとのTerraformのコードの管理やそのコードの自動アプライを実現するために、microservices-terraformというリポジトリを準備しています。このリポジトリにはStarter-kitというTerraformのモジュールも提供されています。これを使うことでマイクロサービスをリリースするための最低限必要なインフラを簡単に構築できるようになっています。最低限必要なインフラとは、さっき紹介したNamespaceやGCPプロジェクトがあり、またモニタリングの設定だったり、それらをStarter-Kitを使って一発でブートストラップできます。開発者はまず自分たちでTerraformのコードを書いて、このリポジトリにプルリクエストをかけます。インフラの経験が少ない開発者がいきなりTeraformのコードをがりがり書くのは難しいので、われわれマイクロサービスプラットフォームチームがレビューを行います。レビューが通ってマージが行われると、CIが走ってプロビジョニングが行われるというフローになっています。開発者が自分たちでインフラのプロビジョニングができるようにこのワークフローで問題になるのは、マイクロサービスプラットフォームチームによるレビューのところです。Terraformのコードを保守していくためにはレビューは必須なのですが、マイクロサービスが増えれば増えるほどここがボトルネックになってスピードが失われてしまいます。これを解決するためにGitHubのCODEOWNERSという機能を使います。CODEOWNERSを使うとリポジトリの特定のディレクトリにコードオーナーを指定できます。コードオーナーはプルリクエストのアプルーブやマージができます。この機能を使ってGitHubの各サービスの専用ディレクトリに、各サービスのチームメンバーをコードオーナーとしてアサインします。すると、自分たちのサービスに関するプルリクエストは自分たちでアプルーブしてマージできるわけです。何度かわれわれマイクロサービスプラットフォームチームのレビューを受けて、自分たちでTerraformのコードを書く自信が付いたら、自分たちでレビューしてスピード感を持って進めればいいし、まだちょっと不安があるチームはわれわれのレビューを受けて、書き方を覚えてもらう、ということをやっています。この仕組みはとてもうまく回っていて、いまではこのリポジトリに110名ものコントリビュータがいます。これはどういうことかというと、100名以上の開発者が自分たちでインフラのプロビジョニングをしているということです。1年前、インフラの管理ができるのはSREの10名くらいしかいませんでした。そこから10倍以上の成長です。この変化は、マイクロサービスプラットフォームチームがもたらした大きなものだといえます。デプロイのパイプラインも開発者が作る次はサービスのデプロイです。マイクロサービスではデプロイも、開発者が自分たちで行います。このために「Spinnaker」というツールを使っています。SpinakerはNetflixがオープンソースとして公開した継続的デリバリのためのツールです。Spinnakerは例えば、カナリアデプロイメントを行うステージ、Blue/Greenデプロイメントを行うステージ、デプロイの承認を行うステージなど、さまざまなステージを提供しています。開発者はサービスの特性に合わせたステージを組み合わせてデプロイを行うことができます。Spinnakerを使い始めて1年ですが、60以上のパイプラインが作られています。これはSpinnakerの設定画面です。開発者はこの画面を通じてデプロイの設定をしています。これはGUIなので、ここが開発者のペインポイントになっていました。GUIは小規模なチームが素早く動くには便利だと思うのですが、チームがスケールするほど変更したときのレビューができないとか、ドキュメント化するのがむずかしいとか、ほかのチームの設定をコピーして使うことができないといった問題があります。Codeへの移行をはじめています。Provider」というSpinnakerの機能を利用しています。これはKubernetesのYAMLを直接書く方式です。KubernetesのYAMLさえも開発者に書いてもらおうという方向に進んでいます。これもTerraformと同様にGitHubにプルリクエストを送ってレビューをする方法を採用しています。この仕組みは導入したばかりですが、GUIの設定の負担を減らして、かつ、Kubernetesの設定であるYAMLファイルを覚えることで、開発者が自分たちにとってよりよいKubernetesの設定をカスタマイズできるようになるのではないかと期待しています。以上が、この1年のわれわれマイクロサービスプラットフォームチームが取り組んできたことです。会社情報SBクリエイティブ株式会社ビジネス+ITはソフトバンクグループのSBクリエイティブ株式会社によって運営されています。]この続きを読むを前に...「ビジネス+IT(登録無料)」にご登録いただくと、最新の関連情報が届きます。会員登録をすると、4つのプレミアム特典を受け取ることができます。今すぐ登録(無料)会員ログインビジネス+IT会員とはこの続きを読むを前に...「ビジネス+IT(登録無料)」にご登録いただくと、最新の関連情報が届きます。ビジネス+IT会員とは。