Skip to main content

複数のTerraform環境を管理する

著者
Headshot of Stephane Jourdan

Stephane Jourdan

feature synk iac terraform blue

2020年6月30日

0 分で読めます

編集者注: この記事はもともと CloudSkiff.comに掲載されたものです。 CloudSkiffはSnykに加わりました (2021年10月)。

複数のTerraform環境を管理する複雑さに、どう対処すればよいでしょうか?複数の環境があり、複数のチームが関わる可能性もあるため、管理は難しくなりがちです。この記事では、プロのように複数のTerraform環境を管理するための始め方をご紹介します。

TFファイルから始める

複数のTerraform環境を管理する必要がある場合、取り組み方を発展させ、始める方法はいくつもあります。

単一の.tfファイルから段階的に始める場合、最初からすべてのベストプラクティスを把握するのは大変です。せいぜい気が散ってしまい、最悪の場合は意欲を失うかもしれません。そこで、まずは単一のTFStateを使う、ごくシンプルな方法から始めてみましょう。Terraformファイルを作成し、production.tfという名前を付け、VPCやVMなどを記述します。ほどなくして、別の環境も作れるようになります。たとえばstaging.tfとしましょう。引き続きTFStateファイルは1つだけなので、それ自体は問題ありませんが、規模の拡大には対応できません。それでも、段階的に取り組む方法の1つです。

Terraformワークスペースを使う

HashiCorpは、現在ワークスペースと呼ばれている機能の使用を推奨しています。workspacesはTerraformのサブコマンドです。以前はenvironmentsという名前でした。

ワークスペースの目的は、環境ごとにTFStateファイルを分けることです。たとえば、QA環境やステージング環境、本番環境があるとします。Terraformのworkspaceサブコマンドを使うと、TFStateを切り替えられます。これはHashiCorpが推奨する方法ですが、必ずしもそのとおりにする必要はありません。

Gitリポジトリ内のフォルダで整理する

別の方法として、ワークスペースを使わずにフォルダで分け、stateファイルを分割することもできます。Gitリポジトリにフォルダを作成し、stagingやproductionのように名前を付け、それぞれのフォルダから異なるTFStateファイルを生成するだけです。とても簡単で、環境を「TFState単位」で分割できます。

モジュール:Terraform環境を管理する一般的な方法

モジュールの使用は、今や標準的な方法になりつつあります。少し高度な方法ですが、モジュールは基本的に、文字列などの変数を渡して動作します。Terraformの非常に便利な機能です。

モジュールには汎用的なコードが含まれます。標準的なVPCを例に考えてみましょう。このVPCには、サブネットワークや名前など、複数の値を指定できます。環境ごとにフォルダを1つずつ作成する方法があります。最初のTerraformファイルではステージングVPCのアドレス空間を指定し、もう一方のファイルでは別のアドレス空間を指定します。つまり、モジュールに異なる値を渡すだけで、この問題を解決できます。

環境を使う方法として、私がおすすめするのは以上です。

まずは単一のTFStateでシンプルに始め、フォルダを作成してフォルダごとにstateを分割し、モジュールに異なる種類の値を渡すか、ワークスペースを使うなどHashiCorpの推奨する方法に従いましょう。

リソースを整理し、ディレクトリ構成を決める

最後に検討すべきなのは、リソースの整理方法とディレクトリ構成です。リポジトリは1つにしますか?それとも複数に分けますか?

答えは1つではありませんが、よくある構成として、モジュールを別に管理し、単一のリポジトリから呼び出す方法があります。例を見てみましょう。2つの変数からVPCを適切に設定するモジュールがあるとします。これは適切なTerraformコードです。このコードを独立したTerraform用のGitリポジトリに保存し、他のプロジェクトと同じように管理、バージョン管理、リリースできます。ただし、そのままでは使えません。エンジニアリングで標準ライブラリを使うのと同じように、このモジュールを呼び出すインフラ用リポジトリが必要です。

フォルダ階層も重要だと考える人もいます。テスト用、モジュール用、環境用にそれぞれフォルダを分ける構成はよく見られます。

もう1つよくあるパターンは、さまざまな値をまとめた変数ファイルを使い、環境変数を通じて実行時に各環境へ値を渡す方法です。

Terraformコードを保護する

Snyk IaCは、Terraformの設定(Kubernetes、CloudFormation、ARMテンプレートも対象)をコーディング中に保護し、ガイド付きの修正を提案するので、安心してマージし、次の作業に進めます。コードを書きながらテストできるほか、Gitリポジトリの変更を監視し、デプロイ前にビルドパイプラインでテストを自動化できます。無料プランなら数分で利用を開始できます。一方、IaCの設定ミスによる侵害は、長期にわたる深刻な被害を招くおそれがあります。以下から登録して、設定の保護を始めましょう。

ソースコードの段階からインフラを保護

Snykはワークフロー内のIaCセキュリティとコンプライアンスを自動化し、構成ドリフトや不足しているリソースを検出します。

続きを読む

feature insights context
Blog

自律型攻撃はすでに始まっている。防御もそのスピードに追いつかなければならない。

自律型攻撃者によって、防御に使える時間は短くなっています。継続的な検出、修復、検証、予防で、セキュリティチームが攻撃に歩調を合わせる方法をご紹介します。

Blog

Evo ADSのエージェント動作ガバナンスが一般提供開始:MCPの利用を管理

Evo ADSのエージェント動作ガバナンスが、MCPガバナンスから一般提供を開始しました。主要なAIコーディングエージェント全体で、MCPサーバーの利用を検出、承認、監視、記録、ブロックできます。

illustration hero ai
Blog

Agentic AppSecとは?

Agentic AppSecが、根拠に基づき、範囲を限定され、独立して検証されるAIエージェントを活用して、アプリケーションセキュリティの一連のプロセスを実行する方法をご紹介します。