この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、菊池です。
大きなアップデートです!NLB(Network Load Balancer)がUDPをサポートしました!
NLB の UDP サポート
今回のアップデートにより、DNS、SIP、SNMP、SyslogといったUDPを使ったアプリケーション/サービスのロードバランスに対応します。これまで、UDPの負荷分散に対応していたのはGlobal Acceleratorのみでした。NLBもUDPに対応したことで、VPC内部での利用も可能になります。
制約
なお、現時点では、以下の点で制約があることに注意が必要です。
- インスタンスターゲットのみに対応(IPターゲット、PlivateLinkには非対応)
- ヘルスチェックはTCP、HTTP/HTTPSのみ
つまり、VPC外のDirectConnectやPeering経由のターゲットや、FargateのようなEC2インスタンス以外と組み合わせた利用はできません。
ヘルスチェックがTCPになるのは、コネクションレスでのヘルスチェックは難しいので止むを得ないかと思います。そのため、サービスの死活を監視してインスタンスの切り離しを実現したい場合には一工夫が必要です。
やってみた
実際に作成してみます。
コンソールからロードバランサーの作成に進むと、NLBのところには「UDP」の表記が追加されています。
リスナーの作成時に、リスナープロトコルに[UDP]と[TCP_UDP]が追加されています。今回は、NLBの後ろにDNSキャッシュサーバ(BIND)を置いてみますので、[TCP_UDP]の53を設定しました。
ターゲットグループの作成です。ターゲットの種類にIPは選べませんでした。
ヘルスチェックにもUDPはありませんので、TCPを選びました。BINDであればデフォルトでTCP:53をリッスンしてくれますのでこれで問題ありません。
NLBが作成できたら、配下に配置するEC2を用意します。BINDで以下のように設定し、VPC内のAmazon DNSにフォワードするキャッシュサーバを起動します。
$ sudo cat /etc/named.conf
options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { 127.0.0.1;
0.0.0.0/0;
};
recursion yes;
allow-recursion{
127.0.0.1;
0.0.0.0/0;
};
forwarders{
172.31.0.2;
};
};
ヘルスチェックが問題なければステータスがhealthyになります。
それでは、NLBに対してDNSの問い合わせをしてみます。
$ dig ap-northeast-1.signin.aws.amazon.com @udp-test-xxxxxxxxxxxxxxxx.elb.ap-northeast-1.amazonaws.com
; <<>> DiG 9.10.6 <<>> ap-northeast-1.signin.aws.amazon.com @udp-test-xxxxxxxxxxxxxxxx.elb.ap-northeast-1.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26983
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 13, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ap-northeast-1.signin.aws.amazon.com. IN A
;; ANSWER SECTION:
ap-northeast-1.signin.aws.amazon.com. 11 IN CNAME ap-northeast-1.signin-reg.aws.amazon.com.
ap-northeast-1.signin-reg.aws.amazon.com. 58 IN A 54.239.96.31
:
:
ちゃんとレスポンスが取れました!NLBを経由して、UDPの通信ができていることが確認できました。
さいごに
新たにサポートされたNLBでのUDPの利用について紹介しました。今回のアップデートにより、単純なUDPのサービスはもちろん、TCPとUDPを組み合わせたアプリケーションにも応用が可能かと思います。