結論:ターミナルから自然言語でAWSリソースを操作する時代が来た
AWS MCPサーバーが正式GAになった今、Claude Codeから「S3にこのCSVを加工してアップロードして」と話しかけるだけでインフラ操作が完結する世界が現実になりました。
この記事では、Claude Code + AWS MCPサーバーの接続手順から、S3・Lambda・DynamoDBの実践操作までを一気通貫で試した結果をお届けします。環境構築は5分、そこから自然言語でAWSリソースをCRUDできる体験は、インフラ管理のパラダイムシフトを感じさせるものでした。
1. AWS MCPサーバーGA化で何が変わったか
2025年7月、AWSは公式のMCP(Model Context Protocol)サーバー群を**正式GA(General Availability)**としてリリースしました。
GA化の主なポイント
| 項目 | Preview時代 | GA後 |
|---|---|---|
| サポート対象サービス | S3, Lambda等の一部 | S3, Lambda, DynamoDB, CloudWatch, CDK等を含む幅広いサービス |
| 安定性 | 破壊的変更あり | APIの後方互換性を保証 |
| 認証方式 | 環境変数ベースのみ | IAM Identity Center, プロファイル指定等に対応 |
| 本番利用 | 非推奨 | 本番ワークロードで利用可能 |
| ドキュメント | 最小限 | 公式リファレンス整備済み |
重要なのは、「実験的なおもちゃ」から「実務で使えるツール」にステージが変わったということです。GA化により、エンタープライズ環境でも採用検討の土台が整いました。
2. 環境構築:Claude Code + AWS MCP Serverの接続手順
前提条件
-
Claude Code がインストール済み(
claudeコマンドが使える状態) -
AWS CLI v2 が設定済み(
aws sts get-caller-identityが通る状態) - Node.js 18以上がインストール済み
- 操作対象のAWSアカウントに対する適切なIAM権限
ステップ1:AWS MCP Serverのインストール
Claude Codeのclaude mcp addコマンドで、MCPサーバーを登録します。
# AWS MCP Server(AWS Documentation) の追加
claude mcp add awslabs-core \
-s user \
-- npx -y @anthropic-ai/awslabs-core-mcp-server@latest
# S3操作用MCPサーバーの追加
claude mcp add awslabs-s3 \
-s user \
-- npx -y @anthropic-ai/awslabs-s3-mcp-server@latest
# Lambda操作用MCPサーバーの追加
claude mcp add awslabs-lambda \
-s user \
-- npx -y @anthropic-ai/awslabs-lambda-mcp-server@latest
# DynamoDB操作用MCPサーバーの追加
claude mcp add awslabs-dynamodb \
-s user \
-- npx -y @anthropic-ai/awslabs-dynamodb-mcp-server@latest
補足: パッケージ名やコマンド体系はGA後に変更される可能性があります。最新の手順はAWS MCP Servers 公式リポジトリをご確認ください。
ステップ2:接続確認
claude
# Claude Codeが起動したら以下を入力
> /mcp
MCPサーバーの一覧が表示され、各サーバーがconnected状態であればセットアップ完了です。
この全体フローが、ユーザーからは自然言語の会話としてシームレスに体験できるのがポイントです。
3. 実践① S3バケット操作を自然言語で行う
バケット作成とファイルアップロード
Claude Codeを起動し、以下のように話しかけます。
> ap-northeast-1リージョンに「my-mcp-demo-bucket-2025」というS3バケットを作成して。
> その後、以下のCSVデータを「users.csv」として加工・アップロードしてほしい。
> ヘッダーは name, email, department で、佐藤太郎, sato@example.com, 開発部 のように3行追加して。
Claude Codeは以下のステップを自動実行します:
-
create_bucketツールでバケットを作成 - CSV形式のデータを組み立て
-
put_objectツールでアップロード
実際のレスポンス例(要約):
バケット「my-mcp-demo-bucket-2025」をap-northeast-1に作成しました。
以下の内容でusers.csvをアップロードしました:
name,email,department
佐藤太郎,sato@example.com,開発部
鈴木花子,suzuki@example.com,営業部
田中一郎,tanaka@example.com,企画部
アップロード先: s3://my-mcp-demo-bucket-2025/users.csv
ファイルの一覧取得と内容確認
> my-mcp-demo-bucket-2025の中身を一覧表示して
> users.csvの中身を読んで、department列が「開発部」の人だけ抽出して
S3の操作が対話的に進む感覚は、AWS CLIのコマンドを覚える必要がなく非常に快適です。
4. 実践② Lambda関数のデプロイ・テストをClaude Codeから実行
関数の作成とデプロイ
> Python 3.12のLambda関数を作ってほしい。
> 関数名は「mcp-demo-hello」で、リクエストボディのJSONからnameを取り出して
> 「Hello, {name}! from MCP」と返すシンプルなものにして。
> 既存のLambda実行用IAMロール「arn:aws:iam::XXXXXXXXXXXX:role/lambda-basic-role」を使って。
Claude Codeが実行する処理:
テスト実行
> mcp-demo-hello を name=Claude でテスト実行して
レスポンス例:
Lambda関数「mcp-demo-hello」をテスト実行しました。
ステータスコード: 200
レスポンス: {"message": "Hello, Claude! from MCP"}
実行時間: 3.2ms
コードの修正と再デプロイ
> レスポンスにtimestampも追加して再デプロイして
この「修正→デプロイ→テスト」のサイクルがターミナルの会話だけで回せるのは、プロトタイピング時に非常に強力です。
5. 実践③ DynamoDBのCRUDをチャット形式で回す
テーブル作成
> DynamoDBに「mcp-demo-users」テーブルを作成して。
> パーティションキーはuserId(文字列型)で、オンデマンドキャパシティモードにして。
データの投入(Create)
> 以下の3件のユーザーデータを投入して:
> - userId: u001, name: 佐藤太郎, age: 30, department: 開発部
> - userId: u002, name: 鈴木花子, age: 25, department: 営業部
> - userId: u003, name: 田中一郎, age: 35, department: 開発部
データの読み取り(Read)
> mcp-demo-usersテーブルからdepartmentが「開発部」のユーザーを検索して
注意: DynamoDBのScan/Queryの使い分けについても、Claude Codeは文脈に応じて適切な操作を選択してくれます。ただし、大規模テーブルに対するフルスキャンなどのコスト影響がある操作については確認プロンプトが表示されます。
データの更新・削除(Update / Delete)
> u001のageを31に更新して
> u003のレコードを削除して
一連のCRUD操作がすべて自然言語の対話で完結します。SQLライクな思考のまま「〜を検索して」「〜を更新して」と指示できるのは直感的です。
6. セキュリティ注意点:IAMロールの最小権限設計とhooksによるガードレール
自然言語でインフラ操作ができるということは、意図しない操作のリスクも自然言語レベルで発生するということです。
IAMの最小権限設計
MCPサーバーが利用するIAMユーザー/ロールには、必要最小限の権限のみを付与してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-mcp-demo-bucket-2025",
"arn:aws:s3:::my-mcp-demo-bucket-2025/*"
]
},
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:Scan"
],
"Resource": "arn:aws:dynamodb:ap-northeast-1:XXXXXXXXXXXX:table/mcp-demo-*"
}
]
}
本番アカウントでの利用は特に慎重に。まずは開発/検証アカウントで試しましょう。
Claude Codeのhooksでガードレールを設置
Claude Codeのhooks機能を活用して、危険な操作の前にチェックを挟むことができます。.claude/settings.json に以下のように設定します。
{
"hooks": {
"PreToolUse": [
{
"matcher": "mcp__awslabs-s3__delete_object",
"hooks": [
{
"type": "command",
"command": "echo '⚠️ S3オブジェクト削除を検知しました。本番バケットへの操作でないか確認してください。' && exit 1"
}
]
},
{
"matcher": "mcp__awslabs-dynamodb__delete_table",
"hooks": [
{
"type": "command",
"command": "echo '🚫 テーブル削除はhooksによりブロックされました。' && exit 1"
}
]
}
]
}
}
このように設定すると、S3のオブジェクト削除やDynamoDBのテーブル削除を自動的にブロックできます。exit 1 でフックがエラーを返すと、Claude Codeはその操作を中断します。
その他のセキュリティ推奨事項
- 権限境界(Permissions Boundary) を併用し、万が一のポリシー設定ミスに備える
- AWS CloudTrail でMCP経由の操作を監査ログに記録する
- SCPやVPCエンドポイント で操作可能な範囲をネットワークレベルでも制限する
- Claude Codeの Permission Prompt は安易にYes-to-allにしない
7. まとめ:AWSインフラ管理の新しい選択肢
3つのポイント
- GA化により実務投入が現実的に:APIの安定性が保証され、サポート対象サービスも拡大。開発・検証環境での日常利用が十分に実用レベルです
- 自然言語によるAWS操作は「CLIを覚えるコスト」を劇的に下げる:特にプロトタイピングや調査・検証フェーズでは、思考の速度でインフラを触れるメリットは大きいです
- セキュリティ設計は従来以上に重要:操作の手軽さはリスクの裏返し。IAM最小権限 + hooks によるガードレールを必ずセットで導入してください
AWS MCPサーバーのGA化は、「AIエージェントがインフラを操作する」という未来の入り口です。まずは検証環境で5分のセットアップから始めてみてはいかがでしょうか。