Upgrade to Pro — share decks privately, control downloads, hide ads and more …

hashitalks-japan-provisioning-by-terraform-at-rakuten

 hashitalks-japan-provisioning-by-terraform-at-rakuten

HashiTalks Japan 2020, 楽天における Terraform によるプロビジョニング自動化と便利なツール群

Takaaki FURUKAWA

July 03, 2020
Tweet

More Decks by Takaaki FURUKAWA

Other Decks in Technology

Transcript

  1. • Takaaki Furukawa / @tkak • DevOps Engineer at Rakuten,

    Inc. • SRE group • HashiCorp Products : Terraform, Packer • HashiCorp Certified: Terraform Associate
  2. 3 Agenda • Terraform 導⼊の背景とTerraform Custom Provider開発 • 現在の Terraform

    利⽤事例 • Terraform に関する便利ツール • 本⽇のまとめ
  3. 4 Agenda • Terraform 導⼊の背景とTerraform Custom Provider開発 • 現在の Terraform

    利⽤事例 • Terraform に関する便利ツール • 本⽇のまとめ
  4. 10 Writing Terraform Custom Providers 社内のIaaS環境で使えるTerraform Custom Providerを開発 Terraform と

    Chef を組み合わせることで、システムの包括的な Infrastructure as Code が実現 ボタンポチポチからの解放
  5. 11 Agenda • Terraform 導⼊の背景とTerraform Custom Provider開発 • 現在の Terraform

    利⽤事例 • Terraform に関する便利ツール • 本⽇のまとめ
  6. 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/
  7. 14 なぜ新しく Terraform Custom Provider を開発したのか︖ • VMware vSphere providerは、VMwareに精通してい

    る⼈向けという感じ • どこかで抽象化する必要があったが、当時はmodule 機能が今よりも充実していなかった • 社内IaaS基盤⽤のAPIをきちんと整備し、それを使っ たterraform custom providerの開発へ
  8. 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)
  9. 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)
  10. 18 Terraform GitOps Workflow の活動状況 • 2019年3⽉くらいから今のワークフローを導⼊ • 45 contributers

    • SREチームに限らずDBAなど他のチームからもPR • 860+ server roles • 1800+ state files (server roles x environments) • 400+ VMs/month • 最初から完璧なパイプラインを⽬指さずに最低限必要な機能 を作り、徐々に改善
  11. 19 Current Terraform GitOps Workflow Submit a pull request Triger

    a job terraform plan validation https://github.com/ https://circleci.com/
  12. 20 Current Terraform GitOps Workflow Review the pull request terraform

    plan validation Post the result https://github.com/ https://circleci.com/
  13. 21 Current Terraform GitOps Workflow Merged after review Triger a

    job https://github.com/ https://circleci.com/ terraform plan validation
  14. 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/
  15. 24 Agenda • Terraform 導⼊の背景とTerraform Custom Provider開発 • 現在の Terraform

    利⽤事例 • Terraform に関する便利ツール • 本⽇のまとめ
  16. 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
  17. 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を提供している
  18. 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)
  19. 30 Terratest • Terratest は、Go で書かれたIaC向けテストライブラリ • Goのテストの中で、Terraform code を元に、実際にインフ

    ラを構築、テスト、削除までを⾏う • Terraform codeの他、Packerやkubernetesなども対応 • 社内では、Terraform module の動作確認に利⽤ • https://github.com/gruntwork-io/terratest (June 30, 2020)
  20. 31 Chef InSpec • Chef 社が開発しているインフラのテストフレームワーク • RubyベースのDSLでテストを記述し、inspecコマンドでテストを実⾏する • サーバ内部の設定のチェックの他、AWS,

    GCP, Azureのインフラのチェックもサポート • 社内では、Terratest の中で Chef InSpec コマンドを実⾏し、作成されたVM内の設定に対してテス トしている • https://github.com/inspec/inspec (June 30, 2020)
  21. 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)
  22. 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
  23. 36 Agenda • Terraform 導⼊の背景とTerraform Custom Provider開発 • 現在の Terraform

    利⽤事例 • SREチームへの Terraform 導⼊の過程ででた課題とツール • 本⽇のまとめ