MCPサーバーは、生成AIを利用するアプリケーションに対して、外部システムの機能やデータを扱う窓口を提供するサーバーです。AWSのEC2で公開するには、アプリケーションを起動するだけでなく、ネットワーク、アクセス制御、HTTPS、常駐化、監視を一続きで設計する必要があります。
この記事では、既存のMCPサーバー実装をEC2へ配置する流れを説明します。MCPの仕組みから確認したい場合は、先にMCPサーバーの仕組みと導入手順を参照してください。
作業を始める前の確認
この手順は、特定の製品名や公開リポジトリに依存しません。配置するMCPサーバーのソースコードと、開発環境で確認済みの起動方法を用意してからAWS側を構築します。
- AWSアカウントへログインできること
- SSHを実行できる端末があること
- MCPサーバーのリポジトリURL、必要なランタイム、起動コマンドを確認していること
- 公開時に使用するポートと接続元を決めていること
- 独自ドメインを使う場合は、DNSとSSL証明書の準備方針を決めていること
リポジトリ名や起動ファイル名は実装ごとに異なります。未確認のURLやコマンドをそのまま実行せず、利用するプロジェクトのREADMEと設定例を基準にしてください。
AWS上の基本構成
単一のEC2インスタンスで小さく始める場合は、次の要素を組み合わせます。
| 要素 | 役割 | 確認する点 |
|---|---|---|
| VPC | AWS上で使用する仮想ネットワーク | ほかのネットワークと重複しないCIDRを選ぶ |
| パブリックサブネット | EC2インスタンスを配置する区画 | インターネットゲートウェイへの経路を持たせる |
| インターネットゲートウェイ | VPCとインターネットを接続する | VPCへのアタッチとルート設定を確認する |
| セキュリティグループ | EC2への通信をポートと接続元で制限する | 管理用と公開用の通信を分ける |
| EC2 | MCPサーバーを実行する仮想サーバー | OS、処理能力、ストレージを実装に合わせる |
| ドメインとSSL証明書 | HTTPSで接続するための入口 | アプリケーションのポートを直接公開しない構成を検討する |
EC2そのものの選び方を詳しく確認する場合は、Amazon EC2の仮想サーバー設計も参考になります。
VPCとパブリックサブネットを作成する
- AWSマネジメントコンソールでVPCの画面を開き、VPCを作成します。この記事では名前を
mcp-vpc、IPv4 CIDRを10.0.0.0/16とします。 - VPC内にパブリックサブネットを作成します。例として名前を
mcp-public-subnet、IPv4 CIDRを10.0.1.0/24とします。 - インターネットゲートウェイを作成し、
mcp-vpcへアタッチします。 - サブネット用のルートテーブルを作成し、送信先
0.0.0.0/0のターゲットをインターネットゲートウェイに設定します。 - 作成したルートテーブルを
mcp-public-subnetへ関連付けます。 - EC2にパブリックIPv4アドレスを割り当てる方針を決めます。固定した接続先が必要なら、Elastic IPの利用も検討します。
サブネットへEC2を置くだけでは、外部と通信できません。インターネットゲートウェイ、ルートテーブル、EC2のパブリックIPという三つの設定をまとめて確認します。
セキュリティグループで通信を絞る
セキュリティグループは、EC2に届く通信を制御する仮想ファイアウォールです。必要なポートだけを、必要な接続元へ許可します。
| 用途 | ポート例 | 接続元 |
|---|---|---|
| SSH管理 | 22 | 管理者の固定IPまたは必要な範囲だけ |
| HTTP | 80 | HTTPSへの転送に使う場合だけ公開範囲を設定 |
| HTTPS | 443 | 公開サービスなら利用者の範囲に合わせる |
| MCPアプリケーション | 実装で設定したポート | 前段のWebサーバーなど、通信が必要な接続元だけ |
ポート5000などは単なる設定例であり、すべてのMCPサーバーが同じポートを使うわけではありません。アプリケーションの待受ポートを確認し、インターネット全体へ直接開放する必要があるかを判断します。
EC2インスタンスを起動する
- EC2の画面で「インスタンスを起動」を選びます。
- 利用時点でサポートされているAmazon Linux系のAMIを選びます。
- インスタンスタイプは、MCPサーバーのメモリ使用量と処理量に合わせて選びます。無料利用枠の対象は時期やアカウント条件で変わるため、起動画面の表示を確認してください。
- ネットワークに
mcp-vpc、サブネットにmcp-public-subnetを指定します。 - パブリックIPv4アドレスを使う構成なら、自動割り当てを有効にします。
- 作成したセキュリティグループを関連付けます。
- キーペアを作成して秘密鍵を安全な場所に保存し、アクセス権を必要な利用者だけに限定します。
- 設定内容を見直してインスタンスを起動します。
MCPサーバーを配置する
EC2へ接続する
Amazon Linux系のAMIでec2-userを使う場合のSSH接続例は次のとおりです。ユーザー名は選んだOSに合わせて確認します。
ssh -i "ダウンロードしたキーペア.pem" ec2-user@<パブリックIP>
実行環境とソースコードを準備する
- OSの更新を適用し、MCPサーバーが必要とするGit、Node.js、Pythonなどのランタイムを準備します。必要な種類とバージョンは、使用するリポジトリのREADMEで確認します。
- 出所と内容を確認したリポジトリをクローンします。
git clone <確認済みのリポジトリURL>
cd <リポジトリ名>
- READMEに従って依存パッケージを導入します。
- 接続先や認証情報などを設定します。秘密情報はソースコードへ直接書かず、利用する実装が指定する安全な設定方法で管理します。
- 実装で定義された起動コマンドを実行し、まずEC2内部から正常に応答することを確認します。
node index.jsのような固定コマンドは、対象リポジトリにそのファイルと起動方法が定義されている場合にだけ使えます。ファイル構成を確認せずに実行すると、起動できないか、意図しない設定で動作する原因になります。
外部接続を確認する
- サーバープロセスがエラーなく起動すること
- EC2内部からアプリケーションへ接続できること
- 許可した接続元からHTTPSで到達できること
- 許可していないポートや接続元からは到達できないこと
- 再起動後も所定の方法でサーバーを起動できること
接続できない場合は、アプリケーションの待受アドレスとポート、EC2上のプロセス、セキュリティグループ、サブネットのルートを順に確認します。一度に設定を変えると原因を特定しにくいため、一項目ずつ切り分けます。
Dockerを使う場合の考え方
リポジトリにDockerfileやCompose設定が用意されている場合は、MCPサーバーをコンテナとして実行できます。アプリケーションと依存関係をまとめやすい一方で、ポートの割り当て、設定値の受け渡し、ログの保存先、再起動方法をコンテナ側でも決める必要があります。
既存のDocker設定がない場合は、ファイル名だけを用意しても動きません。Dockerを採用する前に、venvとDockerの違いと使い分けを確認し、実行環境をどこまで分離したいかを整理すると判断しやすくなります。
公開後の運用チェックリスト
- 独自ドメインとSSL証明書を設定し、通信をHTTPSにする
- アプリケーションのポートを必要以上に公開しない
- サーバー停止時に再起動できる実行方法を用意する
- アプリケーションログとOSログの保存先を決める
- CloudWatchなどで稼働状況を確認できるようにする
- OSと依存パッケージの更新手順を決める
- 不要になったElastic IP、EC2、ストレージなどを確認する
構築手順の振り返り
MCPサーバーをEC2で公開する流れは、VPCとサブネットの準備、セキュリティグループの制限、EC2の起動、確認済みリポジトリの配置、HTTPSと監視の設定に分けられます。
まずは接続元を限定した小さな構成で動作を確認し、公開範囲を広げる前に認証、ログ、再起動、更新の方法を固めてください。特定のリポジトリ名や起動コマンドを決め打ちせず、実際に採用するMCPサーバーのREADMEと設定を照合することが、手戻りを減らします。
