はじめに
とあるスクリプトで、 curl inet-ip.info
を実行してGCE インスタンスの
外部 IP を取得していたのですが、9月の末頃 inet-ip.info がダウンしていたようで…
IP 取得できずバッチが失敗する状態が数日続きました。
※ 10/1 に確認した際は復旧してました
そこで、外部のサービスに頼らず gcloud
コマンドで外部IPの
取得をしてみようと思った次第です。
gcloud での外部IP取得方法
最初はこんなのを考えました。長い…
gcloud compute instances list --filter="name='インスタンス名'" --format json | jq -r '.[].networkInterfaces[].accessConfigs[].natIP'
でも jq
なくても出来るはずだよね?と思ってもう少し調べた所
下のコマンドで取れました。やっぱり長い…つーか、jsonパース方法変わっただけやん。
gcloud compute instances list --filter="name='インスタンス名'" --format="value(networkInterfaces[].accessConfigs[0].natIP)"
終わりに
IP調べるのに結構長いコマンドが必要なんですね。
フィルター芸を覚えればもっといろいろな情報引き出せそう。
20190904追記
ちょっとフィルターやってみました。
Dataprocのノード情報を取得してテーブル表示する、的な。
実行コマンド
gcloud dataproc clusters describe クラスタ名 \
--region=リージョン \
--format="multi( \
config:format='table[box]( \
softwareConfig.imageVersion, \
gceClusterConfig.zoneUri.basename() \
)', \
config:format='table[box]( \
masterConfig.numInstances:label=NUM_MASTER, \
masterConfig.machineTypeUri.basename():label=MASTER_TYPE, \
workerConfig.numInstances:label=NUM_WOKER, \
workerConfig.machineTypeUri.basename():label=WOKER_TYPE \
)', \
config:format='table[box]( \
secondaryWorkerConfig.numInstances:label=NUM_PREEMPT, \
secondaryWorkerConfig.machineTypeUri.basename():label=PREEMPT_TYPE \
)' \
)"
出力
+---------------+-------------------+
| IMAGE_VERSION | ZONE_URI |
+---------------+-------------------+
| 1.3.16-deb9 | asia-northeast1-c |
+---------------+-------------------+
+------------+---------------+-----------+---------------+
| NUM_MASTER | MASTER_TYPE | NUM_WOKER | WOKER_TYPE |
+------------+---------------+-----------+---------------+
| 1 | n1-standard-4 | 3 | n1-standard-4 |
+------------+---------------+-----------+---------------+
+-------------+--------------+
| NUM_PREEMPT | PREEMPT_TYPE |
+-------------+--------------+
| | |
+-------------+--------------+
参考にしたもの
https://cloud.google.com/sdk/gcloud/reference/topic/formats
https://cloud.google.com/blog/products/gcp/filtering-and-formatting-fun-with
https://cloudplatform-jp.googleblog.com/2016/06/gcloud.html