Transit Gateway アタッチメントがどこのアカウントの VPC に接続されているか確認したいので一覧を CSV で出力する機会がありましたので出力方法を紹介します。
私が欲しかったものまとめ
tgw.csv
ファイル書き出しコマンド
aws ec2 describe-transit-gateway-attachments\
--query "TransitGatewayAttachments[].{\
Name:Tags[?Key=='Name'] | [0].Value,\
TGWID:TransitGatewayId,\
TGWAID:TransitGatewayAttachmentId,\
ResourceOwnerID:ResourceOwnerId,\
ResourceID:ResourceId,\
State:State,\
CreateTime:CreationTime\
}" --output json\
| jq -r '
["NameTag","TGWID","TGWAttachmentID","DistAccount","DistVPC-ID","Status","CreateDate"],
( .[] | [.Name, .TGWID, .TGWAID, .ResourceOwnerID ,.ResourceID ,.State ,.CreateTime]) | @csv' > tgw.csv
出力したファイルを Excel で開いた様子
作業過程と説明
aws ec2 describe-transit-gateway-attachments
コマンドで Transit Gateway のアタッチメント情報を出力できます。
describe-transit-gateway-attachments — AWS CLI 2.13.7 Command Reference
出力内容確認
コマンドを実行して出力項目を確認します。
aws ec2 describe-transit-gateway-attachments
実行結果
{
"TransitGatewayAttachments": [
{
"TransitGatewayAttachmentId": "tgw-attach-xxxxxxxxxxxxxx",
"TransitGatewayId": "tgw-xxxxxxxxxxxxxx",
"TransitGatewayOwnerId": "xxxxxxxxxxxxxx", # Transit Gateway がある AWS アカウント ID
"ResourceOwnerId": "xxxxxxxxxxxxxx", # アタッチ先の AWS アカウント ID
"ResourceType": "vpc",
"ResourceId": "vpc-xxxxxxxxxxxxxx", # アタッチ先の VPC ID
"State": "available",
"Association": {
"TransitGatewayRouteTableId": "tgw-rtb-xxxxxxxxxxxxxx",
"State": "associated"
},
"CreationTime": "2023-01-01T01:00:00+00:00",
"Tags": [
{
"Key": "Name",
"Value": "xxxxxxxxxxxxxx" # Name タグがあれば表示
}
]
},
--- 以下省略 ---
シンプルな JSON 形式に変換
実行結果の Key/Value を参考に一覧に必要な項目(Key)を見繕います。後続の処理を楽にするために Key は任意の名前に置き換えます。
aws ec2 describe-transit-gateway-attachments\
--query "TransitGatewayAttachments[].{\
Name:Tags[?Key=='Name'] | [0].Value,\
TGWID:TransitGatewayId,\
TGWAID:TransitGatewayAttachmentId,\
ResourceOwnerID:ResourceOwnerId,\
ResourceID:ResourceId,\
State:State,\
CreateTime:CreationTime\
}" --output json
必要な項目のみのシンプルな JSON 形式で出力できるようになりました。必要な項目はお好みで調整してください。
実行結果
[
{
"Name": "xxxxxxxxxxxxxx",
"TGWID": "tgw-xxxxxxxxxxxxxx",
"TGWAID": "tgw-attach-xxxxxxxxxxxxxx",
"ResourceOwnerID": "xxxxxxxxxxxxxx",
"ResourceID": "vpc-xxxxxxxxxxxxxx",
"State": "available",
"CreateTime": "2023-01-01T01:00:00+00:00"
},
--- 以下省略 ---
CSV 形式へ変換
jq
コマンドで CSV 形式へ変換してファイルに書き出します。
aws ec2 describe-transit-gateway-attachments\
--query "TransitGatewayAttachments[].{\
Name:Tags[?Key=='Name'] | [0].Value,\
TGWID:TransitGatewayId,\
TGWAID:TransitGatewayAttachmentId,\
ResourceOwnerID:ResourceOwnerId,\
ResourceID:ResourceId,\
State:State,\
CreateTime:CreationTime\
}" --output json\
| jq -r '
["NameTag","TGWID","TGWAttachmentID","DistAccount","DistVPC-ID","Status","CreateDate"],
( .[] | [.Name, .TGWID, .TGWAID, .ResourceOwnerID ,.ResourceID ,.State ,.CreateTime]) | @csv' > tgw.csv
tgw.csv
"NameTag","TGWID","TGWAttachmentID","DistAccount","DistVPC-ID","Status","CreateDate"
"xxxxxxxxxxxxxxx","tgw-xxxxxxxxxxxxxx","tgw-attach-xxxxxxxxxxxxxx","121234578901","vpc-xxxxxxxxxxxxxx","available","2020-08-07T11:29:11+00:00"
"xxxxxxxxxxxxxxx","tgw-xxxxxxxxxxxxxx","tgw-attach-xxxxxxxxxxxxxx","345678912345","vpc-xxxxxxxxxxxxxx","available","2019-01-15T14:22:45+00:00"
"xxxxxxxxxxxxxxx","tgw-xxxxxxxxxxxxxx","tgw-attach-xxxxxxxxxxxxxx","789012345678","vpc-xxxxxxxxxxxxxx","available","2021-07-20T03:34:56+00:00"
書き出した CSV ファイルを Excel で開くとこの様な一覧になります。
以上が Transit Gateay アタッチメント一覧の取得方法でした。
CSV でなくても良いならより手軽な方法
jq
で CSV 変換が煩わしかったり、とりあえず一覧を確認できれば良いときは--output table
で出力した結果でも十分かと思います。
aws ec2 describe-transit-gateway-attachments\
--query "TransitGatewayAttachments[].{\
Name:Tags[?Key=='Name'] | [0].Value,\
TGWID:TransitGatewayId,\
TGWAID:TransitGatewayAttachmentId,\
ResourceOwnerID:ResourceOwnerId,\
ResourceID:ResourceId,\
State:State,\
CreateTime:CreationTime\
}" --output table
実行結果
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| DescribeTransitGatewayAttachments |
+---------------------------+----------------------------+------------------+-----------------+------------+------------------+---------------------+
| CreateTime | Name | ResourceID | ResourceOwnerID | State | TGWAID | TGWID |
+---------------------------+----------------------------+------------------+-----------------+------------+------------------+---------------------+
| 2020-03-20T10:09:15+00:00| xxxxxxxxxxxxxxxxxx | vpc-xxxxxxxxxxxxxx | 378945213450 | available | tgw-attach-xxxxxxxxxxxxxx | tgw-xxxxxxxxxxxxxx |
| 2021-07-26T11:32:21+00:00| xxxxxxxxxxxxxxxxxx | vpc-xxxxxxxxxxxxxx | 892031678459 | available | tgw-attach-xxxxxxxxxxxxxx | tgw-xxxxxxxxxxxxxx |
| 2022-11-05T06:24:15+00:00| xxxxxxxxxxxxxxxxxx | vpc-xxxxxxxxxxxxxx | 147580394267 | available | tgw-attach-xxxxxxxxxxxxxx | tgw-xxxxxxxxxxxxxx |
Transit Gateway アタッチメント経由の通信有無
Transit Gateway のアタッチメント一覧を出力できました。これらのアタッチメントを経由した通信が行われているのか確認するにはどうしたらよいでしょうか?
CloudWatch のメトリクスから通信量を確認する方法と、Transit Gateway のログを確認する 2 つの方法がございます。
CloudWatch メトリクス
CloudWatchのメトリクスから、TransitGateway → TransitGatewayAttachiment ごとを選択します。Transit Gateway アタッチメント ID で検索してフィルタできます。
メトリクス名は BytesIn/Out か、PacketsIn/Out の値からアタッチメント毎の通信量はチェックできます。ですが、アクセスがない状態でどの程度の通信量が発生しているかわかりません。確認するとしたら、他と比べて通信量が多い、少ない、長い期間でみたときに通信量が跳ねているアタッチメント ID は何かしらの通信で利用されている可能性があります。
Transit Gateway Flow Logs
通信内容を確認したい場合は Transit Gateway Flow Logs を設定し、S3へログを保存していただき Athena で通信ログを調査できます。
VPC へアタッチした経緯不明で通信内容から確認しないといけない状況でしたら、一定期間ログを収集していただき、通信ログを追う地道な確認作業でアタッチメント経由の通信が行われているか調査できます。
- [アップデート] Amazon VPC Flow LogsがTransit Gatewayをサポートしました | DevelopersIO
- Transit Gateway Flow LogsをAthenaで分析してみた | DevelopersIO
本当にログを確認するまで重要度が高いのか、作業工数を鑑みて実施するかはご判断ください。
おわりに
CSV 出力のコマンドが見つからなかったので参考までにご紹介しました。
AWS アカウントが数百あり、Transit Gateway で多くの VPC と VPC を接続をしていました。古くにアタッチしたものもあり、今でも必要なアタッチメントなのか棚卸しする際に一覧があると便利ということで出力してみました。