プロキシ使用時に CloudWatch Agent を用いたログの転送に失敗したときの対処方法

EC2 インスタンスからプロキシを経由して外部へ接続する場合、インスタンスメタデータサービスへの通信は除外する必要があります。no_proxy の設定として 169.254.169.254 を追加してください。
2021.02.04

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

困っていた内容

CloudWatch Agent から EC2 インスタンス内部のログを、CloudWatch Logs へ転送する処理を行っています。

EC2 インスタンスにはプロキシ経由で通信をする設定をしています。

その際に、以下のエラーメッセージが発生しており、ログの転送に失敗しています。

2021-MM-DDThh:mm:ssZ E! [outputs.cloudwatchlogs] Aws error received when sending logs to ****: RequestError: send request failed
caused by: Post "https://logs.ap-northeast-1.amazonaws.com/": proxyconnect tcp: tls: first record does not look like a TLS handshake

対処方法を教えてください。

どう対応すればいいの?

EC2 インスタンスからプロキシを経由して外部へ接続する場合、インスタンスメタデータサービスへの通信は除外する必要があります。

そのため、no_proxy の設定として 169.254.169.254 を追加してください。

common-config.toml

[proxy]
http_proxy = "http://xxx.xxx.xxx.xxx:<ポート番号>"
https_proxy = "http://xxx.xxx.xxx.xxx:<ポート番号>"
no_proxy = "169.254.169.254"

環境変数

Linux または macOS

$ export NO_PROXY=169.254.169.254

Windows

C:\> setx NO_PROXY 169.254.169.254

参考資料

HTTP プロキシを使用する - AWS Command Line Interface

[小ネタ] CloudWatch Agentのプロキシ設定について | Developers.IO

インスタンスメタデータの取得 - Amazon Elastic Compute Cloud