【新機能】ClassicLinkがDNSをサポートするようになりました

2016.01.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、せーのです。今日はClassicLinkについての渋〜い新機能をご紹介します。

久々に聞きましたね、ClassicLink。ClassicLinkとは古いAWSアカウントを持っている方に対する機能で、VPC外に建てられたEC2とVPC内部に立てられたEC2をつなげる、という機能です。現在では全てのEC2がVPC内で立てられるようになっていますが、以前はVPCという考えがなく、AWS上に直接EC2サーバーを立てて動かしていた時代がございました。この「直接AWS上に立ち上げるEC2」を現在は「EC2-Classic」と呼びます。EC2-Classicが立ち上げられるのはClassic時代に存在していたアカウントのみです。EC2のManagement Consoleを開いた時に右上に

classiclinkinspi1

このような表示のあるアカウントの方はEC2-Classicが立てられます。

ClassicLinkがDNSサポートすると何が嬉しいの?

さて、今回はこのClassicLinkにDNSサポートの機能が増えます。具体的に言うと例えばVPC外に立てられているEC2からVPC内に立てられているEC2につけられているPublicなDNS名をアクセスすると、そのDNSに対応したPublic IPではなく、Private IPが返る、逆にVPC内のEC2からVPC外のEC2につけられているPublic DNS名でアクセスするとPrivate IPが返ってくる、という機能です。

またRoute 53にはPrivate HOSTED ZONEという機能があります。これはVPC毎にVPC内でしか解決できないPrivateなHOSTED ZONEの事です。例えばRDSのエンドポイントにもっと簡単なURLでアクセスしたい、がそのためにドメインDNSからレコードセットを持ってくるのはちょっと、というような時にPrivate HOSTED ZONEにてレコードセットを振っておけば、local.dbのような簡単なURLがドメイン競合等考えることなく簡単に作成、使用できるという機能です。今回のClassicLinkはここもサポートし、VPC外のEC2からprivate subnetにいるRDSにローカルでつけたDNSでアクセスできるようになりました。

ClassicLinkからPublic DNSをアクセスするとPrivate IPが返ってくる、というこの機能、これは実はRoute 53についている機能で「Split-horizon DNS」と言います。Route 53でVPC内のEC2にPublic DNSをつけ、それを同じVPC内部のEC2からアクセスさせるとプライベートIPが返り、外部からアクセスされるとPublic IPが返ります。これにより内部通信が外部から見えなくなってセキュアになるのですが、今回はこの機能がClassicLinkにも拡張された、という事です。 これによりClassicLinkされているEC2とVPC内にあるEC2はClassicLinkされている事で区別なくつかえるようになり、コードの流用なども簡単にできるようになりました。

やってみた

それではやってみましょう。といっても超カンタンです。VPCを立てます。この時点ではClassicLInkは無効になっています。

classiclink_dns1

ここで[ClassicLink DNSサポートの編集]をクリックし

classiclink_dns3

出てきた選択ボタンをはいにするだけ。超カンタンですね。

これclassiclink_dns4

これでこのVPCはClassicLinkとしてつながろうとしても許可されます。

あとはEC2を2つ立ち上げます。一つはClassicで

classiclink_dns5

もうひとつはVPC内で立ち上げました。

classiclink_dns6

立ち上がったらVPCより[ClassicLink]を選択してClassicLinkを貼ります。

classiclink_dns7

あとは普通にアドレスをひいてみましょう。まずは外部から引いてみます。

Tsuyoshis-iMac:~ Tsuyoshi$ dig ec2-176-32-90-49.ap-northeast-1.compute.amazonaws.com

; <<>> DiG 9.8.3-P1 <<>> ec2-176-32-90-49.ap-northeast-1.compute.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63735
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ec2-176-32-90-49.ap-northeast-1.compute.amazonaws.com. IN A

;; ANSWER SECTION:
ec2-176-32-90-49.ap-northeast-1.compute.amazonaws.com. 21599 IN	A 176.32.90.49

;; Query time: 65 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jan 12 07:23:32 2016
;; MSG SIZE  rcvd: 87

外部のEIPが引けました。次にログインしたVPC内部のEC2より引いてみます。

[ec2-user@ip-192-168-0-132 ~]$ dig ec2-176-32-90-49.ap-northeast-1.compute.amazonaws.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.42.amzn1 <<>> ec2-176-32-90-49.ap-northeast-1.compute.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58972
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ec2-176-32-90-49.ap-northeast-1.compute.amazonaws.com. IN A

;; ANSWER SECTION:
ec2-176-32-90-49.ap-northeast-1.compute.amazonaws.com. 20 IN A 10.134.154.204

;; Query time: 1 msec
;; SERVER: 192.168.0.2#53(192.168.0.2)
;; WHEN: Tue Jan 12 07:23:14 2016
;; MSG SIZE  rcvd: 87

プライベートIPである10.134.154.204が引けました。

まとめ

いかがでしたでしょうか。とても地味な機能ですが、これは確実に役に立つ時がやってきます。 その時にこのページの事を思い出して下さい。

参考リンク