この1週間でMCPサーバのキーワードを多く見聞きするようになったので、Windows版Claude Desktopを活用してAWS認定試験の模擬試験問題を作成するデモを実施してみた。
今回利用するMCPサーバは、filesystemとAWS Documentation MCP Serverである。
- MCPサーバの構築のための事前準備
PowerShell -ExecutionPolicy RemoteSigned npm
npm install -g @modelcontextprotocol/server-filesystem
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- Claude Desktopの設定
claude_desktop_config.jsonに定義する内容は以下のとおりである。
{
"mcpServers": {
"filesystem": {
"command": "C:\\Program Files\\nodejs\\node.exe",
"args": [
"C:\\Users\\(username)\\AppData\\Roaming\\npm\\node_modules\\@modelcontextprotocol\\server-filesystem\\dist\\index.js",
"C:\\Users\\(username)\\ClaudeTest"
]
},
"awslabs.aws-documentation-mcp-server": {
"command": "C:\\Users\\(username)\\.local\\bin\\uvx.exe",
"args": [
"--from",
"awslabs-aws-documentation-mcp-server@latest",
"awslabs.aws-documentation-mcp-server.exe"
],
"env": {
"FASTMCP_LOG_LEVEL": "ERROR"
},
"disabled": false,
"autoApprove": []
}
}
}
ドキュメントでは、argsにawslabs-aws-documentation-mcp-server@latestだけを指定することになっているが、Windows環境で実行すると以下のようなエラーが発生する。
[info] Message from client: {"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"claude-ai","version":"0.1.0"}},"jsonrpc":"2.0","id":0}
Installed 34 packages in 245ms
warning: An executable named `awslabs.aws-documentation-mcp-server` is not provided by package `awslabs-aws-documentation-mcp-server`.
[error] Unexpected token 'T', "The execut"... is not valid JSON {"context":"connection","stack":"SyntaxError: Unexpected token 'T', \"The execut\"... is not valid JSON\n at JSON.parse (<anonymous>)\n
登録が正常にできた場合には、以下のような表示になる。
【小ネタ】AWS Documentation MCP Server を使ってAWS認定試験のサンプル問題を作ってみたを参考に、以下のようなプロンプトを入力することによって、問題並びに解説がローカルのC:\Users\(username)\ClaudeTestに書き込まれることが確認できる。
AWSドキュメントの「Amazon ECSのトラブルシューティング」をベースに AWS Certified DevOps Engineer - Professional のサンプル問題を2つ作ってほしい。
- 問題文を Q01.md に保存してください
- 回答/解説を A01.md に保存してください
- A01.md には参照したドキュメントリンクを付与してください
生成された問題文
AWS Certified DevOps Engineer - Professional サンプル問題
問題1
あなたは大規模な電子商取引会社のDevOpsエンジニアとして、Amazon ECSを使用したコンテナ化されたマイクロサービスアーキテクチャを担当しています。最近、プロダクション環境のサービスで間欠的に一部のタスクが起動に失敗し、サービスのデプロイ中に障害が発生しています。Amazon ECSサービスイベントログには「CannotPullContainer」エラーが記録されており、タスクはステータス
PENDING
の後に消えています。
この問題の最も可能性の高い原因と、永続的な解決策として最も効果的な対応はどれですか?
A. タスク実行ロールに必要なIAMアクセス許可がなく、Amazon ECRからイメージをプルできない。タスク実行ロールにECRリポジトリへのアクセス許可を追加する。
B. Docker Hubのレート制限に達している。プライベートリポジトリ認証を設定して、Docker Hubのレート制限を増やす。
C. コンテナインスタンスのディスク容量が不足している。ECSエージェントログを CloudWatch Logsに送信するようにawslogsドライバーを設定して、ディスク容量を解放する。
D. プライベートサブネットにあるタスクがインターネットへの経路がないため、ECRからイメージをプルできない。プライベートサブネットにNATゲートウェイを設定し、インターネットへの経路を確立する。問題2
あなたのチームは、Amazon ECSを使用して重要なウェブアプリケーションを運用しています。アプリケーションはEC2起動タイプを使用し、複数のアベイラビリティーゾーンにあるコンテナインスタンスで実行されています。Application Load Balancer(ALB)を使用して、これらのコンテナに対するトラフィックの分散を行っています。先週の負荷テスト中に、高負荷時にアプリケーションのパフォーマンスが大幅に低下し、一部のユーザーリクエストがタイムアウトすることが判明しました。
トラブルシューティングの結果、各タスク内のコンテナが大量の同時接続を処理する必要があり、現在のネットワーク設定が制限要因になっていることがわかりました。このパフォーマンス問題に対処するための最も効果的な方法はどれですか?
A. CloudWatch Container Insightsを有効にして、CPUやメモリなどのリソース使用率を監視し、最適なスケーリング設定を決定する
B. タスク定義内のulimits
パラメータを使用して、コンテナのnofile
(オープンファイル数の上限)を増やし、より多くの同時ネットワーク接続を処理できるようにする
C. VPC Flow Logsを有効にして接続の問題を特定し、ALBのターゲットグループのヘルスチェック設定を調整する
D. ECSサービスのAuto Scalingを設定し、より多くのタスクを実行してトラフィックを分散させる
生成された回答/解説
AWS Certified DevOps Engineer - Professional サンプル問題 - 解答と解説
問題1の解答
正解: D. プライベートサブネットにあるタスクがインターネットへの経路がないため、ECRからイメージをプルできない。プライベートサブネットにNATゲートウェイを設定し、インターネットへの経路を確立する。
解説
この問題では、ECSタスクが起動できず、「CannotPullContainer」エラーが発生している状況を扱っています。このエラーは、タスクがコンテナイメージをプルできない場合に発生します。
選択肢Dが正解である理由:
- プライベートサブネットにあるECSタスクがAmazon ECRからイメージをプルするには、インターネットへのアウトバウンド接続が必要です。
- プライベートサブネットからのインターネット接続にはNATゲートウェイ(またはNATインスタンス)が必要です。
- エラーの説明「タスクがステータス
PENDING
の後に消える」はネットワーク接続の問題と一致しています。 他の選択肢が不適切である理由:- A: IAMアクセス許可の問題も「CannotPullContainer」エラーを引き起こす可能性がありますが、その場合は明確な権限エラーメッセージが表示されるはずです。また、間欠的な問題はネットワーク接続の問題を示唆しています。
- B: Docker Hubのレート制限も問題を引き起こす可能性がありますが、この場合は通常、明確な「Too Many Requests」エラーメッセージが表示されます。
- C: ディスク容量不足も「CannotPullContainer」エラーの原因になる可能性がありますが、通常は「no space left on device」のようなエラーメッセージが表示されます。 AWSドキュメントには、次のように記載されています: 「プライベートサブネットのタスクでは、タスクの起動時にAuto-assign public IPをDISABLEDに指定し、VPCにNATゲートウェイを設定してインターネットへのリクエストをルーティングします。」 ## 問題2の解答 正解: B. タスク定義内の
ulimits
パラメータを使用して、コンテナのnofile
(オープンファイル数の上限)を増やし、より多くの同時ネットワーク接続を処理できるようにする。 ### 解説 この問題では、高負荷時に同時接続数の多さが原因でパフォーマンスが低下している状況を扱っています。 選択肢Bが正解である理由:- 問題文で「各タスク内のコンテナが大量の同時接続を処理する必要があり、現在のネットワーク設定が制限要因」と述べられています。
- Linuxシステムでは、各ネットワークソケット(接続)はファイルディスクリプタとして表現されます。
nofile
ulimitはプロセスが開くことができるファイルディスクリプタの最大数を制限します。この制限が低すぎると、多数の同時接続を処理できなくなります。- タスク定義で
ulimits
パラメータを使用してnofile
の値を増やすことで、コンテナが処理できる同時接続数を増やすことができます。 他の選択肢が不適切である理由:- A: CloudWatch Container Insightsは問題の監視と診断に役立ちますが、問題自体は解決しません。問題の根本原因は既に特定されています。
- C: VPC Flow Logsは接続問題の診断に役立ちますが、問題の根本原因が既に特定されている場合は必要ありません。また、ALBのヘルスチェック設定を調整しても、コンテナ自体のネットワーク制限は解決されません。
- D: ECSサービスのAuto Scalingは全体的なスループットを向上させる可能性がありますが、各タスク内のネットワーク制限の問題は解決しません。問題は各タスクの接続制限にあります。 AWSドキュメントには、次のように記載されています: 「ファイルディスクリプタのクォータが低すぎると、ネットワークソケットが制限され、接続の失敗やエラーが発生します。Amazon ECSタスク定義でコンテナ固有のファイル数のクォータを更新できます。」 ## 参考ドキュメント
- Amazon ECS troubleshooting
- CannotPullContainer task errors in Amazon ECS
- AWS services for Amazon ECS networking troubleshooting
- Viewing Amazon ECS stopped task errors
- Amazon ECS stopped tasks error messages
Clineでは、API Provider設定がClineの場合には、英語で回答が行われるが、Claude Desktopでは日本語となるため非常に使いやすい環境が構築できることがわかる。
Top comments (0)