Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
940
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
Go コードベースの構成と AI コンテキスト定義
andpad
0
130
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
190
チームをチームにするEM
hitode909
0
340
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
3
800
Integrating WordPress and Symfony
alexandresalome
0
150
chocoZAPサービス予約システムをNuxtで内製化した話
rizap_tech
0
140
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
120
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
510
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
730
SwiftUIで本格音ゲー実装してみた
hypebeans
0
390
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
350
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7.5k
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
KATA
mclloyd
PRO
33
15k
Bash Introduction
62gerente
615
210k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.5k
Why Our Code Smells
bkeepers
PRO
340
57k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Balancing Empowerment & Direction
lara
5
800
Documentation Writing (for coders)
carmenintech
76
5.2k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
Mobile First: as difficult as doing things right
swwweet
225
10k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
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!