サイトアイコン IT & ライフハックブログ|学びと実践のためのアイデア集

MCPサーバーをAWSのEC2で構築する手順と安全な公開方法

Image of Amazon Q Developer

MCPサーバーは、生成AIを利用するアプリケーションに対して、外部システムの機能やデータを扱う窓口を提供するサーバーです。AWSのEC2で公開するには、アプリケーションを起動するだけでなく、ネットワーク、アクセス制御、HTTPS、常駐化、監視を一続きで設計する必要があります。

この記事では、既存のMCPサーバー実装をEC2へ配置する流れを説明します。MCPの仕組みから確認したい場合は、先にMCPサーバーの仕組みと導入手順を参照してください。

作業を始める前の確認

この手順は、特定の製品名や公開リポジトリに依存しません。配置するMCPサーバーのソースコードと、開発環境で確認済みの起動方法を用意してからAWS側を構築します。

リポジトリ名や起動ファイル名は実装ごとに異なります。未確認のURLやコマンドをそのまま実行せず、利用するプロジェクトのREADMEと設定例を基準にしてください。

AWS上の基本構成

単一のEC2インスタンスで小さく始める場合は、次の要素を組み合わせます。

要素 役割 確認する点
VPC AWS上で使用する仮想ネットワーク ほかのネットワークと重複しないCIDRを選ぶ
パブリックサブネット EC2インスタンスを配置する区画 インターネットゲートウェイへの経路を持たせる
インターネットゲートウェイ VPCとインターネットを接続する VPCへのアタッチとルート設定を確認する
セキュリティグループ EC2への通信をポートと接続元で制限する 管理用と公開用の通信を分ける
EC2 MCPサーバーを実行する仮想サーバー OS、処理能力、ストレージを実装に合わせる
ドメインとSSL証明書 HTTPSで接続するための入口 アプリケーションのポートを直接公開しない構成を検討する

EC2そのものの選び方を詳しく確認する場合は、Amazon EC2の仮想サーバー設計も参考になります。

VPCとパブリックサブネットを作成する

  1. AWSマネジメントコンソールでVPCの画面を開き、VPCを作成します。この記事では名前をmcp-vpc、IPv4 CIDRを10.0.0.0/16とします。
  2. VPC内にパブリックサブネットを作成します。例として名前をmcp-public-subnet、IPv4 CIDRを10.0.1.0/24とします。
  3. インターネットゲートウェイを作成し、mcp-vpcへアタッチします。
  4. サブネット用のルートテーブルを作成し、送信先0.0.0.0/0のターゲットをインターネットゲートウェイに設定します。
  5. 作成したルートテーブルをmcp-public-subnetへ関連付けます。
  6. EC2にパブリックIPv4アドレスを割り当てる方針を決めます。固定した接続先が必要なら、Elastic IPの利用も検討します。

サブネットへEC2を置くだけでは、外部と通信できません。インターネットゲートウェイ、ルートテーブル、EC2のパブリックIPという三つの設定をまとめて確認します。

セキュリティグループで通信を絞る

セキュリティグループは、EC2に届く通信を制御する仮想ファイアウォールです。必要なポートだけを、必要な接続元へ許可します。

用途 ポート例 接続元
SSH管理 22 管理者の固定IPまたは必要な範囲だけ
HTTP 80 HTTPSへの転送に使う場合だけ公開範囲を設定
HTTPS 443 公開サービスなら利用者の範囲に合わせる
MCPアプリケーション 実装で設定したポート 前段のWebサーバーなど、通信が必要な接続元だけ

ポート5000などは単なる設定例であり、すべてのMCPサーバーが同じポートを使うわけではありません。アプリケーションの待受ポートを確認し、インターネット全体へ直接開放する必要があるかを判断します。

EC2インスタンスを起動する

  1. EC2の画面で「インスタンスを起動」を選びます。
  2. 利用時点でサポートされているAmazon Linux系のAMIを選びます。
  3. インスタンスタイプは、MCPサーバーのメモリ使用量と処理量に合わせて選びます。無料利用枠の対象は時期やアカウント条件で変わるため、起動画面の表示を確認してください。
  4. ネットワークにmcp-vpc、サブネットにmcp-public-subnetを指定します。
  5. パブリックIPv4アドレスを使う構成なら、自動割り当てを有効にします。
  6. 作成したセキュリティグループを関連付けます。
  7. キーペアを作成して秘密鍵を安全な場所に保存し、アクセス権を必要な利用者だけに限定します。
  8. 設定内容を見直してインスタンスを起動します。

MCPサーバーを配置する

EC2へ接続する

Amazon Linux系のAMIでec2-userを使う場合のSSH接続例は次のとおりです。ユーザー名は選んだOSに合わせて確認します。

ssh -i "ダウンロードしたキーペア.pem" ec2-user@<パブリックIP>

実行環境とソースコードを準備する

  1. OSの更新を適用し、MCPサーバーが必要とするGit、Node.js、Pythonなどのランタイムを準備します。必要な種類とバージョンは、使用するリポジトリのREADMEで確認します。
  2. 出所と内容を確認したリポジトリをクローンします。
git clone <確認済みのリポジトリURL>
cd <リポジトリ名>
  1. READMEに従って依存パッケージを導入します。
  2. 接続先や認証情報などを設定します。秘密情報はソースコードへ直接書かず、利用する実装が指定する安全な設定方法で管理します。
  3. 実装で定義された起動コマンドを実行し、まずEC2内部から正常に応答することを確認します。

node index.jsのような固定コマンドは、対象リポジトリにそのファイルと起動方法が定義されている場合にだけ使えます。ファイル構成を確認せずに実行すると、起動できないか、意図しない設定で動作する原因になります。

外部接続を確認する

接続できない場合は、アプリケーションの待受アドレスとポート、EC2上のプロセス、セキュリティグループ、サブネットのルートを順に確認します。一度に設定を変えると原因を特定しにくいため、一項目ずつ切り分けます。

Dockerを使う場合の考え方

リポジトリにDockerfileやCompose設定が用意されている場合は、MCPサーバーをコンテナとして実行できます。アプリケーションと依存関係をまとめやすい一方で、ポートの割り当て、設定値の受け渡し、ログの保存先、再起動方法をコンテナ側でも決める必要があります。

既存のDocker設定がない場合は、ファイル名だけを用意しても動きません。Dockerを採用する前に、venvとDockerの違いと使い分けを確認し、実行環境をどこまで分離したいかを整理すると判断しやすくなります。

公開後の運用チェックリスト

構築手順の振り返り

MCPサーバーをEC2で公開する流れは、VPCとサブネットの準備、セキュリティグループの制限、EC2の起動、確認済みリポジトリの配置、HTTPSと監視の設定に分けられます。

まずは接続元を限定した小さな構成で動作を確認し、公開範囲を広げる前に認証、ログ、再起動、更新の方法を固めてください。特定のリポジトリ名や起動コマンドを決め打ちせず、実際に採用するMCPサーバーのREADMEと設定を照合することが、手戻りを減らします。

モバイルバージョンを終了