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
470
はじめての英語プレゼン #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
Postmanの日本市場におけるDevRel (的) 活動 / Postman's DevRelish activities in Japan
yokawasa
1
120
Forget efficiency – Become more productive without the stress
ufried
0
240
ライブラリでしかお目にかかれない珍しい実装
mikanichinose
2
330
DMARC 対応の話 - MIXI CTO オフィスアワー #04
bbqallstars
1
130
株式会社ログラス − エンジニア向け会社説明資料 / Loglass Comapany Deck for Engineer
loglass2019
3
28k
製造現場のデジタル化における課題とPLC Data to Cloudによる新しいアプローチ
hamadakoji
0
200
ZOZOTOWNでの推薦システム活用事例の紹介
f6wbl6
1
490
RustとWebAssemblyを使って高速な画像処理をWebアプリで実行しよう
rebonire626
0
100
[FOSS4G 2024 Japan LT] LLMを使ってGISデータ解析を自動化したい!
nssv
1
170
GraphRAGを用いたLLMによるパーソナライズド推薦の生成
naveed92
0
190
データの信頼性を支える仕組みと技術
chanyou0311
4
1.6k
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
100
Featured
See All Featured
Producing Creativity
orderedlist
PRO
341
39k
Designing Experiences People Love
moore
138
23k
Building an army of robots
kneath
302
42k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
810
A Tale of Four Properties
chriscoyier
156
23k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
46
2.1k
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