kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Terraform MCP Server: AWS Provider に新しく追加されたリソースのコードを生成する

HashiCorp から公式に提供されている Terraform MCP ServerAWS Terraform MCP Server ではなく🙅‍♂️)の導入検証をする機会があった🧪試したことを簡単にまとめておこうと思う.

github.com

Terraform MCP Server

Terraform MCP Server で使えるツールは現状4種類ある.Terraform Registry から Provider と Module を検索して,ドキュメントからサンプルコードなどの詳細情報を取得できる👌特に Terraform Registry から検索するため「新しく追加された」リソースにも対応できるところがポイント❗️

  • resolveProviderDocID
  • getProviderDocs
  • searchModules
  • moduleDetails

試す

今回は AWS Documentation MCP Server と Terraform MCP Server を組み合わせて,Amazon Bedrock プロンプト管理をデプロイする Terraform コードを実装してみる😀 Amazon Bedrock プロンプト管理は2025年5月にリリースされた Terraform AWS Provider v5.98.0aws_bedrockagent_prompt リソースが追加されている💡

github.com

Step.1

今回は GitHub Copilot Agent Mode + Claude Sonnet 4 を使う.まずは以下のプロンプトを使ってAmazon Bedrock プロンプト管理とは何かを学ぶ👌

Amazon Bedrock プロンプト管理とは?

すると AWS Documentation MCP Server の search_documentationread_documentation が実行された.Amazon Bedrock プロンプト管理の概要を理解できた.ふむふむ❗️

Step.2

次に以下のプロンプトを使ってサンプルとして使えそうなプロンプトを取得する👌

Amazon Bedrock プロンプト管理のプロンプトサンプルはドキュメントにある?

するともう一度 AWS Documentation MCP Server の read_documentation が実行されて,複数のプロンプトサンプルを取得できた.今回は「音楽プレイリスト作成プロンプト」を使うことにする.念のため確認して,ちゃんとドキュメントに載っているプロンプトサンプルだった📝

docs.aws.amazon.com

Step.3

最後は以下のプロンプトを使って Terraform コードを生成する👌

では、挙げてもらった「音楽プレイリスト作成プロンプト」を Amazon Bedrock プロンプト管理にデプロイする Terraform コード bedrock.tf を生成して!

すると Terraform MCP Server の resolveProviderDocIDgetProviderDocs が実行された❗️

👾 bedrock.tf

生成された Terraform コードをそのまま貼る \( 'ω')/

ちゃんと Terraform AWS Provider v5.98.0 で新しく追加された aws_bedrockagent_prompt リソースを使ったコードになっている👏

# Amazon Bedrock プロンプト管理
# 音楽プレイリスト作成プロンプト

resource "aws_bedrockagent_prompt" "make_playlist" {
  name            = "MakePlaylist"
  description     = "音楽プレイリストを作成するプロンプト - ジャンルと曲数を指定して適切なプレイリストを生成します"
  default_variant = "DefaultVariant"

  variant {
    name          = "DefaultVariant"
    model_id      = "amazon.titan-text-express-v1"
    template_type = "TEXT"

    # 推論設定
    inference_configuration {
      text {
        max_tokens     = 2000
        temperature    = 0.8
        top_p          = 0.9
        stop_sequences = []
      }
    }

    # プロンプトテンプレート設定
    template_configuration {
      text {
        text = <<-EOT
あなたは音楽の専門家です。以下の条件に基づいて、素晴らしい音楽プレイリストを作成してください。

ジャンル: {{genre}}
曲数: {{number}}

以下の形式でプレイリストを作成してください:

# {{genre}} プレイリスト({{number}}曲)

## プレイリストの説明
[ジャンルの特徴と選曲の方針を簡潔に説明]

## 楽曲リスト
1. [アーティスト名] - [曲名]
   - [曲の特徴や選んだ理由を一言]

[以下、指定された曲数まで繰り返し]

## 追加の推奨事項
[リスニング環境やその他の推奨事項があれば記載]

注意: 実際に存在する楽曲のみを選択し、各楽曲がジャンルに適していることを確認してください。
EOT

        # プロンプト変数の定義
        input_variable {
          name = "genre"
        }

        input_variable {
          name = "number"
        }
      }
    }
  }

  tags = {
    Environment = "development"
    Purpose     = "AI-prompt-management"
    UseCase     = "music-playlist-generation"
    CreatedBy   = "terraform"
  }
}

terraform apply を実行する

エラーもなく apply も成功した👏

Terraform MCP Server を使わなかった場合

Terraform MCP Server を使わなかった場合の出力を確認するために同じプロンプトを実行してみる.

Claude Sonnet 4 だと aws_bedrock_prompt という存在しないリソースになってしまった🙅‍♂️

resource "aws_bedrock_prompt" "music_playlist_creator" {
  name        = var.prompt_name
  description = "AI-powered music playlist creation based on mood, genre, and user preferences"
(中略)

ChatGPT o4-mini-high だと Terraform AWS Provider ではなく Terraform AWS Cloud Control Provider (awscc) の awscc_bedrock_prompt を使ったコードを生成できた😀これはこれで目的は達成できている \( 'ω')/

resource "awscc_bedrock_prompt" "music_playlist" {
  name        = "music_playlist_prompt"
  description = "音楽プレイリスト作成プロンプト"
(中略)