kakakakakku blog

Weekly Tech Blog: Keep on Learning!

AWS Diagram MCP Server: Terraform コードからアーキテクチャ図を生成しよう

AWS Diagram MCP Server を使うと Diagrams を使ってアーキテクチャ図を生成できる🎨

今回は VS Code + Cline を使う(セットアップなどは割愛).

github.com

Terraform コードからアーキテクチャ図を生成しよう

Zenn Book「LocalStack 実践入門 | AWS x Terraform 入門ワークショップ」に載せているアーキテクチャ図はすべて Diagrams を使っている👌 AWS Diagram MCP Server を使って Terraform コードからアーキテクチャ図を生成して比較してみようと思う \( 'ω')/

zenn.dev

👾 chapter05/main.tf

お手本(僕が作ったアーキテクチャ図)

LocalStack 実践入門 Chapter.5 から引用

chapter05/main.tf

resource "aws_s3_bucket" "chapter05" {
  bucket = "chapter05-bucket"
}

resource "aws_s3_bucket_notification" "chapter05" {
  bucket = aws_s3_bucket.chapter05.id

  lambda_function {
    lambda_function_arn = aws_lambda_function.chapter05.arn
    events              = ["s3:ObjectCreated:*"]
  }
}

data "aws_iam_policy_document" "assume_role" {
  statement {
    effect = "Allow"

    principals {
      type        = "Service"
      identifiers = ["lambda.amazonaws.com"]
    }

    actions = ["sts:AssumeRole"]
  }
}

resource "aws_iam_role" "lambda_execution_role" {
  name               = "chapter05-role"
  assume_role_policy = data.aws_iam_policy_document.assume_role.json
}

data "archive_file" "chapter05" {
  type        = "zip"
  source_dir  = "${path.module}/function/src"
  output_path = "${path.module}/function/dist/chapter05.zip"
}

resource "aws_lambda_function" "chapter05" {
  function_name    = "chapter05-function"
  handler          = "app.lambda_handler"
  runtime          = "python3.12"
  role             = aws_iam_role.lambda_execution_role.arn
  filename         = "${path.module}/function/dist/chapter05.zip"
  source_code_hash = data.archive_file.chapter05.output_base64sha256
}

resource "aws_lambda_permission" "chapter05" {
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.chapter05.arn
  principal     = "s3.amazonaws.com"
  source_arn    = aws_s3_bucket.chapter05.arn
}

初期プロンプト

chapter05/main.tf を参考にアーキテクチャ図を作成して!

Cline 実行(Plan → Act)1回目

  • API Provider: VS Code LM API
  • Language Model: copilot - claude-3.5-sonnet

Terraform コードからアーキテクチャ図を生成できた❗️

AWS Diagram MCP Server で生成したアーキテクチャ図(1回目)

Cline 実行(Plan → Act)2回目

リソース間の関係性として間違ってはいないけど,個人的に AWS Lambda 関数と IAM Role は矢印ではなく線で表現したく,位置関係も AWS Lambda 関数の右側にあるとイイな〜と思ってプロンプトを拡張して再実行する.

chapter05/main.tf を参考にアーキテクチャ図を作成して!
AWS Lambda 関数と IAM Role は矢印ではなく線にしましょう(Diagrams では `-` で表現できるよ)
IAM Role は AWS Lambda 関数の右側に配置しましょう

すると期待通りにアーキテクチャ図を改善できた❗️s3:ObjectCreated:* というトリガー条件も記載されていて,お手本(僕が作ったアーキテクチャ図)よりもイイ感じに見える👌 AWS S3 という表現は Amazon S3 に直したいけど〜w

AWS Diagram MCP Server で生成したアーキテクチャ図(2回目)

まとめ

AWS Diagram MCP Server を使って Terraform コードからアーキテクチャ図を生成できた👌

AWS Diagram MCP Server を使って AWS SAM テンプレートからアーキテクチャ図を生成する記事も書いた❗️あわせて読んでもらえればと〜

kakakakakku.hatenablog.com