プライベートサブネットのインスタンスからinternalなALBを経由してプライベートサブネットのインスタンスにアクセスする簡単なサンプル。
VPC fooとbarを作成して、ALBとアクセス先をfoo配置する。
アクセス元をbarに配置する。
foo, barともにプライベートサブネットに配置したインスタンスにアクセスするための踏み台サーバをパブリックサブネットに配置している。
今回は後述するようにWebサーバとしてSimpleHTTPServer
をPort 8080
で稼働する。
ALBおよびターゲットグループを以下のように設定する。
カスタムTCP 8080
を許可する※ ALBのセキュリティグループのインバウンドでHTTPを許可するのを忘れない。
barのプライベートサブネットのインスタンスからALBのDNS 名(例 internal-foo-internal-alb-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com)でアクセスできることを確認する。
curl -v internal-foo-internal-alb-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com
例としてプライベートサブネットのEC2インスタンスにWebサーバ(PythonのSimpleHTTPServer)を起動する例を記載する(EC2はAmazon Linuxを使用)。
$ mkdir www
$ cd www
$ vim index.html
$ python -m SimpleHTTPServer 8080
Serving HTTP on 0.0.0.0 port 8080 ...
index.htmlの内容。
<html>
<head>
<title>Internal alb sample</title>
</head>
<body>
Hello World.
</body>
</html>
ALBのリスナにターゲットグループを設定するとヘルスチェックが始まる。
下記はSimpleHTTPServerに対するヘルスチェックの例。
$ python -m SimpleHTTPServer 8080
Serving HTTP on 0.0.0.0 port 8080 ...
10.2.1.175 - - [12/Mar/2022 11:15:16] "GET / HTTP/1.1" 200 -
10.2.2.171 - - [12/Mar/2022 11:15:17] "GET / HTTP/1.1" 200 -
10.2.1.175 - - [12/Mar/2022 11:15:46] "GET / HTTP/1.1" 200 -
10.2.2.171 - - [12/Mar/2022 11:15:47] "GET / HTTP/1.1" 200 -
10.2.1.175 - - [12/Mar/2022 11:16:16] "GET / HTTP/1.1" 200 -
10.2.2.171 - - [12/Mar/2022 11:16:17] "GET / HTTP/1.1" 200 -
10.2.1.175 - - [12/Mar/2022 11:16:46] "GET / HTTP/1.1" 200 -
10.2.2.171 - - [12/Mar/2022 11:16:47] "GET / HTTP/1.1" 200 -
10.2.1.175 - - [12/Mar/2022 11:17:16] "GET / HTTP/1.1" 200 -
ヘルスチェックが成功。
VPC barのプライベートサブネットのインスタンスからの接続を確認する。
$ curl -v internal-foo-internal-alb-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com
* Trying 10.2.1.175:80...
* Connected to internal-foo-internal-alb-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com (xxx.xxx.xxx.xxx) port 80 (#0)
> GET / HTTP/1.1
> Host: internal-foo-internal-alb-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com
> User-Agent: curl/7.79.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Sat, 12 Mar 2022 11:25:20 GMT
< Content-Type: text/html
< Content-Length: 103
< Connection: keep-alive
< Server: SimpleHTTP/0.6 Python/2.7.18
< Last-Modified: Sat, 12 Mar 2022 11:00:37 GMT
<
<html>
<head>
<title>Welcom to web1</title>
</head>
<body>
Hello World
</body>
</html>
* Connection #0 to host internal-foo-internal-alb-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com left intact
Route 53のプライベートホストゾーンを設定する。
alb.homeでアクセス可能になる。
$ curl -v alb.home
* Trying 10.2.2.171:80...
* Connected to alb.home (10.2.2.171) port 80 (#0)
> GET / HTTP/1.1
> Host: alb.home
> User-Agent: curl/7.79.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Sat, 12 Mar 2022 11:34:13 GMT
< Content-Type: text/html
< Content-Length: 103
< Connection: keep-alive
< Server: SimpleHTTP/0.6 Python/2.7.18
< Last-Modified: Sat, 12 Mar 2022 11:00:37 GMT
<
<html>
<head>
<title>Welcom to web1</title>
</head>
<body>
Hello World
</body>
</html>
* Connection #0 to host alb.home left intact
プライベートアドレスは停止や休止では変更されない。
プライベート IPv4 アドレスは、プライマリアドレスまたはセカンダリアドレスを問わず、インスタンスが停止して起動、または休止して起動した際に、ネットワークインターフェイスに関連付けられたままになり、インスタンスを終了すると解放されます。
ref. https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-instance-addressing.html#concepts-private-addresses
プライベートホストゾーンにつけた名前空間が重複する場合の優先順序は以下に記載されている。
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/hosted-zone-private-considerations.html?utm_source=pocket_mylist
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。