はじめに
今回は最近流行りのMCPを使ってみて、精度の高いインフラが簡単に作れるかも。ってお話。
AWS Documentation MCP、AWS Terraform MCPを使って、AWSのドキュメントやベストプラクティスに沿ったインフラ環境をTerraformで作ろう!って内容です。
ずっと小規模なインフラをCloudFormationで作った経験しかないので、私なりのTerraform入門です!
やってみた!
今回はClaude Codeを使い、GraphQLでシンプルなリアルタイムチャットAPIを作ってみます!
AWS Documentation MCPの設定
以下のコマンドで設定するだけです。
claude mcp add-json "awslabs-aws-documentation-mcp-server" '{"command":"uvx","args":["awslabs.aws-documentation-mcp-server@latest"],"env":{"FASTMCP_LOG_LEVEL":"ERROR","AWS_DOCUMENTATION_PARTITION":"aws"},"disabled":false,"autoApprove":[]}'
uvx
コマンドを使うので、uv
を使える環境が必要です!
AWS Terraform MCPの設定
こちらも同じ。
claude mcp add-json "awslabs-terraform-mcp-server" '{"command":"uvx","args":["awslabs.terraform-mcp-server@latest"],"env":{"FASTMCP_LOG_LEVEL":"ERROR"},"disabled":false,"autoApprove":[]}'
プロンプトして作ってみよう!
今思えばきちんとしたプロンプトでお願いすれば良かったのですが、今回は以下の簡単なプロンプトで作成依頼しました。
GraphQLでシンプルなリアルタイムチャットAPIを作成してください。
AWS Documentationを調べて、TerraformでAWSリソースを作って欲しい。
結果、こんなプランですぐにリソースを作ってもらえました。
なお、作ったソースは以下におきました。
構築
あとは簡単にデプロイするだけです。
AWSの認証情報取得にprofileを利用しているので、ここだけ追加で対応が必要でした。
# 初期化
terraform init
# プランを確認
terraform plan
# デプロイ実行
terraform apply
動作確認
メッセージの登録
mutaionでメッセージが登録できるか確認してみます!
mutation SendMessage {
sendMessage(
chatId: "your-chat-id"
username: "user1"
content: "Hello, GraphQL!"
) {
id
chatId
username
content
timestamp
}
}
大丈夫そうです!
リアルタイム受信
ApppSyncのクエリ上からsubscriptionの動作確認もしてみます。
subscription OnMessageAdded {
onMessageAdded(chatId: "your-chat-id") {
id
username
content
timestamp
}
}
subscription投入後にメッセージを登録すると、即時にコンソールに反映されました。これも問題なさそうです!
最後に
CloudFormationのyamlをclaude単体で作ってた時は存在しないプロパティを設定してたりと、ハルシネーションがあったのですが今回は特にエラーなく進めることができました。
ずっとCloudFormation派だったのですが、Terraformもいいかなと思い始めてきました!
ローカル実行など機能豊富なAWS SAMとの併用になるのかな。