はじめに
NewRelic Advend Callenderの記事を書く前に調査を始めたところ、
もっと参考になる記事がサーバワークスさんで作成されていたので、詳細を知りたい方は、末尾の参考文献をチェックしてみてください
社内ネットワークにNewRelicを入れる苦しみ
NewRelicは導入が簡単なツールですが、1つ不満がありました。
それは、インターネットとの接続が必須である点です。
私の所属している会社の社内ネットワークは、AWSとDirectConnectで閉域接続しています。
AWSの上にEC2が数百台稼働していますが、AWSからインターネットには直接出られず、必ずオンプレ側に設けた、プロキシサーバ+Firewallを経由して、インターネットに出ることが求められます。
そのため、下記のような問題が生じています。
- EC2にNewRelicInfraAgentを入れるとき、毎回社内プロキシの設定が必要
- EC2のDockerの上に、NewRelicのPrivateLocationを作ろうとしても、社内プロキシを超えれない
とくに後者が問題で、NewRelicの外形検査機能(Synthetics)を利用して、社内ネットワークの中のサーバを監視するためには、PrivateLocationが必須なのですが、この問題のために、NewRelicの外形検査機能がずっと利用できませんでした。
解決方法として
公式ページにも記載がありますが、NewRelicとAWSの間では、AWS PrivateLinkの機能を使って、閉域で接続する機能が提供されています。しかし現時点(2024/12/16)では、下記のような問題があります。
NewRelic公式の情報
https://docs.newrelic.com/jp/docs/data-apis/custom-data/aws-privatelink/
-
北米とEUのAWSリージョンでしか直接利用はできない。
Newrelic社がそもそも北米とECでしかPrivateLinkを提供していません。そのため、日本などのAWSで閉域接続するためには、TransitGateway(TGW)や、VPCPeeringなどを間に介した複雑な設定が必要です。 -
作るものが多くて、自宅で簡単に試すということが難しい
PriavteLink, Route53, EC2, VPC, InternetGateway, NAT Gatewayなどなど、作るものが多く、土日などにスクラップビルドを行って、実装を検証するということが難しいです。 -
CloudFormationテンプレートなど公開されているものもあるが、試すと動作しない
NewRelicの公式サイトの記事をもとに、CloudFormationテンプレートを公開してくれている方もいるのですが、構築して終わり、となっており、実際に閉域での動作検証をされている事例が見られない
(実際試してみると、複数のはまりポイントがある)
今回試すこと
- なるべく手間をかけずに
- 繰り返し実験できるように、スクラップ&ビルドができる方法で
- AWS上にNewRelicのプライベート接続環境を作って
- 実際に疎通を検証する
1.Amazon Q DeveloperでCloudFormation Templateを作る
スクラッチビルドできるようにするには、CloudFormationテンプレートを用意するのが常套手段ですが、
そもそもCloudFormationのJSON/YAML記法は癖が強く、自分で書くのは大変です。
幸い、AWS Management Consoleから、Amazon Q Developerを起動することで、
チャットの中で生成AIに指示をすることで、半自動で、CloudFormationのテンプレートを作成することが可能です
※自動生成されたCfnテンプレートを多少整理してまとめたものを置いておきます。
https://drive.google.com/file/d/1xJPLRWoLDU9IogD_12DiGoSltBsrGMEw/view?usp=sharing
please generate cfn code to create
- region : us-east
- az : us-east-1a
- 1 vpc
- 1 public subnet 10.0.100.0/24 named "public subnet1"
- 1 private subnet 10.0.200.0/24 named "private subnet1"
- 1 private subnet 10.0.201.0/24 named "private subnet for newrelic endpoint"
うれしいことに、Publicサブネットを指定すると、自動的にInternetGatewayまで作るように、Cfnコードが生成されました。
please generate cfn code to create
- 1 key pair "key-for-ec2"
- define input paramater named "Your IP address" - security group that allow access from / to "Your IP address"
- 1 ec2 t2.small named "bastin" on "public subnet1" and assinged 1 public ip address and using keypair named "key-for-ec2"
- 1 ec2 t2.small named "nrcol1" on "private subnet1" and using keypair named "key-for-ec2"
please generate cfn code to create
- And create following private links (source / destination) on "private subnet for newrelic endpoint"
collector.newrelic.com / destination: com.amazonaws.vpce.us-east-1.vpce-svc-084f1583d1a7afdaf
insights-collector.newrelic.com / destination: com.amazonaws.vpce.us-east-1.vpce-svc-0ec0af01ab096419c
metric-api.newrelic.com / destination: com.amazonaws.vpce.us-east-1.vpce-svc-085e8fb87d5493160
log-api.newrelic.com / destination: com.amazonaws.vpce.us-east-1.vpce-svc-03408b499252a02a7
trace-api.newrelic.com / com.amazonaws.vpce.us-east-1.vpce-svc-095f88345b701aaae
please generate cfn code to create
- And create following private links (source / destination) on "private subnet for newrelic endpoint"
cloud-collector.newrelic.com / com.amazonaws.vpce.us-east-1.vpce-svc-0ba6e1d02e7cbbccb
infra-api.newrelic.com / com.amazonaws.vpce.us-east-1.vpce-svc-007e743510dc46024
identity-api.newrelic.com
infrastructure-command-api.newrelic.com / com.amazonaws.vpce.us-east-1.vpce-svc-05adda8aa9c23eaa3
otlp.nr-data.net / com.amazonaws.vpce.us-east-1.vpce-svc-07d529b1d0f6d417d
api.newrelic.com / com.amazonaws.vpce.us-east-1.vpce-svc-05adda8aa9c23eaa3
synthetics-horde.nr-data.net / com.amazonaws.vpce.us-east-1.vpce-svc-05adda8aa9c23eaa3
※Route53については、最大のはまりポイントなので、手動で作ることを推奨します。
2.CloudFormationでAWSを構築する
Amazon Q Developerで生成したCloud Formation Templateを、CloudFormationで実行して、Route53以外の必要なリソースを作成します。
3.EC2にログインして、NewRelicInfraAgentをインストールする
割愛
4.Route53を設定して、PrivateLink経由の通信に切り替える
この記事の一番の肝です。
Route53を作成するときに、2つだけPrivate Hosted Zoneを作っている記事を見るのですが、これは間違いです。
- 間違いの例
- newrelic.com
- nr-data.net
正しくは、下記のように6つのPrivate Hosted Zoneを作成する必要があります。
- 正しい例
- newrelic.com
- nr-data.net
- api.newrelic.com (この中で api.nwerelic.comへのAレコード登録を追加する)
- identity-api.newrelic.com(この中で identity-api.newrelic.comへのAレコード登録を追加する)
- infrastructure-command-api.newrelic.com(この中で infrastructure-command-api.newrelic.comへのAレコード登録を追加する)
- synthetics-horde.nr-data.net(この中で synthetics-horde.nr-data.netへのAレコード登録を追加する)
※これは、NewRelicさんの公式記事にも、一応記載はあるのですが、あまりにもあっさり書かれていて、わからないと思うので、試そうとすると必ず、はまると思います。
公式記事の抜粋
api.newrelic.com 、 identity-api.newrelic.com 、 infrastructure-command-api.newrelic.com 、およびsynthetics-horde.nr-data.netのエンドポイント サービスには、関連付けられた DNS プライベート名がありません。
これらのサービスへのアクセスを構成するには、各サービス エンドポイントへの PrivateLink 接続を作成します。
上記のホスト名ごとに、対応するプライベート ホスト ゾーン (PHZ) を作成します。
5. Privatelocationを構築する
こちらについては、すいませんが時間が足りませんでした。。。後日別途記事を作れればとおもいます
参考文献