※追記:HAProxy構築した流れで色々試していたので必要だと思いこんでいましたが、HAProxy要らないですねこれ。
ちゃんと
とかを読んでもいないで理解もしていないのにググってコピペしてとりあえず出来たーとやるとこういう恥をかきますね。
ローカルマシンのMacからコード走らせたらエラー出まくってなんでだ・・・ってハマってから2日くらい色々試行錯誤していたメモ。
AWSのVPC内にしかリソースが無くNW的にグローバルからのアクセスが直接出来ない物に対してローカルのMacからどうやってアクセスするか、という流れ。
おおまかな流れとしてはめんどいが
- アクセスしたいリソースにアクセス出来るEC2インスタンスを起動
2. HAProxyを設定する - ローカルマシン側でHAProxyが起動しているインスタンスにSocks Proxyとしてsshで接続する
- 開発しているIDEに接続設定を入れる(今回はIntelliJ + Java)
という流れ。1は割愛。
HAProxy設定
とりあえず今回は用途的にTCP modeで設定。内容は雑にこんな感じ。
defaults mode tcp log global option tcplog option dontlognull retries 3 timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout check 10s maxconn 3000 frontend main *:80 default_backend backendApp backend backendApp balance roundrobin server backendApp local.backendApp.example.com:8111 check
ローカルマシン側でHAProxyが起動しているインスタンスにローカルにSocks Proxyとしてsshで接続する
とりあえずこんな感じでSSHで接続する。
ssh -i .ssh/haproxy.pem -f -N -D localhost:1080 ec2-user@HAProxyマシンのグローバルIP
接続が完了したらローカルの1080ポートに接続したらHAProxyに接続出来るのでJavaでコマンドラインでやるなら
java -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080 TestApp
こんな感じで起動したら無事HAProxy経由で接続が出来る。で、これをIntelliJで接続するにはRun -> Edit Configuration -> VM Optionに同じオプションを設定してあげればRun実行時も同じ事が出来る。
CircleCIとかでも多分同じ様な問題にあたって設定例を見つけたので多分外部CIサービスでも出来るとは思う。 ただ、IPアドレスのバッティングだけは気をつけてリソースを作成する必要があるとは思う。 gist.github.com
以上。