Vagrant環境からAWSのEC2を経由してDocumentDBに接続する方法とSSH切断エラーの対処法

vagrant-ec2-documentdb
  • URLをコピーしました!

この記事では、Vagrantで構築したローカル開発環境から、AWS上のEC2インスタンスを踏み台にして、Amazon DocumentDBへ安全に接続する方法を紹介します。
公開鍵ではなくパスワード認証を使いたいケースに対応し、接続中に発生する「client_loop: send disconnect: Broken pipe」というエラーの原因とその対処法も丁寧に解説します。

目次

前提条件

以下の環境を前提としています。

  • Vagrant上に構築されたUbuntuの仮想マシン
  • AWS上に立ち上げたEC2インスタンス
  • AWSのDocumentDBが適切に構築され、EC2インスタンスと同じVPC内にある
  • EC2にはパスワード認証でSSH接続できるように設定済み(セキュリティグループなど含む)

SSHトンネルを使ってDocumentDBに接続する

まず、ローカルのVagrant環境から、AWSのEC2を経由してDocumentDBに接続するには、SSHトンネルを使います。
SSHトンネルとは、暗号化された安全な通信の通り道を作る仕組みです。

以下は、パスワード認証を使ったSSHトンネルのコマンド例です。

ssh -L 27017:ドキュメントDBのエンドポイント:27017 \
    -o PubkeyAuthentication=no \
    -o PreferredAuthentications=password \
    -o PasswordAuthentication=yes \
    ユーザー名@EC2のIPアドレス
上記コマンドの解説
  • -L 27017:...:27017:ローカルのポート(27017)をDocumentDBへ転送
  • PubkeyAuthentication=no:公開鍵による認証を使わない
  • PreferredAuthentications=password:パスワードによる認証を優先
  • ユーザー名@EC2のIPアドレス:AWSのEC2にログインするための情報

このコマンドを実行すると、ローカルマシンのlocalhost:27017に接続することで、実際はEC2を経由してDocumentDBへ通信が流れます。

「client_loop: send disconnect: Broken pipe」エラーの原因と対処法

このエラーは、SSH接続が途中で切れてしまったことを意味しています。原因としては以下のようなものがあります。

通信のアイドル時間によるタイムアウト

一定時間何も操作がないと、サーバーが接続を切断してしまうことがあります。

サーバー側のSSH設定が厳しい

SSHサーバー(EC2側)の設定で、アイドル状態のクライアントをすぐに切断するようになっている可能性があります。

クライアント側の設定不足

SSHクライアント(Vagrant側)の設定が最適化されていない可能性もあります。

サーバー側のSSH設定を確認・修正する

EC2インスタンスにSSHでログインし、次のファイルを編集します。

sudo nano /etc/ssh/sshd_config

以下の項目がなければ追加、または調整します。

ClientAliveInterval 60
ClientAliveCountMax 3

この設定は「60秒ごとにクライアントに確認メッセージを送り、それに3回応答がなければ切断する」という意味です。これにより、タイムアウトまでの時間が延長されます。

設定を保存したら、次のコマンドでSSHサービスを再起動します。

sudo systemctl restart ssh

クライアント側(Vagrant)のSSH設定を調整する

Vagrant上のホームディレクトリにある以下の設定ファイルを編集します。

nano ~/.ssh/config

次のように設定を追加します。

Host 任意のホスト名
    HostName EC2のIPアドレス
    User ユーザー名
    PubkeyAuthentication no
    PreferredAuthentications password
    PasswordAuthentication yes
    ServerAliveInterval 60
    ServerAliveCountMax 3

この設定は、通信が途切れないように定期的にサーバーに信号を送り続けるものです。
これにより「Broken pipe」エラーの発生を防ぐことができます。

DocumentDBへの接続確認

SSHトンネルが正しく張られていれば、Node.jsやMongoDBクライアントから、以下のようにローカルのポートに接続するだけで、DocumentDBにアクセスできます。

mongodb://localhost:27017

接続確認には、MongoDBのクライアントツール(例:Compass)やNode.jsのライブラリ(例:mongoose)を使うと便利です。

まとめ

Vagrant環境からAWSのDocumentDBに接続するには、EC2インスタンスを踏み台にしてSSHトンネルを構築するのが安全で便利な方法です。パスワード認証を使いたい場合は、SSHの設定を工夫すれば問題なく動作します。

一方で、「Broken pipe」のようなエラーは、適切なSSH設定を行うことで回避可能です。クライアント側サーバー側の両方にタイムアウト対策を施すことで、安定した接続を維持できます。

安全な設計と効率的な接続で、快適な開発環境を築いていきましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次