【AWS CLI】VPC Reachability Analyzer編

記事タイトルとURLをコピーする

こんにちは。AWS CLIが好きな福島です。

今回は、先月発表されたVPC Reachability Analyzerを AWS CLIで操作するコマンドをご紹介いたします。

コンソールから操作する方法は、設楽が以下のブログにまとめているため、 ご興味ある方は、参考にしていただければ幸いです。

blog.serverworks.co.jp

はじめに

VPC Reachability Analyzerとは

VPC内のリソース間の接続テストを実行できる構成分析ツールです。

分析する流れ

通信を分析するためには、パスと呼ばれる通信情報(送信元と送信先、プロトコルや宛先のポート等)を作成する必要があります。 パスを作成できたら、そのパスを分析する流れになります。

なので、流れは、 パスの作成 ⇒ パスの分析 ですね。

注意点

VPC Reachability Analyzerは非常に良い機能ではありますが、 コストが1回の分析あたり、$0.10かかり安くはないため、コストを計算しつつ分析を実施しましょう。

◆Amazon VPC Reachability Analyzer Pricing

aws.amazon.com

また、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}

福島 和弥 (記事一覧)

2019/10 入社

AWS CLIが好きです。