for Startups Tech Blog

フォースタ社員のエンジニアたちが思い思いのことを書き綴ります。

AWS Terraform MCP Server使ってみた

記事タイトル

目次

  1. はじめに
  2. AWS Terraform MCP Serverとは
  3. 機能
  4. 事前準備
  5. 導入方法
  6. 使ってみた
  7. コードの生成
  8. 終わりに

1. はじめに

こんにちは。フォースタートアップス株式会社でエンジニアをしている田畑です。 最近Terraformを使うことが増えてきたのですが、同じタイミングでMCPサーバーも注目されているのを見かけました。 せっかくなので両方触ってみたいなと思って調べていたら「Terraform MCP」というのを発見しました。

今回はその中でも AWS Terraform MCP Server を実際に試してみたので、感想や導入の流れをまとめてみます。 Terraformに興味がある方や、AWS Terraform MCPが気になっていた方にとって、少しでも参考になれば嬉しいです。

2. AWS Terraform MCP Serverとは

AWS Terraform MCP Serverとは、AWS向けTerraformのベストプラクティスに沿ったコード生成や静的解析を行ってくれるMCPサーバーです。これにより、安全性と信頼性を意識したTerraformコードを簡単に書けるようになります。

参考:AWS Terraform MCP Server

3. 機能

Terraformのベストプラクティス
  • Terraformの設定について、AWSが推奨する最適な設計方法を確認したり、安全性や規制順守の観点から注意すべきポイントを把握することができます。

AWSアーキテクチャを構成する際の、セキュリティやコンプライアンスの推奨事項を考慮したベストプラクティスに則った設計であるかをチェックするのに役に立ちます。

参考:AWS上でアプリケーションを構築するためのTerraformの具体的なアドバイス(ベストプラクティス)を使用

セキュリティファースト開発ワークフロー
  • 生成したTerraformコードに対して、自動で静的解析を行い、脆弱性やセキュリティリスクを検出

こちらはAWS Terraform MCPの機能を使用する上で、常に適用される仕組みです。 そのため、AWS Terraform MCP Serverを使えば、どのワークフローでコードを生成しても安全性が担保され、安心してインフラ構築を進められます。

checkov統合

checkovは、Terraformなどで書かれたインフラの設計図(コード)にセキュリティ上の問題や設定ミスがないかを自動でチェックしてくれる静的解析ツールです。

ここでいう「統合」とは、AWS Terraform MCP Serverの機能としてcheckovを組み込み、MCPを通じて直接セキュリティチェックを実行できるようになっていることを指します。これにより、わざわざ別途checkovをセットアップすることなく、Terraformコードの安全性をすぐに確認できるようになります。

  • 脆弱性のある設定を自動で検出
  • 具体的な修正方法も提示

参考:checkov

Terraformレジストリモジュール分析
  • 入力変数、出力変数、README コンテンツを抽出
  • モジュールの使用方法と構成オプション、モジュール構造と依存関係を分析

こちらを使えば、モジュールの使い方や構成オプションを一目で把握できます。事前調査の手間が省けて、導入やレビューがスムーズになります。

その他の機能

  • AWS プロバイダードキュメント
  • AWS-IA GenAI モジュール
  • Terraform ワークフロー実行
  • Terragrunt ワークフロー実行

4. 事前準備

導入するにあたり、以下が必要になります。
以下は公式ドキュメントからの引用です。

-AstralまたはGitHub READMEからuvをインストール
- uv python install 3.10Pythonをインストール
- ワークフロー実行用にTerraform CLIをインストール
- セキュリティスキャン用にCheckovをインストール

