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
730
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
520
rakuten-iac-provisioning-automation.pdf
tkak
1
600
はじめての英語プレゼン #6 LT - My first step of HashiCorp Nomad
tkak
1
190
Terraform Tips
tkak
1
8.7k
Start Go with Terraform
tkak
0
550
Road to "Infrastructure as Code" in Rakuten
tkak
1
1.1k
Other Decks in Technology
See All in Technology
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
1
580
しろおびセキュリティへ ようこそ
log0417
0
230
Amazon Bedrock AgentCore EvaluationsでAIエージェントを評価してみよう!
yuu551
0
200
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
2
1k
GCASアップデート(202510-202601)
techniczna
0
230
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
5
1.6k
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
780
ZOZOにおけるAI活用の現在 ~開発組織全体での取り組みと試行錯誤~
zozotech
PRO
3
2.1k
SMTP完全に理解した ✉️
yamatai1212
0
160
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
2
620
Digitization部 紹介資料
sansan33
PRO
1
6.7k
Deno・Bunの標準機能やElysiaJSを使ったWebSocketサーバー実装 / ラーメン屋を貸し切ってLT会! IoTLT 2026新年会
you
PRO
0
200
Featured
See All Featured
It's Worth the Effort
3n
188
29k
Building AI with AI
inesmontani
PRO
1
660
Tell your own story through comics
letsgokoyo
1
800
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
52
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
61
49k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
160
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.3k
Paper Plane (Part 1)
katiecoart
PRO
0
3.8k
Unsuck your backbone
ammeep
671
58k
Documentation Writing (for coders)
carmenintech
77
5.2k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
75
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
130
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