[アップデート] Amazon SQS が VPC エンドポイントに対応!VPN 経由でオンプレミスからアクセスしてみた
こんにちは、菊池です。
先日のアップデートにて、Amazon SQSがVPCエンドポイント(Interface Endpoint)に対応しました!
VPCエンドポイントはAWSサービスのAPIに対して、VPC内部からインターネットを経由せずにアクセスできる機能です。昨年のInterface Endpointのリリース以降、対応するAWSのサービスが追加されていっていますが、今回、Amazon SQSが対象に追加されました。
今回は、この機能と、先日リリースされたRoute 53 リゾルバを使うことで、オンプレミスからVPNを経由してSQSを利用してみます。
オンプレミスからVPN経由のSQS利用
構成は以下のようなイメージになります。
Interface Endpointを使うことで、オンプレミスからVPN経由でエンドポイントにアクセスすること自体は可能になります。しかし、そのままではSQSのエンドポイント名であるsqs.ap-northeast-1.amazonaws.com
をオンプレミスで名前解決すると、インターネット上のパブリックなエンドポイントにアクセスしてしまいます。そこで、Route53 リゾルバを使い、VPC内のInbound Endpointに対して名前解決することで、プライベートなVPCエンドポイントにアクセス可能になります。
VPC エンドポイントの作成
まずはSQSのVPCエンドポイントを作成します。
SQSのサービスを選択し、VPC/サブネットを選びます。
作成できました。しばらくすると利用可能になります。使用するエンドポイント名はsqs.ap-northeast-1.amazonaws.com
です。
Route53 リゾルバの設定
続いて、Route53 リゾルバの設定です。今回はオンプレからの名前解決のみなので、インバウンドのみを選択します。
VPCエンドポイントと同じVPC/サブネットを選択します。
作成できました。このIPに対して名前解決します。
VPN接続
2つのエンドポイントを設定したVPCと、VPNで接続します。
アクセスする
それでは、アクセスしてみます。クライアントは、オンプレミス上のCentOS7です。
まず、Route53リゾルバで割り当てられたIPを/etc/resolve.conf
に記載しておきます。その上で、SQSのエンドポイントを名前解決してみます。
$ dig sqs.ap-northeast-1.amazonaws.com ; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> sqs.ap-northeast-1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4244 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 0 ;; QUESTION SECTION: ;sqs.ap-northeast-1.amazonaws.com. IN A ;; ANSWER SECTION: sqs.ap-northeast-1.amazonaws.com. 60 IN A 10.123.36.15 sqs.ap-northeast-1.amazonaws.com. 60 IN A 10.123.36.41 ;; AUTHORITY SECTION: sqs.ap-northeast-1.amazonaws.com. 172800 IN NS ns-1536.awsdns-00.co.uk. sqs.ap-northeast-1.amazonaws.com. 172800 IN NS ns-512.awsdns-00.net. sqs.ap-northeast-1.amazonaws.com. 172800 IN NS ns-0.awsdns-00.com. sqs.ap-northeast-1.amazonaws.com. 172800 IN NS ns-1024.awsdns-00.org. ;; Query time: 11 msec ;; SERVER: 10.123.36.17#53(10.123.36.17) ;; WHEN: 日 12月 16 15:25:42 JST 2018 ;; MSG SIZE rcvd: 217
sqs.ap-northeast-1.amazonaws.com
に対して、プライベートIPが取得できています。続いて、オンプレのサーバからAWS CLIでSQSのAPIにアクセスしてみます。
注意点として、SQSのAPIにはsqs.ap-northeast-1.amazonaws.com
の他に、レガシーAPIとしてap-northeast-1.queue.amazonaws.com
というエンドポイントも存在する点があります。レガシーAPIはVPCエンドポイントに対応していませんが、AWS CLIだと、デフォルトだとレガシーAPIを使用するようで、VPCエンドポイントではなくパブリックなAPIにアクセスしてしまいました。--endpoint-url
のオプションを使ってVPCエンドポイントを利用するようにします。
$ aws sqs create-queue --queue-name test-que \ > --region ap-northeast-1 \ > --endpoint-url https://sqs.ap-northeast-1.amazonaws.com { "QueueUrl": "https://sqs.ap-northeast-1.amazonaws.com/999999999999/test-que" }
キューが作成できたので、メッセージを送信してみます。
$ aws sqs send-message \ > --queue-url "https://sqs.ap-northeast-1.amazonaws.com/999999999999/test-que" \ > --message-body "Hello SQS" \ > { "MD5OfMessageBody": "5cf7495f9a4dc80d179fe9f6fxxxxxxx", "MessageId": "a972c412-7b01-4b7a-89a1-c59efxxxxxxx" }
送信したメッセージの取得も問題ありません。
$ aws sqs receive-message \ > --queue-url "https://sqs.ap-northeast-1.amazonaws.com/999999999999/test-que" { "Messages": [ { "Body": "Hello SQS", "ReceiptHandle": "AQEBQAA0h1cQ5Hx0oDvvKIi3wAfkIoxRpflWun+g5h5aCw1mq+aMypqLORilWls9l7gEZ1aUbIe95F/DeYNGUrSe19dQWWkDq+W+pHI2IuQwZUYS9s5VwJDxLghD8LEz5SE26SCVZJIY88zeTImmZtmcDEVmiEUMBwPY/dVt9pZB70B1c7rqi7KO/sAGncga4tdITPY4uR5BA8x2NI8nAPlITh9e9dGv2iPrlJCBFERDExgj5eIIBsRa+kWmHs5P58T7peqXNUsYOzFP4zsNZ//ORGRJlyrJrLXejE0xH8sRgfyt7U5NTJTjAzAXcTUjLjK5Sl+aIhvmeeqoNiXxx3JXHGCT/bhqitPo2rAa1mlslIUi/NUTw7pCJK2vgTLJrFt2kTUmDDaUKGHsbWPi/9u86w==", "MD5OfBody": "5cf7495f9a4dc80d179fe9f6fxxxxxxx", "MessageId": "a972c412-7b01-4b7a-89a1-c59efaf338f6" } ] }
最後に、キューの削除です。
$ aws sqs delete-queue \ > --queue-url "https://sqs.ap-northeast-1.amazonaws.com/999999999999/test-que"
まとめ
以上です。
Amazon SQSがVPCエンドポイントに対応したということで、オンプレからのVPN経由でのアクセスを試しました。オンプレミスの環境で、インターネットを経由しないでSQSを利用したいというケースでの参考になればと思います。