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
860
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
CursorはMCPを使った方が良いぞ
taigakono
1
200
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
260
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
2
300
ASP.NETアプリケーションのモダナイズ インフラ編
tomokusaba
1
420
Result型で“失敗”を型にするPHPコードの書き方
kajitack
4
530
エラーって何種類あるの?
kajitack
5
320
Bytecode Manipulation 으로 생산성 높이기
bigstark
2
390
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
460
技術同人誌をMCP Serverにしてみた
74th
1
440
datadog dash 2025 LLM observability for reliability and stability
ivry_presentationmaterials
0
190
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
6
1.7k
Create a website using Spatial Web
akkeylab
0
310
Featured
See All Featured
Unsuck your backbone
ammeep
671
58k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Designing Experiences People Love
moore
142
24k
What's in a price? How to price your products and services
michaelherold
246
12k
Facilitating Awesome Meetings
lara
54
6.4k
Writing Fast Ruby
sferik
628
62k
Speed Design
sergeychernyshev
32
1k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
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!