筆者の環境
- 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
→変更なしのまま実施したので期待通りエラーが発生