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
Terraform workspaceとTerraform Cloudを用いたDRYでシンプル...
Search
thaim
October 01, 2021
Programming
0
910
Terraform workspaceとTerraform Cloudを用いたDRYでシンプルな運用フロー / DRY and simple workflow with terraform workspace and terraform cloud
HashiTalks Japan 2021
14:15 - 14:30 JST
https://events.hashicorp.com/hashitalksjapan
thaim
October 01, 2021
Tweet
Share
Other Decks in Programming
See All in Programming
Claude CodeによるAI駆動開発の実践 〜そこから見えてきたこれからのプログラミング〜
iriikeita
0
320
Leading Effective Engineering Teams in the AI Era
addyosmani
7
560
Go言語の特性を活かした公式MCP SDKの設計
hond0413
1
420
CSC305 Lecture 09
javiergs
PRO
0
300
CSC305 Lecture 08
javiergs
PRO
0
270
20251016_Rails News ~Rails 8.1の足音を聴く~
morimorihoge
2
660
iOSでSVG画像を扱う
kishikawakatsumi
0
150
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
380
コードとあなたと私の距離 / The Distance Between Code, You, and I
hiro_y
0
190
理論と実務のギャップを超える
eycjur
0
170
スキーマ駆動で、Zod OpenAPI Honoによる、API開発するために、Hono Takibiというライブラリを作っている
nakita628
0
290
品質ワークショップをやってみた
nealle
0
600
Featured
See All Featured
It's Worth the Effort
3n
187
28k
How GitHub (no longer) Works
holman
315
140k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
34
2.3k
How STYLIGHT went responsive
nonsquared
100
5.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
10
880
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
115
20k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
190
55k
Transcript
Terraform workspaceとTerraform Cloud を用いたDRYでシンプルな運用フロー 株式会社スペースリー インフラエンジニア 佐藤隆佑 1 Copyright Spacely,
Inc. All Rights Reserved
自己紹介 2 Copyright Spacely, Inc. All Rights Reserved 佐藤隆佑 (Ryusuke
Sato) • 株式会社スペースリー (2019-11〜) • インフラエンジニア • Terraform Ansible Docker GitHub Actions AWS datadog など • twitter: @thaim24 • github: @thaim
2016年にローンチして以降、不動産/住宅分野を中 心にしたVerticalな不動産領域と、大手製造業や飲 食店など研修領域で成長を続けています。 会社・サービス紹介 「どこでもかんたんVR」がコンセプト VR SaaSという未開拓領域のクラウドソフトウェア
「スペースリー」の研究開発、提供をしています
ディレクトリ構造ベストプラクティスと Terraform workspace 4 Copyright Spacely, Inc. All Rights Reserved
Terraform workspace使っていますか? 5 Copyright Spacely, Inc. All Rights Reserved 世の中のディレクトリ構造ベストプラクティス
• ディレクトリ分割 ◦ 環境ごとにディレクトリを分けて構築する • モジュール分割 ◦ サービスをモジュール定義して環境ごとに読み込む • workspace切り替え ◦ terraform workspaceで対象の環境を切り替える
なぜworkspaceの利用事例が少ないか 6 Copyright Spacely, Inc. All Rights Reserved • workspaceの切り替えが面倒
開発環境のつもりが本番環境にapplyしてしまった、という事故を懸念 • 環境により構成が異なる 開発環境と本番環境の構成が違うのはよくある話 (弊社も差分はある) • 利用変数・認証情報が異なる workspace毎に変数や認証情報を切り替えるのが面倒 以上を考慮すると、ディレクトリ分割がシンプルでわかりやすい
workspaceとTerraform Cloudでシンプルに 7 Copyright Spacely, Inc. All Rights Reserved workspaceも便利だよ
• 開発環境と本番環境で同一コードを書く必要なし(DRY) • モジュール化も不要なので見通しがよい Terraform Cloudとの組合せでより便利に • plan & apply時に workspaceや変数の切り替えを意識する必要なし • Terraform Cloudが開発環境と本番環境を分離して混同の心配なし
Terraform Cloudについて 8 Copyright Spacely, Inc. All Rights Reserved Terraform
Cloud概要 • HashiCorpによるマネージドなTerraform実行環境 • GitHubなどと連携してCI/CDを構築可能 Terraform workspaceとTerraform Cloud workspaceとの違いに注意 • 同じ名前だが異なる概念 • Terraform Cloud workspaceはtfstateに加え変数や実行環境を管理 • 詳細は公式ドキュメント参照: https://www.terraform.io/docs/cloud/workspaces/
スペースリーにおける Terraform の活用状況 9 Copyright Spacely, Inc. All Rights Reserved
スペースリーにおけるディレクトリ構成 10 Copyright Spacely, Inc. All Rights Reserved サービスごとに1つのディレクトリ •
service-Aは開発も本番も同一ディレクトリ • Terraform workspaceで開発と本番を区別 共通モジュールとサブモジュール • 複数サービスで利用する場合はmodulesに配置 • 環 境 差 分を表 現する場 合はサブディレクトリを 切ってモジュール化 • 詳細後述
Terraform workspaceとTerraform Cloudの関係 11 Copyright Spacely, Inc. All Rights Reserved
• workspaceの切り替えがTerraform Cloud workspaceの切り替えに対応 (左下図の赤矢印) • 一部workspaceを使わないサービスも存在 (左下図の黒矢印) • terraformの設定では workspacesのprefixを指定 (右下図)
環境による設定の違い 12 Copyright Spacely, Inc. All Rights Reserved 開発環境のみ実行モードをローカル実行で利用 •
開発環境はローカルでapply実行する ◦ プルリクマージ前にapplyできるので試行錯誤できる ◦ 手動でリソース作成後 importして差分解消する開発方法も • ステージング/本番環境はTerraform Cloud上でapply実行する ◦ プルリク作成時に自動でplanが実行され差分の確認が可能 ◦ SSoTを実現し、ローカル環境から間違えてapplyできない ◦ 本番用の認証変数と変数を配置すればローカルでもplanは可能
workspaceの対応関係もTerraformで管理 13 Copyright Spacely, Inc. All Rights Reserved サービスに応じたworkspaceの対応関係が複雑化 •
どのサービスがworkspaceをどう活用しているのかわかりにくい • 障害対応のため本番環境の実行モードを変更すると事故のもと workspaceの対応関係もTerraformでコード化 • tfe_workspaceでコード化、execution_mode=localだとローカルapply • 本番用/開発用の認証情報(環境変数)も一括管理
workspaceの対応関係もTerraformで管理(実装抜粋) 14 Copyright Spacely, Inc. All Rights Reserved Terraform Cloud
workspaceの ディレクトリ構成 Terraform Cloud workspaceの実装例
開発の流れ 15 Copyright Spacely, Inc. All Rights Reserved 1. ローカル環境で開発・apply
• 複数人での開発が並行しそうな場合はapplyはプルリク作成まで保留 2. Terraform Cloud上に必要な変数を設定(ステージング/本番) 3. プルリク作成・プルリクマージ 4. Terraform Cloud 上のステージング workspaceでapply承認 5. Terraform Cloud 上の本番workspaceでapply承認 • ステージング環境でapply失敗した場合はapplyスキップ
環境差分を表現するためにモジュールを利用 16 Copyright Spacely, Inc. All Rights Reserved 本番と開発(ステージング)で構成が異なる場合はモジュールを利用 •
大抵の構成差分は変数や三項演算子で切り分け ◦ インスタンスサイズやリソース名など • 複数のサービス間で共有するモジュールはmodulesディレクトリで管理 ◦ 一部のリソースのみで利用量は多くない • 環境差分はサブディレクトリで構成 ◦ service-Aの差分はservice-A/sub-resource ディレクトリを読み込み
課題 17 Copyright Spacely, Inc. All Rights Reserved リソースインポート •
初期のコード化や手作業で構築したリソース対応 • 本番環境用の認証情報や環境変数をローカルに配置する必要がある 複数人での開発 • マージ前に複数人がapplyするので環境が勝手にロールバックされる • -targetで追加分のみ反映させたり、tfstateを分割したり • まだ少人数なので問題化されていない
まとめ 18 Copyright Spacely, Inc. All Rights Reserved • Terraform
workspaceを使いDRYで見通しのよいコードを実現 • Terraform Cloudを使い運用フローをシンプルに • 本番リソースインポートや並行開発時が課題 • We are hiring!