Terraform MCP Server を使ってみよう!
想定読者
- Terraformを利用している方
- もうちょっとTerraform Codeの生成精度あげられないかなあと思っている方。
-
terraform-mcp-server
にちょっと興味がある方。
Terraform MCP Server とは?
Terraform MCP Serverは、Terraform Registryにある情報にある情報をLLMツールに渡して、より精度高くTerraformのコードを生成できるようにするためのツールです。
これ自体はDockerコンテナで動作し、各種MCP Clientに対して情報を渡します。
Terraform MCP Serverは、以下のツール群からなり、それぞれ異なる情報をTerraform Registryからとってくることができます。
-
resolveProviderDocID
: プロバイダードキュメントリスト等の取得。 -
getProviderDocs
:resource
,data source
などの具体的なドキュメントの内容を取得。 -
searchModules
: 指定されたクエリに基づいてTerraform Moduleのリストを取得。 -
moduleDetails
:inputs
,outputs
, などなど、Terraform Moduleの詳細情報を取得。
さっそく使ってみましょう!
Terraform MCP Server お試し
VS CodeのCopilotにterraform-mcp-serverからの情報を渡して、terraformのコードをよりいい感じに生成できるようになるかどうか見てみます。
0. 事前準備
0-1. Docker
前述の通り、Terraform MCP Serverを動かすためにはDockerが必要なので、まだであればインストールしておきます。
0-2. VS Code
また、ここではVS CodeのCopilotからTerraform MCP Serverに触るので、VS Codeもインストールしておきます。
1. Setup
VS CodeでMCP Supportを有効にします。
VS Code側でMCPを使う準備ができたので、次に terraform-mcp-server の情報を VS Code に入れていきます。
MCP serverを追加する場所はいくつかありますが、ここでは VS Code の Workspace に追加します。
{
"servers": {
"terraform-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"hashicorp/terraform-mcp-server:0.1.0"
]
}
}
}
2. Run
まずは terraform-mcp-server
を使わずに、適当に一個リソースを作ってみます。
Google Cloud Providerが執筆時点で二日前にアップデートされているようです。👀
新しいData SourceやResourceが追加されていますね。
雑な振りを。
最新のGoogle Cloudプロバイダーを使って、google_bigquery_datasets, google_dataplex_entryを作ってください。
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 5.0"
}
}
required_version = ">= 1.3.0"
}
provider "google" {
project = var.project_id
region = var.region
}
resource "google_bigquery_dataset" "example" {
dataset_id = "example_dataset"
location = var.region
description = "Example BigQuery dataset"
delete_contents_on_destroy = true
}
resource "google_dataplex_entry" "example" {
entry_id = "example-entry"
lake = var.dataplex_lake_id
zone = var.dataplex_zone_id
project = var.project_id
location = var.region
type = "TABLE"
display_name = "Example Entry"
description = "Dataplex entry for BigQuery dataset"
asset = "//bigquery.googleapis.com/projects/${var.project_id}/datasets/${google_bigquery_dataset.example.dataset_id}"
}
variable "project_id" {
description = "GCPプロジェクトID"
type = string
}
variable "region" {
description = "GCPリージョン"
type = string
default = "asia-northeast1"
}
variable "dataplex_lake_id" {
description = "DataplexレイクID"
type = string
}
variable "dataplex_zone_id" {
description = "DataplexゾーンID"
type = string
}
なるほど? 🧐
次に、MCP Serverを有効にして同じクエリを投げてみます。
[コンテキストの追加] > [ツール] から、先ほど追加したツール群を追加します。
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 6.38.0"
}
}
required_version = ">= 1.3.0"
}
provider "google" {
project = var.project_id
region = var.region
}
resource "google_bigquery_dataset" "example" {
dataset_id = "example_dataset"
location = var.region
description = "Example BigQuery dataset"
delete_contents_on_destroy = true
}
resource "google_dataplex_entry" "example" {
entry_id = "example_entry"
lake = var.dataplex_lake_id
zone = var.dataplex_zone_id
project = var.project_id
location = var.region
type = "TABLE"
display_name = "Example Dataplex Entry"
description = "Dataplex entry for BigQuery dataset"
asset = "//bigquery.googleapis.com/projects/${var.project_id}/datasets/${google_bigquery_dataset.example.dataset_id}"
}
variable "project_id" {
description = "GCPプロジェクトID"
type = string
}
variable "region" {
description = "GCPリージョン"
type = string
default = "asia-northeast1"
}
variable "dataplex_lake_id" {
description = "DataplexレイクID"
type = string
}
variable "dataplex_zone_id" {
description = "DataplexゾーンID"
type = string
}
なるほど。🤔
まとめ。
どちらも完璧ではないものの、Terraform MCP Server を利用することで Copilot が Terraform Registry の内容を参照できるようになり、より精度の高いTerraformコードを生成できるようになっていますね。
そもそも Google Cloud Provider 5.台では google_dataplex_entry
resource は利用できませんし。
この程度のコード量であればterraform-mcp-server
を使っても使わなくてもまあそれほど差分はないかもしれませんが、もっと大規模に利用する際には Terraform Registry の内容を参照できることの効果をより実感できることと思います。
Discussion