oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

AWSでVPC内にしかないリソースに対してローカルテストとかでサクッとアクセスしたい時

※追記:HAProxy構築した流れで色々試していたので必要だと思いこんでいましたが、HAProxy要らないですねこれ。

ちゃんと

www.kmc.gr.jp

とかを読んでもいないで理解もしていないのにググってコピペしてとりあえず出来たーとやるとこういう恥をかきますね。


ローカルマシンのMacからコード走らせたらエラー出まくってなんでだ・・・ってハマってから2日くらい色々試行錯誤していたメモ。

AWSVPC内にしかリソースが無くNW的にグローバルからのアクセスが直接出来ない物に対してローカルのMacからどうやってアクセスするか、という流れ。

おおまかな流れとしてはめんどいが

  1. アクセスしたいリソースにアクセス出来るEC2インスタンスを起動 2. HAProxyを設定する
  2. ローカルマシン側でHAProxyが起動しているインスタンスにSocks Proxyとしてsshで接続する
  3. 開発している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実行時も同じ事が出来る。

https://i.gyazo.com/ce8cbad3b6932534385cdc4290f01ee6.png

CircleCIとかでも多分同じ様な問題にあたって設定例を見つけたので多分外部CIサービスでも出来るとは思う。 ただ、IPアドレスのバッティングだけは気をつけてリソースを作成する必要があるとは思う。 gist.github.com

以上。