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
740
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
CQRS+ES の力を使って効果を感じる / Feel the effects of using the power of CQRS+ES
seike460
PRO
0
160
SymfonyCon Vienna 2025: Twig, still relevant in 2025?
fabpot
3
1.2k
Haze - Real time background blurring
chrisbanes
1
520
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
340
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
4
360
テストコード書いてみませんか?
onopon
2
210
暇に任せてProxmoxコンソール 作ってみました
karugamo
2
730
menu基盤チームによるGoogle Cloudの活用事例~Application Integration, Cloud Tasks編~
yoshifumi_ishikura
0
110
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
340
php-conference-japan-2024
tasuku43
0
360
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
3
590
Mermaid x AST x 生成AI = コードとドキュメントの完全同期への道
shibuyamizuho
1
270
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
How STYLIGHT went responsive
nonsquared
96
5.2k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Git: the NoSQL Database
bkeepers
PRO
427
64k
How GitHub (no longer) Works
holman
311
140k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Building Applications with DynamoDB
mza
91
6.1k
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!