Google Compute Engineのstartup scriptsをgcloudコマンドで取得

Google Compute Engineのstartup scriptsを取得するコマンド。(INSTANCE_NAMEのところはインスタンスの名前を入れます)

$ gcloud compute instances describe INSTANCE_NAME --format json | jq '.metadata.items|from_entries."startup-script"' -r

説明

gcloud compute instances describeコマンドで、startup scriptsをJSONで取得できるのですが、JSONエンコーディングされてしまっています。長いスクリプトをこれで見るのは辛いです。

$ gcloud compute instances describe INSTANCE_NAME --format json | jq '.metadata.items'
[
  {
    "key": "startup-script",
    "value": "echo Hello\n"
  }
]

jqコマンドで from_entries というのを使うと、

[
  {
    "key": "startup-script",
    "value": "echo Hello\n"
  }
]

{
  "startup-script": "echo Hello\n"
}

に変換できます。なので from_entries."startup-script" と書くとスクリプトの部分を取得でき、 -r を付ければできあがりです。

to_entries, from_entries, with_entries | jq Manual (development version)

おまけ:startup scriptsをインスタンスからインスタンスにコピー

gcloud compute instances add-metadataコマンドの--metadata-from-fileは標準入力も受け取れるようですので、パイプでつないで以下のようにすれば、startup scriptsをインスタンスからインスタンスにコピーできました。

$ gcloud compute instances describe SRC_INSTANCE_NAME --format json | jq '.metadata.items|from_entries."startup-script"' -r | gcloud compute instances add-metadata DST_INSTANCE_NAME --metadata-from-file startup-script=/dev/stdin

2021/05/20 追記

インスタンスからはcurlコマンドでも自身のstartup scriptsを取得できます。

$ curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/attributes/startup-script