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
1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
Other Decks in Programming
See All in Programming
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
640
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
660
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
260
typoなんかねぇよ
raspython3
0
670
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
Webプラットフォームで議論されているセキュリティ課題 / Security issues being discussed on Web Platforms
petamoriken
0
220
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
140
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
2
350
スマート反転とウェブアクセシビリティ
camiha
0
140
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
0
250
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
1
11k
Design in an AI World
tapps
1
310
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
290
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
890
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Skip the Path - Find Your Career Trail
mkilby
1
220
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Building AI with AI
inesmontani
PRO
1
1.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
From π to Pie charts
rasagy
0
360
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
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!