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
650
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
470
rakuten-iac-provisioning-automation.pdf
tkak
1
560
はじめての英語プレゼン #6 LT - My first step of HashiCorp Nomad
tkak
1
150
Terraform Tips
tkak
1
8.6k
Start Go with Terraform
tkak
0
530
Road to "Infrastructure as Code" in Rakuten
tkak
1
1.1k
Other Decks in Technology
See All in Technology
面倒な作業はAIにおまかせ。Flutter開発をスマートに効率化
ruideengineer
0
240
プライベートクラウドでの効率的な証明書配布戦略 / Efficient Certificate Distribution Strategy in Private Cloud
lycorptech_jp
PRO
0
110
OPENLOGI Company Profile
hr01
0
67k
Flutter向けPDFビューア、pdfrxのpdfium WASM対応について
espresso3389
0
130
Connect 100+を支える技術
kanyamaguc
0
200
Delta airlines®️ USA Contact Numbers: Complete 2025 Support Guide
airtravelguide
0
340
ゼロからはじめる採用広報
yutadayo
3
850
Delegating the chores of authenticating users to Keycloak
ahus1
0
140
赤煉瓦倉庫勉強会「Databricksを選んだ理由と、絶賛真っ只中のデータ基盤移行体験記」
ivry_presentationmaterials
2
350
American airlines ®️ USA Contact Numbers: Complete 2025 Support Guide
airhelpsupport
0
370
AWS認定を取る中で感じたこと
siromi
1
180
敢えて生成AIを使わないマネジメント業務
kzkmaeda
2
430
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
Designing Experiences People Love
moore
142
24k
A Modern Web Designer's Workflow
chriscoyier
694
190k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Rails Girls Zürich Keynote
gr2m
95
14k
RailsConf 2023
tenderlove
30
1.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
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