1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS MCPサーバーでIaCを作成

Last updated at Posted at 2025-10-21

筆者の環境

  • OS:macOS
  • チップ:m2
  • VSCode + Cline

※ セキュリティのため、本記事のコード例ではすべて汎用的な例示名を使用しています
※ 実際の環境では、適切なバケット名やスタック名に置き換えてください

AWS MCP Serversについて

AWS MCP Serversは、MCP規格でAWSドキュメントやAPI、運用ワークフローをAIに提供する軽量サーバ群である。
AWS最新ドキュメントの取り込みによる出力精度向上、ハルシネーション抑制、ワークフロー自動化(CDK/Terraform/Serverless等)、専門性の高い技術知識の補完のために使用する。

以下公式サイトを参照
https://awslabs.github.io/mcp/

インストール手順

※本項では、Mac/Linux環境の手順を紹介する
1.Astral 提供の uv をインストールする

# curlでAstralの公式インストーラを取得し、そのままshに渡す
curl -LsSf https://astral.sh/uv/install.sh | sh

# uvのデフォルトインストールをPATHの先頭に追加
export PATH="$HOME/.local/bin:$PATH"

2.uvでPythonをインストールする

# Python 3.13 の取得
uv python install 3.13
# プロジェクト用の仮想環境を 3.13 で作成
uv venv --python 3.13 .venv
# 有効化
source .venv/bin/activate
# バージョン確認
python -V 

3.必要なサービスにアクセスできるように AWS の認証情報を設定する

# AWS CLI v2をインストールする
brew install awscli
# プロファイルを作成する
aws configure --profile mcp

4.MCPクライアント(Cline)の設定にそのサーバーを追加する

{
  "mcpServers": {
    "awslabs.aws-api-mcp-server": {
      "disabled": false,
      "timeout": 60,
      "type": "stdio",
      "command": "uvx",
      "args": [
        "awslabs.aws-api-mcp-server@latest"
      ],
      "env": {
        "AWS_PROFILE": "mcp",
        "AWS_REGION": "ap-northeast-1"
      }
    },
    "awslabs.aws-documentation-mcp-server": {
      "disabled": false,
      "timeout": 60,
      "type": "stdio",
      "command": "uvx",
      "args": [
        "awslabs.aws-documentation-mcp-server@latest"
      ]
    }
  }
}

上記の設定により、以下のMCPサーバーを利用できるようになった

  • AWS API MCP Server
    • AWS CLI経由でAWSリソース操作
  • AWS Documentation MCP Server
    • ドキュメント、ブログ記事、新着情報、Well-Architectedのベストプラクティスなど、AWSナレッジをLLM互換の形式で提供

AWS MCPを使用して既存リソースのIaC

今回、お試しとして、すでに作られているAWSリソース(S3)をCloudFormationに逆引きし、CloudFormationで同じリソースを作成してみる。

0. 準備作業
以下の設定で、MCPサーバー設定を行う

{
  "mcpServers": {
    "awslabs.aws-api-mcp-server": {
      "disabled": false,
      "timeout": 60,
      "type": "stdio",
      "command": "uvx",
      "args": [
        "awslabs.aws-api-mcp-server@latest"
      ],
      "env": {
        "AWS_PROFILE": "mcp",
        "AWS_REGION": "ap-northeast-1"
      }
    },
    "awslabs.aws-cloud-control-api-mcp-server": {
      "disabled": false,
      "timeout": 60,
      "type": "stdio",
      "command": "uvx",
      "args": [
        "awslabs.ccapi-mcp-server@latest", 
        "--readonly"
      ],
      "env": {
        "AWS_PROFILE": "aws-profile",
        "AWS_REGION": "ap-northeast-1"
      }
    },
    "awslabs.aws-documentation-mcp-server": {
      "disabled": false,
      "timeout": 60,
      "type": "stdio",
      "command": "uvx",
      "args": [
        "awslabs.aws-documentation-mcp-server@latest"
      ]
    }
  }
}

1. Clineに「arn:aws:s3:::bucket-nameの情報を取得して、CloudFormation(yamlファイル)を作成してください」と指示

Clineは以下のタスク計画を作成し、順次実行

- [x] 要件の整理(対象ARNからS3バケット情報を取得し、CloudFormation YAMLを生成)
- [x] AWS認証情報とアカウント/リージョンの確認
- [x] 対象S3バケットのリージョン特定(ap-northeast-1)
- [x] 既存リソースからCloudFormationテンプレート生成(IaC Generator)
- [x] YAMLファイルとしてローカルディレクトリに保存
- [x] 生成物の要点説明(バージョニング/暗号化/公開設定など)

生成されたtemplate.yaml

Metadata:
  AWSToolsMetrics:
    IaC_Generator: "arn:aws:cloudformation:ap-northeast-1:123456789012:generatedTemplate/xxxxx-xxxxx-xxxxx-xxxxx"
Resources:
  S3Bucket:
    UpdateReplacePolicy: "Retain"
    Type: "AWS::S3::Bucket"
    DeletionPolicy: "Retain"
    Properties:
      PublicAccessBlockConfiguration:
        RestrictPublicBuckets: true
        IgnorePublicAcls: true
        BlockPublicPolicy: true
        BlockPublicAcls: true
      BucketName: "bucket-name"
      OwnershipControls:
        Rules:
        - ObjectOwnership: "BucketOwnerEnforced"
      BucketEncryption:
        ServerSideEncryptionConfiguration:
        - BucketKeyEnabled: true
          ServerSideEncryptionByDefault:
            SSEAlgorithm: "AES256"

2.CloudFormationへのデプロイ

  • スタックを作成
aws cloudformation create-stack \
  --stack-name s3-stack \
  --template-body file://template.yaml \
  --capabilities CAPABILITY_NAMED_IAM

→問題なくリソースは作成できた

  • 次に変更セットを作成
aws cloudformation create-change-set \  
  --stack-name s3-stack \
  --change-set-name s3-changeset \
  --template-body file://template.yaml \
  --capabilities CAPABILITY_NAMED_IAM
  • 変更セットを実施
aws cloudformation execute-change-set \ 
  --stack-name s3-stack \
  --change-set-name s3-changeset   

→変更なしのまま実施したので期待通りエラーが発生

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?