CloudWatch LogsをIPv6アドレスを使用して送信する
2025/01/06
このブログの構成からパブリックIPv4を減らすように設計変更しています。
もともとこのブログのEC2インスタンスはインターネットゲートウェイへのルートがあるパブリックサブネットで起動していました。
CloudWatch Logsへログを送信することが主な目的でした。
CloudWatch LogsがIPv6をサポートしたため、EC2インスタンスのパブリックIPv4アドレスを削減しようと思います。
ターミナルへの接続はEC2 Instance Connect エンドポイントを使用しています。
EC2 Instance Connect エンドポイントの作成
目次
CloudWatch LogsのAPIエンドポイント
東京のCloudWatch LogsにもAPIエンドポイントが増えていましたので、Macからdigコマンドでそれぞれ確認してみました。
Amazon CloudWatch Logs エンドポイントとクォータ
1 2 |
dig AAAA logs.ap-northeast-1.api.aws |
;; ANSWER SECTION:
logs.ap-northeast-1.api.aws. 20 IN AAAA 2406:da70:4000:210:9706:687e:1716:7535
logs.ap-northeast-1.api.aws. 20 IN AAAA 2406:da70:4000:210:e87e:9810:3cf7:de8d
logs.ap-northeast-1.api.aws. 20 IN AAAA 2406:da70:4000:210:b80b:2ce5:ece0:295d
logs.ap-northeast-1.api.aws. 20 IN AAAA 2406:da70:4000:200:3b20:8259:a92b:33bb
logs.ap-northeast-1.api.aws. 20 IN AAAA 2406:da70:4000:200:6ec8:ce1f:7430:a52e
logs.ap-northeast-1.api.aws. 20 IN AAAA 2406:da70:4000:230:fb38:7f6a:b5e7:99
logs.ap-northeast-1.api.aws. 20 IN AAAA 2406:da70:4000:200:91ee:998e:ee66:9eaf
logs.ap-northeast-1.api.aws. 20 IN AAAA 2406:da70:4000:230:29b2:751d:268c:4826
IPv6アドレスが確認できました。
1 2 |
dig AAAA logs.ap-northeast-1.amazonaws.com |
既存のAPIエンドポイントではANSWER SECTIONが返ってこなかったので、こちらはIPv6対応ではないようです。
VPCの構成
- IPv6が有効
- パブリックサブネットにもIPv6を設定し、Egress Only Internet Gatewayをアタッチ。
- EC2インスタンスにもIPv6を有効化。
- EC2インスタンスのサブネットに関連づいているルートテーブルにはEgress Only Internet Gatewayへのルートがある。
ルートテーブルからインターネットゲートウェイへのルートを削除
このブログのWebサーバーを起動していたサブネットのルートテーブルからインターネットゲートウェイへのルートを削除しました。
ローカルとS3 VPCゲートウェイエンドポイントとEgress Only Internet Gatewayへのルートが残っています。
EC2 Instance Connect エンドポイントで接続して、curlコマンドで確認してみます。
このブログはCloudFrontでIPv6も有効にしています。
IPv6アドレスで接続できるか確認してみます。
1 2 |
curl -6 -I https://www.yamamanx.com |
HTTP/2 200
content-type: text/html; charset=UTF-8
date: Sun, 05 Jan 2025 12:20:15 GMT
set-cookie: AWSALB=nURfAfYibXPTzTZDN0qOhbYRS9RZjRYk21/dHdC7TxXnlBOP9Z5hLZaGnNSu85Su4l9pGKTzWXa+/oSJKz7bjsSrTG78AgsTDGkwjKqhq5wDx6qMMJ0H163fTdft; Expires=Sun, 12 Jan 2025 12:20:15 GMT; Path=/
set-cookie: AWSALBCORS=nURfAfYibXPTzTZDN0qOhbYRS9RZjRYk21/dHdC7TxXnlBOP9Z5hLZaGnNSu85Su4l9pGKTzWXa+/oSJKz7bjsSrTG78AgsTDGkwjKqhq5wDx6qMMJ0H163fTdft; Expires=Sun, 12 Jan 2025 12:20:15 GMT; Path=/; SameSite=None; Secure
server: nginx/1.24.0
x-powered-by: PHP/8.2.9
link: https://www.yamamanx.com/wp-json/; rel=”https://api.w.org/”
x-cache: Hit from cloudfront
via: 1.1 4fd04861f340431c4c752882593032f0.cloudfront.net (CloudFront)
x-amz-cf-pop: NRT57-P6
x-amz-cf-id: YsR6nBK4kXKiTpw-t3iUuOyoxzaay7YAnAEqCBdUgUOHsOYTkHu2_A==
age: 1312
IPv6アドレスで接続確認できました。
一応IPv4アドレスでも接続できるか確認してみます。
1 2 |
curl -4 -I https://www.yamamanx.com |
curl: (28) Failed to connect to www.yamamanx.com port 443 after 300226 ms: Timeout was reached
タイムアウトしました。
IPv6のみアウトバウンドリクエストが実行できていることがわかりました。
CloudWatchエージェントの確認
CloudWatchエージェントのログを確認してみます。
1 2 |
tail -n 20 /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log |
Aws error received when sending logs to nginx-access/i-04c5fb17fbe602c9a: RequestError: send request failed
caused by: Post “https://logs.ap-northeast-1.amazonaws.com/”: dial tcp 18.181.204.209:443: i/o timeout
CloudWatch LogsのAPIエンドポイントへ接続できずにタイムアウトしています。
CloudWatchエージェント自体が古いのでバージョンを確認しておきます。
1 2 |
cat /opt/aws/amazon-cloudwatch-agent/bin/CWAGENT_VERSION |
1.300026.3b189
でした。
CloudWatchエージェントのバージョンアップ
最新のエージェントにバージョンアップします。
状態を確認します。
1 2 |
amazon-cloudwatch-agent-ctl -a status |
{
“status”: “running”,
“starttime”: “2024-05-05T06:09:26+00:00”,
“configstatus”: “configured”,
“version”: “1.300026.3b189”
}
CloudWatchエージェントを停止します。
1 2 |
amazon-cloudwatch-agent-ctl -a stop |
****** processing amazon-cloudwatch-agent ******
状態を確認します。
1 2 |
amazon-cloudwatch-agent-ctl -a status |
{
“status”: “stopped”,
“starttime”: “”,
“configstatus”: “configured”,
“version”: “1.300026.3b189”
}
止まりました。
既存のCloudWatchエージェントをアンインストールしました。
1 2 |
dnf remove amazon-cloudwatch-agent |
~省略~
Removed:
amazon-cloudwatch-agent-1.300026.3b189-1.aarch64
Complete!
完了しました。
1 2 |
dnf upgrade --releasever=2023.6.20241212 |
アップグレードもしておきます。
エージェントを改めてインストールします。
1 2 |
dnf install amazon-cloudwatch-agent |
~省略~
Installed:
amazon-cloudwatch-agent-1.300044.0-1.amzn2023.aarch64
Complete!
完了しました。
状態とバージョンを確認します。
1 2 |
amazon-cloudwatch-agent-ctl -a status |
{
“status”: “stopped”,
“starttime”: “”,
“configstatus”: “configured”,
“version”: “1.300044.0”
}
1.300044.0になりました。
CloudWatchエージェントの設定
手動で設定ファイルを作成しました
endpoint_overrideでIPv6対応のCloudWatch Logs APIエンドポイントへ送信するようにしています。
ここの設定をするだけで、CloudWatchエージェントのバージョンは気にしなくてよかったかもしれません。
1 2 |
vim /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json |
amazon-cloudwatch-agent.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
{ "agent": { "metrics_collection_interval": 60, "run_as_user": "root" }, "logs": { "endpoint_override": "logs.ap-northeast-1.api.aws", "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/cloud-init-output.log", "log_group_name": "/blog/cloud-init-output", "log_stream_name": "{instance_id}" } ] } } } } |
設定ファイルを反映してCloudWatchエージェントを起動します。
1 2 |
amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json |
CloudWatch Logsにログが書き込まれていました。
この後、AMIを作成し直して、起動テンプレートのバージョンを作成して、パブリックIPv4の割当を無効化して、EC2インスタンスを置き換えました。
サブネットの設定でもパブリックIPv4の自動デフォルト有効化を無効にしておきました。
これでEC2インスタンスをプライベートサブネットにでき、パブリックIPv4を減らせました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
Active Directory認証でAWSマネジメントコンソールにSSO
こちらの2つのサイトを参考にすすめました。 Active Directory資産 …
-
AWS Glueチュートリアル
AWS Glueのマネジメントコンソールの左ペインの一番下にチュートリアルがあり …
-
VPC内のLambdaからVPCエンドポイント経由でSecrets Managerを使う
InternetGatewayのないVPCでMySQLに対して一日数回のレポーテ …
-
Amazon Connectの新規作成からプッシュボタン入力と発信元電話番号をLambdaで処理するまで
とりあえずやりたいことはタイトルに書いたとおり、「電話をかけて、プッシュボタンに …
-
Amazon CloudWatch Anomaly Detectionをダッシュボードに設定
Amazon CloudWatch クロスリージョンクロスアカウントダッシュボー …
-
VPCピア接続した先のVPCインターフェイスエンドポイントを使用する
VPC1とVPC2でピア接続しています。 VPC2にはKMSのインターフェイスエ …
-
Route 53のホストゾーンにサブドメインを登録する
親ドメインを移行しないでサブドメインの DNS サービスを Amazon Rou …
-
Amazon Aurora Serverlessを使い始めてみました(1日経過しての課金結果も)
祝!!! Amazon Aurora ServerlessがGAになりました! …
-
macOSにAWS Schema Conversion Toolをインストール
環境 macOS BigSur バージョン11.5(20G71) MacBook …
-
Amazon API Gatewayでモックを作る
超シンプルなAPI Gatewayのサンプルがほしかったので、ユーザーガイドの手 …