(出典:AWS Labs Terraform MCP Server ドキュメント

参考までに、私の環境は以下のとおりです。

  • uv 0.8.19
  • Python 3.13
  • terraform 1.13.3
  • checkov 3.2.471

5. 導入方法

VS Codeの場合、公式ドキュメントのInstallationページにある「Install on VS Code」をクリックすることで、簡単に導入できます。 VSCodeにMCPをインストールする方法 参考:Installation

VS Codeに手動で導入する場合は、macOSでは ~/Library/Application Support/Code/User/mcp.json ファイルに以下を記述します。

{
  "servers": {
    "awslabs.terraform-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.terraform-mcp-server@latest"],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

Visual Studio CodeにおけるMCPの設定方法としては、Dockerコンテナを利用する方法や、.vscode/mcp.jsonに設定する方法などがあります。

参考:Add an MCP server

6. 使ってみた

検証環境

checkov統合

始めに、checkov統合の機能を試してみたいと思います。 改めてcheckovとは、クラウドの設定ミスや脆弱性をビルド時に検出し、インフラストラクチャコード、コンテナイメージ、オープンソースパッケージの問題を事前に防ぐオープンソースの静的解析ツールです。

checkovに定義されたルール(例: CKV_AWS_53)に照らし合わせてスキャンすることで、コンプライアンスのチェックや脆弱性の検出を行うことができます。

S3バケットを作成するサンプルコードに対して検証しました。

resource "aws_s3_bucket" "sample_bucket" {
  bucket = "sample-bucket"
}

# パブリックアクセスブロックなし
# バケット暗号化なし
resource "aws_s3_bucket_public_access_block" "sample_bucket_public_access_block" {
  bucket = aws_s3_bucket.sample_bucket.id
  block_public_acls       = false
  block_public_policy     = false
  ignore_public_acls      = false
  restrict_public_buckets = false
}

AWS Terraform MCP Serverを用いて、checkovスキャンを行ってください。」 出力結果

出力結果に、S3バケットでパブリックACLのブロックが有効になっていることを確認してください。とある通り、想定していたパブリックアクセスブロックや暗号化が設定されていないことを指摘してくれました。

次にEC2のセキュリティグループを作成するサンプルコードに対して検証しました。

# EC2インスタンス - セキュリティグループの問題
resource "aws_security_group" "vulnerable_sg" {
  name_prefix = "vulnerable-sg"
  description = "Vulnerable security group for testing"

  # 全てのIPからSSHアクセス許可
  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # 全てのIPからHTTPアクセス許可
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # 全てのポートへのアウトバウンド許可
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

AWS Terraform MCP Serverを用いて、checkovスキャンを行ってください。」 出力結果 こちらも、想定していたセキュリティリスクを指摘してくれました。 セキュリティグループがEC2インスタンスに関連付けられていないことや、descriptionがないことまでも検出してくれています。

こちらの機能を使ってみた所感としては、特にTerraformを始めたばかりの方におすすめだと感じました。
私自身もTerraformを使い始めた頃、S3のパブリックアクセスを無効にする重要性が理解できなかったり、EC2のセキュリティグループの設定が不十分だったりして、脆弱性のあるアーキテクチャを組んでしまった経験があります。
そのような場合でも、コミットごとやリソース作成後にCheckovスキャンを行うことで、セキュリティを意識した開発が実践できるようになると思います。

Terraformレジストリモジュール分析

次に、Terraformレジストリモジュール分析の機能を使ってみたいと思います。 この機能では、利用したいモジュールのURLや識別子を指定するだけで、その使い方や必要な設定(入出力変数)、内部構造までを瞬時に分析してくれます。

「Terraform レジストリからS3モジュールの使い方を教えてください」

出力結果 出力結果 出力結果

コードを出力する前に、内部ではセキュリティやベストプラクティスに沿った回答をするようなワークフローがあるみたいですね。

ステップ1: Terraform開発ワークフローの確認
.
.
ステップ2: AWSベストプラクティスの確認
.
.
ステップ3: モジュールの基本構造

基本的な使用方法、入力変数や参考ソースなどセキュリティの観点やベストプラクティスに沿った雛形コードを生成してくれるため、モジュール利用の最初の一歩として非常に便利だと感じました。

また、プロジェクトに導入したり、モジュール戦略に移行する際も、この機能を使えばモジュールの使い方が分からなくてもスムーズに開発を進められると思いました。雛形コードや入力例を参考にしながら実装できるので、効率よくベストプラクティスに沿った開発ができます。

7. コードの生成

最後に、コードの生成を任せると、どこまでやってくれるのか気になったので試してみました。

AWS Terraform MCPを使用し、S3バケットを作成してください」 出力結果

シンプルに、s3バケットのみを提案してくれました。関連する設定やセキュリティを意識したコードを提案してくれると思っていたので、正直物足りなさを感じました。

またここで使われているawscc は、AWS Cloud Control APIを利用する公式のTerraform プロバイダーで、最新のリソース定義に対応しています。 そのため今回の例では、awscc_s3_bucketを使った最新の書き方でS3 バケットを生成してくれていました。 ただ、こちらは比較的新しいプロバイダーのようで、まだ未対応のリソースも多く、現時点では使いこなすのが難しい印象でした。

参考:

AWS Terraform MCPを使用せず、S3バケットを作成してください」 出力結果 こちらはバージョニングやパブリックアクセス設定など柔軟に提案してくれました。 AWS Terraform MCPを使った場合も、これくらい包括的なコードを提案してほしかった、というのが正直な感想です。

8. 終わりに

いかがでしたでしょうか。

使ってみた所感としては、コミット前やプッシュ前に静的解析やベストプラクティスを確認し、コードやアーキテクチャをブラッシュアップする用途で特に力を発揮するのではと感じました。

コード生成の機能については、一度に必要なコードを全て揃えてくれるというよりは、ドキュメントを参照しながら、まずは最小限のリソースを提案してくれるという印象でした。そのため開発速度の向上というよりも、信頼性のあるコードを生成するための補助ツールとして活用するのが効果的だと思います。