Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
hashitalks-japan-provisioning-by-terraform-at-r...
Search
Takaaki FURUKAWA
July 03, 2020
Technology
0
590
hashitalks-japan-provisioning-by-terraform-at-rakuten
HashiTalks Japan 2020, 楽天における Terraform によるプロビジョニング自動化と便利なツール群
Takaaki FURUKAWA
July 03, 2020
Tweet
Share
More Decks by Takaaki FURUKAWA
See All by Takaaki FURUKAWA
jfrog-artifactory-introduction
tkak
0
400
rakuten-iac-provisioning-automation.pdf
tkak
1
480
はじめての英語プレゼン #6 LT - My first step of HashiCorp Nomad
tkak
1
130
Terraform Tips
tkak
1
8.5k
Start Go with Terraform
tkak
0
500
Road to "Infrastructure as Code" in Rakuten
tkak
1
1k
Other Decks in Technology
See All in Technology
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
880
OTelCol_TailSampling_and_SpanMetrics
gumamon
1
220
OCI Vault 概要
oracle4engineer
PRO
0
9.7k
The Rise of LLMOps
asei
9
1.7k
Lexical Analysis
shigashiyama
1
150
FlutterアプリにおけるSLI/SLOを用いたユーザー体験の可視化と計測基盤構築
ostk0069
0
110
Platform Engineering for Software Developers and Architects
syntasso
1
520
開発生産性を上げながらビジネスも30倍成長させてきたチームの姿
kamina_zzz
2
1.7k
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
1
120
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
130
LINEヤフーにおけるPrerender技術の導入とその効果
narirou
1
120
【令和最新版】AWS Direct Connectと愉快なGWたちのおさらい
minorun365
PRO
5
770
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Documentation Writing (for coders)
carmenintech
65
4.4k
Practical Orchestrator
shlominoach
186
10k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
380
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Side Projects
sachag
452
42k
Ruby is Unlike a Banana
tanoku
97
11k
Fireside Chat
paigeccino
34
3k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
Transcript
楽天における Terraform による プロビジョニング⾃動化と便利なツール群 July 3rd, 2020 Takaaki Furukawa DevOps
Engineer, Cloud Platform Development Section Rakuten, Inc. HashiTalks Japan 2020
• Takaaki Furukawa / @tkak • DevOps Engineer at Rakuten,
Inc. • SRE group • HashiCorp Products : Terraform, Packer • HashiCorp Certified: Terraform Associate
3 Agenda • Terraform 導⼊の背景とTerraform Custom Provider開発 • 現在の Terraform
利⽤事例 • Terraform に関する便利ツール • 本⽇のまとめ
4 Agenda • Terraform 導⼊の背景とTerraform Custom Provider開発 • 現在の Terraform
利⽤事例 • Terraform に関する便利ツール • 本⽇のまとめ
5 Rakuten, Inc. https://corp.rakuten.co.jp/investors/documents/results/
6 楽天のサービスを裏で⽀えるインフラ環境 多種多様なサービスの多くが⾃社DC内で稼働している。最近では⼀部AzureやGCPなどパブリックク ラウドを使うサービスも。 多くのサービスは⾃社DCにあるVMwareをベースにしたIaaS基盤の上で動いている。 • 仮想化による⾼いサーバ集約率 • VMware HA
+ 共有ストレージによる⾼可⽤性 ここ1、2年はCaaS基盤(k8s)への移⾏に積極的に取り組んでいます。
7 楽天のサーバプロビジョニングに Terraform を導⼊するきっかけ 楽天への Terraform 導⼊は古く、5年ほど前… 当時はサーバプロビジョニング専任のチームに所属していて、⽇々依頼されるサーバ構築の作業に 勤しみながら、作業の⾃動化に取り組んでいた •
Prov team: 5, 6⼈ • Monthly provisioning VMs: 300+ Dev Teams Ops Teams Prov Teams request request
8 当時は、サーバ内の設定は Chef を使って⾃動化していたが、 サーバの外の設定(ロードバランサやDNSなど)はポータルからポチポチしていた…
9 2014年 Terraform 発表 https://www.terraform.io/
10 Writing Terraform Custom Providers 社内のIaaS環境で使えるTerraform Custom Providerを開発 Terraform と
Chef を組み合わせることで、システムの包括的な Infrastructure as Code が実現 ボタンポチポチからの解放
11 Agenda • Terraform 導⼊の背景とTerraform Custom Provider開発 • 現在の Terraform
利⽤事例 • Terraform に関する便利ツール • 本⽇のまとめ
12 Current Server Provisioning Workflow Overview Dev Teams … SRE
Teams DBA Team Terraform Code Repository Request by JIRA GitOps Workflow (Pull request/Review/Merge) https://github.com/ https://www.terraform.io/
13 ⾃社IaaS環境向け Terraform Custom Provider
14 なぜ新しく Terraform Custom Provider を開発したのか︖ • VMware vSphere providerは、VMwareに精通してい
る⼈向けという感じ • どこかで抽象化する必要があったが、当時はmodule 機能が今よりも充実していなかった • 社内IaaS基盤⽤のAPIをきちんと整備し、それを使っ たterraform custom providerの開発へ
15 Terraform Custom Provider の開発 • Terraform が必要なライブラリを提供しているので 、開発⾃体そんなに難しくない •
Web API⽤の Go library の開発 • Terraform Custom Provider の開発 • 参考: Writing Custom Providers • https://www.terraform.io/docs/extend/writing- custom-providers.html (June 30, 2020)
16 Terraform Rakuten Provider Example
17 Terraform のコードはどう管理している︖ • 主にサーバのプロビジョニングの⽤途で利⽤ • Gitのリポジトリ体系はMonorepoを採⽤ • Chef cookbook
は polyrepoを採⽤していた • CIやTerraformのバージョンアップなどのしやすさ • 他の⼈のコードやpull requestを参考にしやすい • GitHubのCODEOWNERの機能を使った権限委譲のやり⽅などは mercari さんの事例を参考 • メルカリ Microservices Team による Terraform 運⽤とその中 で開発したOSSの紹介 https://tech.mercari.com/entry/2018/04/09/110000 (June 30, 2020)
18 Terraform GitOps Workflow の活動状況 • 2019年3⽉くらいから今のワークフローを導⼊ • 45 contributers
• SREチームに限らずDBAなど他のチームからもPR • 860+ server roles • 1800+ state files (server roles x environments) • 400+ VMs/month • 最初から完璧なパイプラインを⽬指さずに最低限必要な機能 を作り、徐々に改善
19 Current Terraform GitOps Workflow Submit a pull request Triger
a job terraform plan validation https://github.com/ https://circleci.com/
20 Current Terraform GitOps Workflow Review the pull request terraform
plan validation Post the result https://github.com/ https://circleci.com/
21 Current Terraform GitOps Workflow Merged after review Triger a
job https://github.com/ https://circleci.com/ terraform plan validation
22 Current Terraform GitOps Workflow Check the plan results https://github.com/
https://circleci.com/
23 Current Terraform GitOps Workflow terraform apply Push "approve" button
Post the result Send the logs with logstash https://github.com/ https://circleci.com/ https://www.elastic.co/ https://slack.com/
24 Agenda • Terraform 導⼊の背景とTerraform Custom Provider開発 • 現在の Terraform
利⽤事例 • Terraform に関する便利ツール • 本⽇のまとめ
25 Terraform CI/CD 周り
26 tfnotify • Terraform plan/applyの結果をslackやgithubに通知するこ とができるCLIツール • terraform plan |
tfnotify plan • CircleCIを開かなくてもterraform planの結果がわかる GitHub上でわかるのでとても重宝している • https://github.com/mercari/tfnotify (June 30, 2020) terraform plan Post the result
27 Conftest / Open Policy Agent • Conftest は、構造化された設定ファイルをテストするCLIツール (Policy
as Code) • Open Policy Agent (OPA) が提供する Rego と呼ばれる⾔語を使ってテストコードを記述する • OPA は CNCF incubation project で、Rego で書かれたPolicy定義を元に、与えられたjsonデータに対 しpolicy判定を⾏い結果を返すというWeb APIやCLIを提供している
28 Conftest / Open Policy Agent • Conftestは、Terraform code の他に
Kubernetes manifest や Dockerfile などもサポート • 社内ではterraform code内の値が問題ないかどうかのvalidationとして使っている • Test-Driven Development (TDD) for Infrastructure (https://www.hashicorp.com/resources/test-driven- development-tdd-for-infrastructure/ (June 30, 2020)) の動画で Conftest を発⾒したのがきっかけ • https://github.com/open-policy-agent/conftest (June 30, 2020)
29 Terraform Module 管理周り
30 Terratest • Terratest は、Go で書かれたIaC向けテストライブラリ • Goのテストの中で、Terraform code を元に、実際にインフ
ラを構築、テスト、削除までを⾏う • Terraform codeの他、Packerやkubernetesなども対応 • 社内では、Terraform module の動作確認に利⽤ • https://github.com/gruntwork-io/terratest (June 30, 2020)
31 Chef InSpec • Chef 社が開発しているインフラのテストフレームワーク • RubyベースのDSLでテストを記述し、inspecコマンドでテストを実⾏する • サーバ内部の設定のチェックの他、AWS,
GCP, Azureのインフラのチェックもサポート • 社内では、Terratest の中で Chef InSpec コマンドを実⾏し、作成されたVM内の設定に対してテス トしている • https://github.com/inspec/inspec (June 30, 2020)
32 terraform-docs • terraform-docs は、terraform module のinputやoutputの定義を元にドキュメントを⽣成してくれる CLIツール • Git
hookと組み合わせるとgit commit した際、勝⼿にterraform moduleのドキュメントを更新してく れるようになる • https://github.com/segmentio/terraform-docs (June 30, 2020)
33 Terraform Code 開発周り
34 Terraform template_dir resource and null_resource resource • Terraform codeを毎回⼀から書くのは⾟い。terraformを使ってterraform
code を⾃動⽣成。 • Terraform code をより簡単に書けるように • Typoやformatのミスを極⼒減らす • template_dir resource はディレクトリ丸ごと template から⽣成してくれる • template providerはdeprecatedで、template_dir resourceの代わりにhashicorp/dir/template moduleを 使うのが推奨されている • null_resource resource はローカル(またはリモート)で任意のコマンドを実⾏する prod/main.tf stg/main.tf dev/main.tf Chef role cookbook terraform.tfvars generate
35 tfenv • Terraform のバイナリを管理するCLIツール • terraformの新しいバージョンを試したいときなど、複数のバージョンを切り替えたい場合に便利 • https://github.com/tfutils/tfenv (June
30, 2020)
36 Agenda • Terraform 導⼊の背景とTerraform Custom Provider開発 • 現在の Terraform
利⽤事例 • SREチームへの Terraform 導⼊の過程ででた課題とツール • 本⽇のまとめ
37 まとめ • 楽天ではオンプレミスIaaS環境向けにTerraform Custom Providerを開発し、主にサーバプロビジョ ニングワークフローの部分でTerraformを利⽤している • 少ない⼈数でGitOps Workflowを効率よく回すための⼯夫とツールの紹介
• Terraform CI/CD (tfnotify / conftest) • Terraform module 管理 (terratest / ChefInSpec / terraform-docs) • Terraform code 開発 (tfenv / terraform_dir resource)
None