jqでAWSの東京リージョンIPの差分を知る

弊社もいくつか追加でサービス使いはじめたようなので ip-ranges.json ファイルをチェックする機会がたまに出てきそうです。

current IP address ranges in JSON

AWS IP Address Ranges – AWS General Reference

curlで落としてみました。

$ curl -O https://ip-ranges.amazonaws.com/ip-ranges.json
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  261k  100  261k    0     0   188k      0  0:00:01  0:00:01 --:--:--  187k

まずはどんな種類のサービスについてIP確保されてるのか見ました。

$ jq '[.prefixes[]|.service]|unique' ip-ranges.json
[
  "AMAZON",
  "AMAZON_CONNECT",
  "API_GATEWAY",
  "CLOUD9",
  "CLOUDFRONT",
  "CODEBUILD",
  "DYNAMODB",
  "EC2",
  "EC2_INSTANCE_CONNECT",
  "GLOBALACCELERATOR",
  "ROUTE53",
  "ROUTE53_HEALTHCHECKS",
  "S3",
  "WORKSPACES_GATEWAYS"
]

ap-northeast-1 でフィルターして行数を数えました。

$ jq '[.prefixes[]|select(.region=="ap-northeast-1")|\
       .service]\
       |unique|length' ip-ranges.json
13

どうも1つサービスが少なさそうです。いろいろとGoogleって以下の差分を取る方法を知りました。答えは “Route 53” ってことらしいでDNSが東京リージョン(たぶん他の多くのリージョン)でIPが無いらしい。少しGooglりましたが裏付ける情報は見つかりませんでした。

jq を3回起動してるので遅いです笑。jq で配列の差分を取る例は上で引用した AWS Documentでも出てきてますね。ただし僕の例では unique した際にsort されてるはずなので ‘-‘ operator より高速に diff する方法があるかもしれません。

$ jq -n --argjson tokyo \
  "$(jq '[.prefixes[]|select(.region=="ap-northeast-1")|.service]|unique' ip-ranges.json)" \
  --argjson global \
  "$(jq '[.prefixes[]|.service]|unique' ip-ranges.json)" \
  '{tokyo:$tokyo,global:$global}|.global-.tokyo'
[
  "ROUTE53"
]

以下のページも参考にしました。ありがとうございました。

読み込むjsonデータをさらに”jq”コマンドでデータ整形して取得する

[jq] 複数のjsonデータを変数に格納して便利に使う方法 | Tips of Rubbish

ただし `–slurpfile` ではなく `–argjson` にしました。両者ほぼ同じです。

2 thoughts on “jqでAWSの東京リージョンIPの差分を知る

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s