こんにちは。AWS CLIが好きな福島です。
今回は、先月発表されたVPC Reachability Analyzerを AWS CLIで操作するコマンドをご紹介いたします。
コンソールから操作する方法は、設楽が以下のブログにまとめているため、 ご興味ある方は、参考にしていただければ幸いです。
はじめに
VPC Reachability Analyzerとは
VPC内のリソース間の接続テストを実行できる構成分析ツールです。
分析する流れ
通信を分析するためには、パスと呼ばれる通信情報(送信元と送信先、プロトコルや宛先のポート等)を作成する必要があります。 パスを作成できたら、そのパスを分析する流れになります。
なので、流れは、 パスの作成 ⇒ パスの分析 ですね。
注意点
VPC Reachability Analyzerは非常に良い機能ではありますが、 コストが1回の分析あたり、$0.10かかり安くはないため、コストを計算しつつ分析を実施しましょう。
◆Amazon VPC Reachability Analyzer Pricing
また、CLIのバージョンは2.1.14以上にしてください。
コマンド
VPC Reachability Analyzer関連のコマンドは以下の通りです。
パス関連
# パスの作成 aws ec2 create-network-insights-path # パスの削除 aws ec2 delete-network-insights-path # パスの一覧 aws ec2 describe-network-insights-paths
分析関連
# 分析の開始 aws ec2 start-network-insights-analysis # 分析結果の削除 aws ec2 delete-network-insights-analysis # 分析結果の一覧 aws ec2 describe-network-insights-analyses
コマンドのご紹介
ENIとIPの紐づけチェック
パスの送信元、送信先に指定できるリソースはいくつかありますが、 今回は、よく使うであろうNetowrk InterfaceのリソースIDを指定いたします。
指定できるリソースの詳細は、以下をご参照ください。
◆VPC ReachabilityAnalyzerのしくみ https://docs.aws.amazon.com/vpc/latest/reachability/how-reachability-analyzer-works.html
基本的に分析する際には、IPアドレスは分かっていると思いますので、
IPアドレスとNetwork InterfaceのリソースIDを出力するコマンドをご紹介いたします。
※VPC Reachability Analyzer関連のコマンドではありません。
ヘッダー無し
aws ec2 describe-network-interfaces \ --query "NetworkInterfaces[].[InterfaceType,NetworkInterfaceId,PrivateIpAddress,Description]" \ --output text | sort -Vk 3 | tr "\t" "," | column -s, -t
- 実行結果
interface eni-05acf70b78dc40582 10.0.10.46 Primary network interface interface eni-027ae3205bc46ea55 10.0.10.60 Primary network interface interface eni-042361da187f4bc0f 10.88.0.59 Primary network interface interface eni-0668f60567b51feef 10.88.0.60
ヘッダー有り
echo "InterfaceType,NetworkInterfaceId,PrivateIpAddress,Description" > /tmp/awscli.tmp ;\ aws ec2 describe-network-interfaces --query "NetworkInterfaces[].[InterfaceType,NetworkInterfaceId,PrivateIpAddress,Description]" --output text | sort -Vk 3 | tr "\t" "," >> /tmp/awscli.tmp;\ column -s, -t /tmp/awscli.tmp;\ rm /tmp/awscli.tmp
- 実行結果
InterfaceType NetworkInterfaceId PrivateIpAddress Description interface eni-05acf70b78dc40582 10.0.10.46 Primary network interface interface eni-027ae3205bc46ea55 10.0.10.60 Primary network interface interface eni-042361da187f4bc0f 10.88.0.59 Primary network interface interface eni-0668f60567b51feef 10.88.0.60
パスの作成
Network InterfaceのリソースIDが分かったら、環境変数を設定します。
SOURCE=eni-010e4fc0404918e00 DESTINATION=eni-05acf70b78dc40582 PROTCOL=TCP or UDP DESTINATION_PORT=80
環境変数設定後、以下のコマンドでパスを作成します。
aws ec2 create-network-insights-path \ --source ${SOURCE} \ --destination ${DESTINATION} \ --protocol ${PROTCOL} \ --destination-port ${DESTINATION_PORT}
- 実行結果
"NetworkInsightsPath": { "NetworkInsightsPathId": "nip-0b15d1e907997156e", "NetworkInsightsPathArn": "arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:network-insights-path/nip-0b15d1e907997156e", "CreatedDate": "2021-01-16T05:47:42.300Z", "Source": "eni-010e4fc0404918e00", "Destination": "eni-05acf70b78dc40582", "Protocol": "tcp", "DestinationPort": 80 } }
パス一覧
パスの作成ができたら、以下のコマンドでパスの一覧を取得できます。
ヘッダー無し
aws ec2 describe-network-insights-paths --query "NetworkInsightsPaths[].[NetworkInsightsPathId,Source,Destination,Protocol,DestinationPort,CreatedDate]" --output text
- 実行結果
nip-0b15d1e907997156e eni-010e4fc0404918e00 eni-05acf70b78dc40582 tcp 80 2021-01-16T05:47:42.300000+00:00 nip-0252a6ac7b7ba0976 eni-042361da187f4bc0f eni-0ab18e709dd4acc7f tcp None 2021-01-16T05:13:44.381000+00:00 nip-060f3f137ee2d1713 i-0f6126b7aeedfabd6 i-050536efdd9dc1126 tcp 80 2021-01-16T04:29:03.967000+00:00 nip-0109297a48f7e1875 i-0f6126b7aeedfabd6 i-050536efdd9dc1126 tcp None 2021-01-16T04:23:15.518000+00:00
ヘッダー有り
echo "NetworkInsightsPathId Source Destination Protocol DestinationPort CreatedDate" > /tmp/awscli.tmp ;\ aws ec2 describe-network-insights-paths --query "NetworkInsightsPaths[].[NetworkInsightsPathId,Source,Destination,Protocol,DestinationPort,CreatedDate]" --output text >> /tmp/awscli.tmp;\ column -t /tmp/awscli.tmp;\ rm /tmp/awscli.tmp
- 実行結果
NetworkInsightsPathId Source Destination Protocol DestinationPort CreatedDate nip-0b15d1e907997156e eni-010e4fc0404918e00 eni-05acf70b78dc40582 tcp 80 2021-01-16T05:47:42.300000+00:00 nip-0252a6ac7b7ba0976 eni-042361da187f4bc0f eni-0ab18e709dd4acc7f tcp None 2021-01-16T05:13:44.381000+00:00 nip-060f3f137ee2d1713 i-0f6126b7aeedfabd6 i-050536efdd9dc1126 tcp 80 2021-01-16T04:29:03.967000+00:00 nip-0109297a48f7e1875 i-0f6126b7aeedfabd6 i-050536efdd9dc1126 tcp None 2021-01-16T04:23:15.518000+00:00
パスの分析
パスが作成できていることを確認できたら、パスのIDを引数に指定し分析を開始します。
PATH_ID=nip-0b15d1e907997156e
環境変数設定後、以下のコマンドでパスを分析を行います。
aws ec2 start-network-insights-analysis \ --network-insights-path-id ${PATH_ID}
- 実行結果
{ "NetworkInsightsAnalysis": { "NetworkInsightsAnalysisId": "nia-03510ecee0a07e8ed", "NetworkInsightsAnalysisArn": "arn:aws:ec2:ap-northeast-1:xxxxxxxxxxx:network-insights-analysis/nia-03510ecee0a07e8ed", "NetworkInsightsPathId": "nip-0b15d1e907997156e", "StartDate": "2021-01-17T03:31:46.553000+00:00", "Status": "running" } }
パスの分析結果
パスの分析の実行を開始したら、状態を確認します。
ヘッダー無し
aws ec2 describe-network-insights-analyses --query "NetworkInsightsAnalyses[].[NetworkInsightsAnalysisId,NetworkInsightsPathId,StartDate,Status,NetworkPathFound]" --output text
- 実行結果
nia-03510ecee0a07e8ed nip-0b15d1e907997156e 2021-01-17T03:31:46.553000+00:00 succeeded False nia-05d06fb06bbec7731 nip-0252a6ac7b7ba0976 2021-01-16T05:13:45.697000+00:00 succeeded False nia-035ef9de2f99ba705 nip-060f3f137ee2d1713 2021-01-16T04:29:27.677000+00:00 succeeded True nia-0517f660a59c48bf7 nip-0109297a48f7e1875 2021-01-16T04:24:41.627000+00:00 succeeded True nia-0c30075f93a1376b6 nip-0109297a48f7e1875 2021-01-16T04:23:43.862000+00:00 succeeded False
ヘッダー有り
echo "NetworkInsightsAnalysisId NetworkInsightsPathId StartDate Status NetworkPathFound" > /tmp/awscli.tmp ;\ aws ec2 describe-network-insights-analyses --query "NetworkInsightsAnalyses[].[NetworkInsightsAnalysisId,NetworkInsightsPathId,StartDate,Status,NetworkPathFound]" --output text >> /tmp/awscli.tmp;\ column -t /tmp/awscli.tmp;\ rm /tmp/awscli.tmp
- 実行結果
NetworkInsightsAnalysisId NetworkInsightsPathId StartDate Status NetworkPathFound nia-03510ecee0a07e8ed nip-0b15d1e907997156e 2021-01-17T03:31:46.553000+00:00 succeeded False nia-05d06fb06bbec7731 nip-0252a6ac7b7ba0976 2021-01-16T05:13:45.697000+00:00 succeeded False nia-035ef9de2f99ba705 nip-060f3f137ee2d1713 2021-01-16T04:29:27.677000+00:00 succeeded True nia-0517f660a59c48bf7 nip-0109297a48f7e1875 2021-01-16T04:24:41.627000+00:00 succeeded True nia-0c30075f93a1376b6 nip-0109297a48f7e1875 2021-01-16T04:23:43.862000+00:00 succeeded False
Status欄(4列目)に表示されているのは、分析の進行状況になります。 succeededになっていれば、分析が完了しています。
NetworkPathFound欄(5列目)が分析結果となっており、
True:正常
False:異常(通信経路に問題あり)
となります。
また、どこに原因があるのかは、コマンドでも出力されますが、さすがに見づらいため、 CLIでは通信が正常か異常かだけを確認し、詳細はコンソールから確認した方が良いかと思います。
特定のパスでフィルター
PATH_ID=nip-0b15d1e907997156e
aws ec2 describe-network-insights-analyses \ --network-insights-path-id ${PATH_ID} \ --query "NetworkInsightsAnalyses[].[NetworkInsightsAnalysisId,NetworkInsightsPathId,StartDate,Status,NetworkPathFound]" --output text
特定の分析でフィルター
ANALYZER_ID=nia-03510ecee0a07e8ed
aws ec2 describe-network-insights-analyses \ --network-insights-analysis-ids ${ANALYZER_ID} \ --query "NetworkInsightsAnalyses[].[NetworkInsightsAnalysisId,NetworkInsightsPathId,StartDate,Status,NetworkPathFound]" --output text
- 実行結果
nia-03510ecee0a07e8ed nip-0b15d1e907997156e 2021-01-17T03:31:46.553000+00:00 succeeded False
おまけ
パスの削除
PATH_ID=nip-077586219ba440497
aws ec2 delete-network-insights-path \ --network-insights-path-id ${PATH_ID}
パスの分析結果の削除
ANALYZER_ID=nip-077586219ba440497
aws ec2 delete-network-insights-analysis \ --network-insights-analysis-id ${ANALYZER_ID}