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
760
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
hashitalks-japan-provisioning-by-terraform-at-rakuten
HashiTalks Japan 2020, 楽天における Terraform によるプロビジョニング自動化と便利なツール群
Takaaki FURUKAWA
July 03, 2020
More Decks by Takaaki FURUKAWA
See All by Takaaki FURUKAWA
jfrog-artifactory-introduction
tkak
0
570
rakuten-iac-provisioning-automation.pdf
tkak
1
620
はじめての英語プレゼン #6 LT - My first step of HashiCorp Nomad
tkak
1
200
Terraform Tips
tkak
1
8.7k
Start Go with Terraform
tkak
0
580
Road to "Infrastructure as Code" in Rakuten
tkak
1
1.1k
Other Decks in Technology
See All in Technology
指示待ちから変化に応じるClaude Codeへ!~環境からAgentへの帰り道を作る~
gotalab555
9
1.7k
『自分で判断できるか』を基準に、プロダクトのハンズオン研修でAI利用の線を引いてみた / Where We Drew the Line on AI in Hands-on Training
honyanya
1
550
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
200
[RSJ26] Flow as Flow: Modeling Robot Velocity Fields as Probability Velocity Fields
keio_smilab
PRO
0
170
Claude Teamプランの コスト最適化を考える
rfdnxbro
2
850
マイナンバーカード本人確認の実装比較(OAuth/OIDC Numa (Immersion) Workshop 2026) / 20260825 numa-12
oidfj
PRO
0
420
AI時代の「OAuth認証」にどう物申すか?(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
410
最新技術に積極チャレンジ!EKS共通基盤のこれまでとこれから
daitak
0
280
When Token Pruning is Worse than Random: Understanding Visual Token Information in VLLMs
sansantech
PRO
0
210
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
25k
みてねにおけるAI-DLC導入活動とAIドリブン開発の現在地/JAWS-UG AI-DLC #2
isaoshimizu
2
320
Claude Codeで開発以外の業務も爆速化しよう!
minorun365
PRO
12
9.3k
Featured
See All Featured
Six Lessons from altMBA
skipperchong
29
4.5k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
360
Building Applications with DynamoDB
mza
96
7.2k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Building an army of robots
kneath
306
46k
Exploring anti-patterns in Rails
aemeredith
3
480
Faster Mobile Websites
deanohume
310
32k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Game over? The fight for quality and originality in the time of robots
wayneb77
1
260
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
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