[アップデート]CodeGuru ProfilerがPrivateLinkに対応しました!

CodeGuru ProfilerでPrivateLinkが利用できるようになりました!
2020.09.09

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

CodeGuru ProfilerでPrivateLinkが利用できるようになりました!

CodeGuru Profilerは、Java(JVM)で動くアプリケーションにAgentを仕込むことで、パフォーマンスを継続的に分析してパフォーマンス問題をあぶり出すサービスです。

弊社ブログで紹介されていますので、詳しくはこちらを御覧ください。

今までCodeGuru ProfilerのAgentは、インターネット経由でパフォーマンス情報をCodeGuru Profilerに送っていました。

これがインターフェイス型のPrivateLinkに対応したことによって、プライベートなネットワークで完結できるようになりました。 よりセキュアにご利用できます。

PrivateLink自体の説明は、弊社ブログにまとまっていますのでこちらを御覧ください。

やってみた

CodeGuru Profiler環境の作成

CodeGuru Profilerのお試し環境は、こちらのaws-samplesを参考に作成しています。

今回は、このようなCodeGuru Profilerの環境は構築していることを前提として、CodeGuru Profilerへの接続をPrivateLinkに切り替えるところをやってみます。

PrivateLinkの作成

VPCのマネジメントコンソールの画面から、エンドポイントを開き、エンドポイントの作成をクリックします。

サービスカテゴリは AWSサービス とし、サービス名に com.amazonaws.ap-northeast-1.codeguru-profiler を選択します。 PrivateLinkを作成したいVPCとSubnetを選択します。

次に、プライベートDNSを有効にする にチェックを入れます。 セキュリティグループはあらかじめEC2からHTTPSで接続可能にしたインバウンドルールを設定したものを作っておき、それを選択します。 最後にエンドポイントの作成ボタンをクリックすれば完了です。

EC2からCodeGuru ProfilerのエンドポイントのIPアドレスを、 dig コマンドを使って確認してみます。 そうすると、 172.31.42.124 と結果が返ってきており、プライベートIPに向いていることがわかります。

$ dig codeguru-profiler.ap-northeast-1.amazonaws.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.amzn2.0.4 <<>> codeguru-profiler.ap-northeast-1.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22367
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;codeguru-profiler.ap-northeast-1.amazonaws.com.        IN A

;; ANSWER SECTION:
codeguru-profiler.ap-northeast-1.amazonaws.com. 60 IN A 172.31.42.124

;; Query time: 2 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Wed Sep 09 01:48:29 UTC 2020
;; MSG SIZE  rcvd: 80

CodeGuru Profilerへのアクセス確認

PrivateLinkを構築した上で、CodeGuru ProfilerのAgentを仕込んだアプリケーションを動かすと、 問題なくCodeGuru Profilerがデータ収集できていることが確認できます。

AWS CLIも使って、次のようなコマンドを実行してCodeGuru Profilerへ接続できることを確認してみます。

$ aws codeguruprofiler list-profiling-groups --region ap-northeast-1

次のような実行結果が返ってきており、問題なく接続できていることが確認できます。

{
    "profilingGroupNames": [
        "DemoApplication-WithIssues",
        "DemoApplication-WithoutIssues"
    ]
}

次にインターフェイスVPCエンドポイントのセキュリティグループを変更して、EC2からのアクセスを拒否し、 CodeGuru Profilerのエンドポイントに接続できなくなっていることを確認してみます。

次のコマンドを実行すると、EC2からCodeGuru Profilerのエンドポイントに接続できないので十数分後にタイムアウトエラーが発生します。 想定通り、CodeGuru Profilerのエンドポイントに接続できなくなっていることが確認できます。

$ aws codeguruprofiler list-profiling-groups --region ap-northeast-1

Connect timeout on endpoint URL: "https://codeguru-profiler.ap-northeast-1.amazonaws.com/profilingGroups"

終わりに

今まではCodeGuru Profilerはパブリックアクセスをする必要がありましたが、PrivateLinkに対応したことによって、よりセキュアにご利用できます。

パブリックアクセスであることが理由でCodeGuru Profilerを採用できなかった方は、ぜひお試しください。