すべての仮想マシン(VM)は、メタデータをメタデータ サーバーのディレクトリに保存します。VM からこのメタデータ サーバーの API にアクセスするのに追加の承認は必要ありません。自動的にアクセスできるようになります。このドキュメントの次のセクションで説明するメソッドを使用して、VM メタデータ値を表示してクエリを実行できます。
メタデータ サーバーにアクセスするときにエラーが発生した場合は、メタデータ サーバーへのアクセスに関する問題のトラブルシューティングをご覧ください。
始める前に
- Windows Server VM の場合は、PowerShell 3.0 以降を使用します。コピーしたコードブロックを貼り付ける場合は
ctrl+v
の使用をおすすめします。 - Compute Engine の VM メタデータを定義、分類、配置する方法の基本を確認します。詳細については、VM メタデータについてをご覧ください。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
Python
このページの Python サンプルをローカル開発環境から使用するには、gcloud CLI をインストールして初期化し、自身のユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定してください。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
詳細については、 ローカル開発環境の認証の設定 をご覧ください。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
-
必要なロール
Google Cloud コンソール、Google Cloud CLI、または REST を使用して VM の外部からカスタム メタデータを表示するには、次のロールと権限が必要です。VM 内からメタデータをプログラムでクエリする場合は、VM に接続するためのロールと権限のみが必要です。
VM の外部からカスタム メタデータを表示するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
VM またはプロジェクトに対する Compute インスタンス管理者(v1)(
roles/compute.instanceAdmin.v1
) - VM でサービス アカウントを使用する場合: サービス アカウントまたはプロジェクトに対するサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)
ロールの付与の詳細については、アクセスの管理をご覧ください。
これらの事前定義ロールには、VM の外部からカスタム メタデータを表示するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
VM の外部からカスタム メタデータを表示するには、次の権限が必要です。
- プロジェクトのカスタム メタデータを表示する: プロジェクトに対する
compute.projects.get
- カスタム ゾーン メタデータを表示する: プロジェクトの必要なゾーンのインスタンス設定に対する
compute.instanceSettings.get
-
VM インスタンスのカスタム メタデータを表示する: VM に対する
compute.instances.get
-
VM でサービス アカウントを使用する場合: サービス アカウントまたはプロジェクトに対する
iam.serviceAccounts.actAs
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
プログラムによるメタデータのクエリ
Linux または Windows の VM 内からメタデータ値のエントリをクエリすることで、すべてのメタデータにアクセスできます。VM 内からプログラムでメタデータ値をクエリするには、次のいずれかの方法を使用します(Linux の場合は curl
ツール、Windows の場合は Invoke-RestMethod
などのツールを使用します)。
メタデータ サーバー エンドポイント
VM 内からプログラムでメタデータをクエリするには、次のメタデータ サーバー エンドポイントを使用します。
- どの VM でも、http エンドポイント(
http://metadata.google.internal/computeMetadata/v1
)を使用してメタデータ サーバーにクエリを実行できます。 Shielded VM の場合は、次のいずれかを使用してメタデータ サーバーにクエリを実行できます。
- http エンドポイント:
http://metadata.google.internal/computeMetadata/v1
- https エンドポイント:
https://metadata.google.internal/computeMetadata/v1
。この https エンドポイントはプレビュー版で利用できます。https エンドポイントをクエリする形式については、HTTPS メタデータ サーバー エンドポイントを使用してメタデータをクエリするをご覧ください。
- http エンドポイント:
このドキュメントのほとんどの例では、http エンドポイントを使用しています。ただし、https エンドポイントと http エンドポイントのどちらを使用しても、同じメタデータ エントリにアクセスできます。
メタデータ リクエストの部分
次の表に、メタデータ クエリ リクエストの主要部分を示します。
コンポーネント | 説明 |
---|---|
ルート URL | すべてのメタデータ値は、次のルート URL のサブパスとして定義されます。
|
リクエスト ヘッダー |
このヘッダーにより、そのリクエストがメタデータ値を取得する目的で送信されたものであり、安全でないソースから意図せず送信されたものではないことが示されるため、リクエストしたデータがメタデータ サーバーから返されるようになります。このヘッダーが含まれていないリクエストはメタデータ サーバーで拒否されます。 Metadata-Flavor: Google |
単一のメタデータ エントリに対してクエリを実行する
次のコマンドを使用して、単一のメタデータ エントリをクエリします。
Linux
- Linux VM に接続します。
Linux VM から、
curl
ツールを使用してクエリを実行します。VM インスタンスまたはプロジェクトのメタデータ エントリをクエリするには、次のコマンドを実行します。curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY" -H "Metadata-Flavor: Google"
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
たとえば、VM のブートイメージにクエリを実行するには、次のクエリを実行します。
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/image" -H "Metadata-Flavor: Google"
出力は次のようになります。
projects/rhel-cloud/global/images/rhel-8-v20210122
-
プロジェクト メタデータに保存されている
Windows
- Windows VM に接続します。
Windows VM から、
Invoke-RestMethod
コマンドを使用してクエリを実行します。VM インスタンスまたはプロジェクトのメタデータ エントリをクエリするには、次のコマンドを実行します。$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY") $value
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
たとえば、VM のブートイメージにクエリを実行するには、次のクエリを実行します。
PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/image") $value
出力は次のようになります。
projects/windows-cloud/global/images/windows-server-2019-dc-v20210112
-
プロジェクト メタデータに保存されている
メタデータのディレクトリ リスティングをクエリする
メタデータのディレクトリ リスティングに対してクエリを実行するには、次のコマンドを使用します。ディレクトリ リスティングは、他のメタデータキーを含むメタデータ エントリです。末尾にスラッシュが付いているメタデータ エントリがディレクトリ リスティングです。
Linux
Linux VM に接続します。
Linux VM から VM インスタンスまたはプロジェクトのメタデータ ディレクトリをクエリするには、次のコマンドを実行します。
curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_DIRECTORY/" -H "Metadata-Flavor: Google"
PATH_TO_METADATA_DIRECTORY
は、リスティングを再帰的にクエリする VM インスタンスまたはプロジェクトのメタデータ ディレクトリのパスに置き換えます。次に例を示します。-
attributes
プロジェクト メタデータ ディレクトリ エントリを表示するには、project/attributes/
のパスを指定します。 -
disks
VM インスタンスのメタデータ ディレクトリ エントリを表示するには、instance/disks/
のパスを指定します。
たとえば、VM にアタッチされているディスクのディレクトリである
disks/
エントリについて考えてみましょう。disks/
エントリをクエリするには、次の手順を完了します。ディスク ディレクトリで
curl
ツールコマンドを実行します。user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/" -H "Metadata-Flavor: Google"
出力は次のようになります。
0/ 1/ 2/
ディスクの
0/
ディレクトリに関する詳細情報が必要な場合は、そのディレクトリの特定の URL をクエリで取得できます。user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/" -H "Metadata-Flavor: Google"
出力は次のようになります。
device-name index mode type
次に、ディスク
0/
のディスクタイプ(type
)をクエリするために、次のコマンドを実行します。user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/type" -H "Metadata-Flavor: Google"
出力は次のようになります。
PERSISTENT
-
Windows
disks/
というエントリは、その VM にアタッチされているディスクのディレクトリです。ディスク エントリをクエリするには、次の手順を完了します。
Windows VM に接続します。
Windows VM から VM インスタンスまたはプロジェクトのメタデータ ディレクトリをクエリするには、次のコマンドを実行します。
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_DIRECTORY/") $value
PATH_TO_METADATA_DIRECTORY
は、リスティングを再帰的にクエリする VM インスタンスまたはプロジェクトのメタデータ ディレクトリのパスに置き換えます。次に例を示します。-
attributes
プロジェクト メタデータ ディレクトリ エントリを表示するには、project/attributes/
のパスを指定します。 -
disks
VM インスタンスのメタデータ ディレクトリ エントリを表示するには、instance/disks/
のパスを指定します。
たとえば、VM にアタッチされているディスクのディレクトリである
disks/
エントリについて考えてみましょう。disks/
エントリをクエリするには、次の手順を完了します。ディスク ディレクトリで
Invoke-RestMethod
コマンドを実行します。PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/") $value
出力は次のようになります。
0/ 1/ 2/
ディスク
0/
ディレクトリに関する詳細情報が必要な場合は、そのディレクトリの特定の URL をクエリで取得できます。PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/") $value
出力は次のようになります。
device-name index mode type
次に、ディスク
0/
のディスクタイプ(type
)をクエリするために、次のコマンドを実行します。PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/type") $value
出力は次のようになります。
PERSISTENT
-
ディレクトリ リスティングを再帰的にクエリする
ディレクトリ以下のすべての内容が返されるようにするには、リクエストで recursive=true
クエリ パラメータを使用します。
Linux
Linux VM に接続します。
Linux VM から、
curl
ツールを使用してクエリを実行します。VM インスタンスまたはプロジェクトのメタデータ ディレクトリのリスティングを再帰的にクエリするには、次のコマンドを実行します。curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_DIRECTORY/?recursive=true" -H "Metadata-Flavor: Google"
PATH_TO_METADATA_DIRECTORY
は、リスティングを再帰的にクエリする VM インスタンスまたはプロジェクトのメタデータ ディレクトリのパスに置き換えます。次に例を示します。-
attributes
プロジェクト メタデータ ディレクトリ エントリを表示するには、project/attributes/
のパスを指定します。 -
disks
VM インスタンスのメタデータ ディレクトリ エントリを表示するには、instance/disks/
のパスを指定します。
たとえば、次のコマンドを実行すると、
disks/
ディレクトリのインスタンス メタデータ リスティングを再帰的にクエリします。user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true" -H "Metadata-Flavor: Google"
出力は次のようになります。
[{"deviceName":"boot","index":0,"mode":"READ_WRITE","type":"PERSISTENT"}, {"deviceName":"persistent-disk-1","index":1,"mode":"READ_WRITE","type":"PERSISTENT"}, {"deviceName":"persistent-disk-2","index":2,"mode":"READ_ONLY","type":"PERSISTENT"}]
デフォルトでは、再帰クエリの結果は JSON 形式で返されます。これらの内容をテキスト形式で返されるようにするには、
alt=text
クエリ パラメータを追加します。user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true&alt=text" -H "Metadata-Flavor: Google"
出力は次のようになります。
0/device-name boot 0/index 0 0/mode READ_WRITE 0/type PERSISTENT 1/device-name persistent-disk-1 1/index 1 1/mode READ_WRITE 1/type PERSISTENT 2/device-name persistent-disk-1 2/index 2 2/mode READ_ONLY 2/type PERSISTENT
-
Windows
Windows VM に接続します。
Windows VM から、
Invoke-RestMethod
コマンドを使用してクエリを実行します。VM インスタンスまたはプロジェクトのメタデータ ディレクトリのリスティングを再帰的にクエリするには、次のコマンドを実行します。$value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_DIRECTORY/?recursive=true") $valuePATH_TO_METADATA_DIRECTORY
は、リスティングを再帰的にクエリする VM インスタンスまたはプロジェクトのメタデータ ディレクトリのパスに置き換えます。次に例を示します。-
attributes
プロジェクト メタデータ ディレクトリ エントリを表示するには、project/attributes/
のパスを指定します。 -
disks
VM インスタンスのメタデータ ディレクトリ エントリを表示するには、instance/disks/
のパスを指定します。
たとえば、次のコマンドを実行すると、
disks/
ディレクトリのインスタンス メタデータ リスティングを再帰的にクエリします。PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true") $value
出力は次のようになります。
[{"deviceName":"boot","index":0,"mode":"READ_WRITE","type":"PERSISTENT"}, {"deviceName":"persistent-disk-1","index":1,"mode":"READ_WRITE","type":"PERSISTENT"}, {"deviceName":"persistent-disk-2","index":2,"mode":"READ_ONLY","type":"PERSISTENT"}]
デフォルトでは、再帰クエリの結果は JSON 形式で返されます。これらの内容をテキスト形式で返されるようにするには、
alt=text
クエリ パラメータを追加します。PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true&alt=text") $value
出力は次のようになります。
0/device-name boot 0/index 0 0/mode READ_WRITE 0/type PERSISTENT 1/device-name persistent-disk-1 1/index 1 1/mode READ_WRITE 1/type PERSISTENT 2/device-name persistent-disk-1 2/index 2 2/mode READ_ONLY 2/type PERSISTENT
-
クエリ出力を書式設定する
デフォルトでは、エンドポイントごとにレスポンスの形式があらかじめ定義されています。データを JSON 形式で返すエンドポイントもあれば、文字列として返すエンドポイントもあります。指定されているデフォルトのデータ形式をオーバーライドするには、クエリ パラメータの alt=json
(データを JSON 文字列形式で返す)または alt=text
(データの平文表現を返す)を使用します。
Linux
- Linux VM に接続します。
Linux VM から、
curl
ツールを使用してクエリを実行します。VM インスタンスまたはプロジェクトのメタデータ エントリのクエリ レスポンス データ形式を変更するには、次のコマンドを実行します。curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?alt=DATA_FORMAT" -H "Metadata-Flavor: Google"
次のように置き換えます。
-
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
-
プロジェクト メタデータに保存されている
DATA_FORMAT
: クエリ レスポンス データ形式(例:text
、json
)。
-
例
たとえば、tags
キーではデータが自動的に JSON 形式で返されますが、これをテキスト形式で返されるように変更するには、alt=text
クエリ パラメータを指定します。
デフォルトのキーワード
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags" -H "Metadata-Flavor: Google"
出力は次のようになります。
["http-server", "db-client", "app-server", "mysql-server"]
書式設定を使用したクエリ
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?alt=text" -H "Metadata-Flavor: Google"
出力は次のようになります。
http-server db-client app-server mysql-server
Windows
- Windows VM に接続します。
Windows VM から、
Invoke-RestMethod
コマンドを使用してクエリを実行します。VM インスタンスまたはプロジェクトのメタデータ エントリのクエリ レスポンス データ形式を変更するには、次のコマンドを実行します。$value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?alt=DATA_FORMAT") $value次のように置き換えます。
-
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
-
プロジェクト メタデータに保存されている
DATA_FORMAT
: クエリ レスポンス データ形式(例:text
、json
)。
-
例
たとえば、tags
キーではデータが自動的に JSON 形式で返されますが、これをテキスト形式で返されるように変更するには、alt=text
クエリ パラメータを指定します。
デフォルトのキーワード
PS C:>
$value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags")
$value
出力は次のようになります。
["http-server", "db-client", "app-server", "mysql-server"]
書式設定を使用したクエリ
PS C:>
$value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?alt=text")
$value
出力は次のようになります。
http-server db-client app-server mysql-server
wait-for-change
機能を使用してメタデータの変更をクエリする
メタデータ値は VM の実行中に変更される可能性があるため、メタデータ サーバーでは、wait-for-change
機能を使用して、メタデータの変更について通知を受けることができます。このオプションを使用すると、指定したメタデータが変更された場合にのみリクエストが返されます。
この機能は、カスタム メタデータやサーバー定義メタデータでも使用できます。したがって、VM やプロジェクトに変更が加えられた場合でも、カスタム メタデータ エントリが更新された場合でも、プログラムでその変更に対処できます。
たとえば、tags
キーに対するリクエストを実行すると、tags メタデータの内容が変更されていた場合にのみ結果が返されます。返される結果には、そのメタデータキーの新しい値が含まれます。
wait-for-change
機能では、リクエストとの照合やタイムアウトの設定もできます。
wait-for-change
機能を使用する場合は、次の点を考慮してください。
wait-for-change
リクエストを実行できるのは、メタデータ エンドポイントに対してか、ディレクトリの内容に対してだけです。ディレクトリ リストに対してwait-for-change
リクエストを実行することはできません。これを行うと、リクエストが失敗し、メタデータ サーバーが 400 Invalid Request エラーを返します。サービス アカウント トークンに
wait-for-change
リクエストを実行することはできません。サービス アカウント トークン URL にwait-for-change
リクエストを行うと、リクエストは直ちに失敗し、400 Invalid Request エラーが返されます。
wait-for-change
リクエストを実行するには、メタデータキーのクエリを実行し、?wait_for_change=true
クエリ パラメータを追加します。
Linux
- Linux VM に接続します。
Linux VM から、
curl
ツールを使用してクエリを実行します。VM インスタンスまたはプロジェクトのメタデータ エントリにwait-for-change
リクエストを実行するには、次のコマンドを実行します。curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true" -H "Metadata-Flavor: Google"
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
指定したメタデータキーが変更されると、クエリで新しい値が返されるようになります。
-
プロジェクト メタデータに保存されている
例
この例では、setInstanceTags method
にリクエストが送信されると新しい値が返されるようになります。
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true" -H "Metadata-Flavor: Google"
出力は次のようになります。
http-server db-client
wait-for-change
リクエストは、ディレクトリの内容に対して再帰的に実行することもできます。
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&wait_for_change=true" -H "Metadata-Flavor: Google"
変更があった場合は、新しい内容が返されます。
{"foo":"bar","baz":"bat"}
Windows
- Windows VM に接続します。
Windows VM から、
Invoke-RestMethod
コマンドを使用してクエリを実行します。VM インスタンスまたはプロジェクトのメタデータ エントリにwait-for-change
リクエストを実行するには、次のコマンドを実行します。$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true") $value
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
指定したメタデータキーが変更されると、クエリで新しい値が返されるようになります。
-
プロジェクト メタデータに保存されている
例
指定したメタデータキーが変更されると、クエリで新しい値が返されるようになります。この例では、setInstanceTags method
にリクエストが送信されると新しい値が返されるようになります。
PS C:>
$value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true")
$value
出力は次のようになります。
http-server db-client
wait-for-change
リクエストは、ディレクトリの内容に対して再帰的に実行することもできます。
PS C:>
$value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/attributes?recursive=true&wait_for_change=true")
$value
変更があった場合は、新しい内容が返されます。
{"foo":"bar","baz":"bat"}
ETag を使用する
wait-for-change
クエリを送信すると、そのメタデータの内容が変更されていた場合にレスポンスが返されます。しかし、メタデータの更新と wait-for-change
リクエストの送信の間には固有の競合状態があるため、取得するメタデータ値が最新であることを確認できる確実な方法があると便利です。
その方法として使用できるのが last_etag
クエリ パラメータです。このクエリ パラメータは、リクエストで指定された ETag 値と、メタデータ サーバーに保存されている ETag 値を比較します。ETag 値が一致した場合は、wait-for-change
リクエストが受け入れられます。ETag 値が一致しない場合は、前回 ETag 値を取得してからメタデータの内容が変更されていることになります。この場合は、その最新の値が直ちに返されます。
Linux VM
メタデータキーの最新の ETag 値を取得するには、次の操作を行います。
- Linux VM に接続します。
そのキーに対するリクエストを送信してヘッダーを出力します。これを行うには、
-v
フラグを指定してcurl
ツールを使用します。VM インスタンスまたはプロジェクトのメタデータ エントリの現在の ETag を取得するには、次のコマンドを実行します。curl -v "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY" -H "Metadata-Flavor: Google"
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
たとえば、次のコマンドを実行すると、
tags
インスタンスのメタデータキーの現在の ETag 値を取得します。user@myinst:~$ curl -v "http://metadata.google.internal/computeMetadata/v1/instance/tags" -H "Metadata-Flavor: Google"
出力は次のようになります。
* About to connect() to metadata port 80 (#0) * Trying 169.254.169.254... connected * Connected to metadata (169.254.169.254) port 80 (#0) > GET /computeMetadata/v1/instance/tags HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 > Host: metadata > Accept: */* > < HTTP/1.1 200 OK < Content-Type: application/text < ETag: 411261ca6c9e654e < Date: Wed, 13 Feb 2013 22:43:45 GMT < Server: Metadata Server for VM < Content-Length: 26 < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < http-server db-client
-
プロジェクト メタデータに保存されている
その ETag 値を使用するには、
wait-for-change
リクエストのcurl
ツールコマンドを使用します。インスタンスまたはプロジェクトのメタデータのwait-for-change
リクエストに ETag 値を使用するには、次のコマンドを実行します。curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true&last_etag=ETAG" -H "Metadata-Flavor: Google"
次のように置き換えます。
-
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
-
プロジェクト メタデータに保存されている
ETAG
: メタデータキーの ETag 値。
この例では、次のコマンドで
tags
キーに ETag 値を使用し、インスタンスのメタデータ エントリをクエリします。user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&last_etag=411261ca6c9e654e" -H "Metadata-Flavor: Google"
指定した ETag 値がメタデータ サーバーで照合され、値が変更されていた場合は、メタデータキーの新しい内容が返されます。
-
Windows VM
メタデータキーの最新の ETag 値を取得するには、次の操作を行います。
- Windows VM に接続します。
そのキーに対するリクエストを送信してヘッダーを出力します。Windows では、
Invoke-WebRequest
コマンドを使用します。VM インスタンスまたはプロジェクトのメタデータ エントリの現在の ETag を取得するには、次のコマンドを実行します。$value = (Invoke-WebRequest -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY)
$value.Headers.ETag
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
たとえば、次のコマンドを実行すると、
tags
インスタンスのメタデータキーの現在の ETag 値を取得します。PS C:> $value = (Invoke-WebRequest -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri http://metadata.google.internal/computeMetadata/v1/instance/tags)
$value.Headers.ETag
出力は次のようになります。
* About to connect() to metadata port 80 (#0) * Trying 169.254.169.254... connected * Connected to metadata (169.254.169.254) port 80 (#0) > GET /computeMetadata/v1/instance/tags HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 > Host: metadata > Accept: / > < HTTP/1.1 200 OK < Content-Type: application/text < ETag: 411261ca6c9e654e < Date: Wed, 13 Feb 2013 22:43:45 GMT < Server: Metadata Server for VM < Content-Length: 26 < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < http-server db-client
-
プロジェクト メタデータに保存されている
これで、この ETag 値を
wait-for-change
リクエストで使用できます。インスタンスまたはプロジェクトのメタデータのwait-for-change
リクエストに ETag 値を使用するには、次のコマンドを実行します。$value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true&last_etag=ETAG") $value次のように置き換えます。
-
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
-
プロジェクト メタデータに保存されている
ETAG
: メタデータキーの ETag 値。
この例では、次のコマンドで
tags
キーに ETag 値を使用し、インスタンスのメタデータ エントリをクエリします。PS C:> $value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&last_etag=411261ca6c9e654e") $value指定した ETag 値がメタデータ サーバーで照合され、値が変更されていた場合は、メタデータキーの新しい内容が返されます。
-
Python
次の Python サンプルは、メタデータ サーバーの変更をプログラムで監視する方法を示しています。
このサンプルでは、最初の ETag が 0
に設定されています。メタデータ サーバーは、ETag 値が 0
のレスポンスを返しません。リクエストで前回の ETag として 0
を指定すると、メタデータ サーバーから最新の値と ETag が返されます。これにより、最初の値と ETag を取得するために必要なコードを省略できます。
タイムアウトを設定する
wait-for-change
リクエストで、一定の秒数が経過するとリクエストがタイムアウトになるようにするには timeout_sec
パラメータを設定します。timeout_sec
パラメータは、リクエストの待機時間を指定の秒数に制限します。その上限に達すると、メタデータキーの現在の内容が返されます。
timeout_sec
パラメータを設定した場合、指定の秒数が経過すると、メタデータ値が実際に変更されているかどうかに関係なく、常に結果が返されます。タイムアウトに設定できるのは整数値だけです。
Linux
- Linux VM に接続します。
Linux VM から、
curl
ツールを使用してクエリを実行します。VM インスタンスまたはプロジェクトのメタデータ エントリにタイムアウト値を指定してwait-for-change
リクエストを実行するには、次のコマンドを実行します。curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true&timeout_sec=TIMEOUT" -H "Metadata-Flavor: Google"
次のように置き換えます。
-
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
-
プロジェクト メタデータに保存されている
TIMEOUT
: タイムアウト値。
-
たとえば、次のコマンドは、360 秒後にタイムアウトするように設定された wait-for-change
リクエストを実行します。
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&timeout_sec=360" -H "Metadata-Flavor: Google"
Windows
- Windows VM に接続します。
Windows VM から、
Invoke-RestMethod
コマンドを使用してクエリを実行します。VM インスタンスまたはプロジェクトのメタデータ エントリにタイムアウト値を指定してwait-for-change
リクエストを実行するには、次のコマンドを実行します。$value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true&timeout_sec=TIMEOUT") $value次のように置き換えます。
-
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
-
プロジェクト メタデータに保存されている
TIMEOUT
: タイムアウト値。
-
たとえば、次のコマンドは、360 秒後にタイムアウトするように設定された wait-for-change
リクエストを実行します。
PS C:>
$value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&timeout_sec=360")
$value
ステータス コード
wait-for-change
リクエストを実行すると、リクエストが成功したかどうかを示す標準の HTTP ステータス コードが返されます。結果がエラーになる場合は、ネットワークの状態が原因でリクエストが失敗して、エラーコードが返されている可能性があります。そのような場合は、それらのエラーが認識されて適切に処理されるようにして、アプリケーションをフォールト トレラントにする必要があります。
メタデータ サーバーから返される可能性があるステータスを以下に示します。
ステータス | 説明 |
---|---|
HTTP 200 |
正常終了しました。値が変更されたか、指定されている timeout_sec に達したため、リクエストは正常に終了しました。 |
Error 400 |
リクエストが無効です。クエリを修正してリクエストを再試行してください。 |
Error 404 |
指定したメタデータ値は存在しません。このエラーは、変更の待機中にメタデータが削除された場合にも返されます。 |
Error 503 |
一時的なサーバーエラーか一時的なメンテナンス イベントが発生しました。リクエストを再試行してください。 |
HTTPS メタデータ サーバー エンドポイントを使用してメタデータをクエリする
HTTPS メタデータ サーバー エンドポイント(https://metadata.google.internal/computeMetadata/v1
)は、メタデータ サーバーと VM の間で情報を送信する際のセキュリティを強化します。
HTTPS メタデータ サーバー エンドポイントを使用するには、次の要件を確認してください。
プロジェクトが許可リストに追加されたら、VM を作成できます。VM は次の要件を満たす必要があります。
- ゲスト環境が VM 上で実行されている必要があります。
- VM が Shielded VM である必要があります。これは、HTTPS メタデータ サーバーが証明書の検証に Unified Extensible Firmware Interface(UEFI)と Virtual Trusted Platform Module(vTPM)を必要とするためです。
HTTPS メタデータ サーバー エンドポイントへのクエリの処理方法の概要については、HTTPS メタデータ サーバー エンドポイントをご覧ください。https エンドポイントと http エンドポイントのどちらを使用しても、メタデータ サーバーに同じクエリを実行できます。ただし、https エンドポイントを呼び出すには、クライアント ID 証明書のパスと、場合によってはルート証明書のパスを指定する必要があります。
次のコマンドは、https エンドポイントを使用してメタデータ サーバーにクエリを実行する方法を示しています。
Linux
Linux VM に接続します。
Linux VM から、
curl
ツールを使用してクエリを実行し、クライアント ID 証明書を指定します。必要に応じて、ルート証明書を指定します。curl "https://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY" \ -E CLIENT_CERTIFICATE \ [--cacert ROOT_CERTIFICATE] \ -H "Metadata-Flavor: Google"
次のように置き換えます。
-
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
-
プロジェクト メタデータに保存されている
CLIENT_CERTIFICATE
: クライアント ID 証明書のパス:/run/google-mds-mtls/client.key
- 省略可:
ROOT_CERTIFICATE
: ルート証明書/run/google-mds-mtls/root.crt
へのパス。
たとえば、VM のブートイメージにクエリを実行するには、次のクエリを実行します。
user@myinst:~$ curl "https://metadata.google.internal/computeMetadata/v1/instance/image" \ -E /run/google-mds-mtls/client.key \ -H "Metadata-Flavor: Google"
出力は次のようになります。
projects/rhel-cloud/global/images/rhel-8-v20210122
エラー メッセージが表示された場合は、トラブルシューティングのドキュメントをご覧ください。
-
Windows
Windows VM に接続します。
次のいずれかのコマンドを使用して、クライアント ID 証明書を取得します。
$cert = Get-PfxCertificate -FilePath "C:\ProgramData\Google\Compute Engine\mds-mtls-client.key.pfx"
$cert = Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Issuer -like "google.internal" }
Windows VM から
Invoke-RestMethod
コマンドを使用し、クライアント ID 証明書を指定してクエリを実行します。PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} -Certificate CLIENT_CERTIFICATE ` -Uri "https://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY") $value
次のように置き換えます。
CLIENT_CERTIFICATE
: VM 上のクライアント ID 証明書のパス。これは、前のステップで設定した$cert
変数です。-
PATH_TO_METADATA_ENTRY
は、値をクエリする VM インスタンスまたはプロジェクトのメタデータキーのパスに置き換えます。キーがインスタンスまたはプロジェクト ディレクトリのサブディレクトリにある場合は、サブディレクトリも含めてください。次に例を示します。-
プロジェクト メタデータに保存されている
project-id
メタデータキーを表示するには、project/project-id
を指定します。 -
VM インスタンス メタデータに保存されている
image
メタデータキーを表示するには、instance/image
を指定します。 -
プロジェクトまたは VM インスタンス メタデータの attributes サブディレクトリに保存できる
enable-oslogin
を表示するには、ユースケースに応じてproject/attributes/enable-oslogin
またはinstance/attributes/enable-oslogin
を指定します。
-
プロジェクト メタデータに保存されている
たとえば、Windows Server 2019 VM のブートイメージにクエリを実行するには、次のクエリを実行します。
PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} -Certificate $cert ` -Uri "https://metadata.google.internal/computeMetadata/v1/instance/image") $value
出力は次のようになります。
projects/windows-cloud/global/images/windows-server-2019-dc-v20210112
制限事項
X-Forwarded-For
ヘッダーを含むリクエストは、メタデータ サーバーで自動的に拒否されます。このヘッダーは、一般に、リクエストにプロキシが使用されていることを示します。この場合、承認されたユーザーからのリクエストではない可能性があります。そのようなリクエストは、セキュリティ上の理由からすべて拒否されます。curl
コマンドを使用してサーバーからメタデータを取得する場合、一部のエンコードされた文字はリクエストパスでサポートされません。エンコードされた文字は、クエリパスでのみサポートされています。たとえば、次のリクエストは機能しない場合があります。
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/123456789-compute%40developer.gserviceaccount.com/?query_path=https%3A%2F%2Flocalhost%3A8200%2Fexample%2Fquery&another_param=true" -H "Metadata-Flavor: Google"
このリクエストを機能させるには、リクエストパスのサポートされていないエンコードされた文字(
%40
)を同等の許容値(@
)に置き換える必要があります。curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/1234567898-compute@developer.gserviceaccount.com/?query_path=https%3A%2F%2Flocalhost%3A8200%2Fexample%2Fquery&another_param=true" -H "Metadata-Flavor: Google"
以下の表に、リクエストパスでサポートされていないエンコード文字をまとめています。
エンコードされた文字 許容値 %21 !
%24 $
%27 '
%28 (
%29 )
%2A *
%2C ,
%40 @
VM のカスタム メタデータを表示する
Compute Engine VM のカスタム メタデータ値は、次のいずれかの方法で表示できます。
プロジェクトのメタデータを表示する
プロジェクト内のすべての VM に適用されるカスタム メタデータを表示するには、次のいずれかの方法を使用します。
コンソール
Google Cloud コンソールで、[メタデータ] ページに移動します。
[メタデータ] ページに、プロジェクトのすべてのカスタム プロジェクト メタデータ エントリが一覧表示されます。
gcloud
プロジェクトのメタデータをクエリするには、gcloud compute project-info describe
コマンドを使用します。
gcloud compute project-info describe --flatten="commonInstanceMetadata[]"
出力は次のようになります。
--- fingerprint: HcSFdS_1_1I= items: - key: ssh-keys value: USERNAME:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWZ... kind: compute#metadata
REST
プロジェクトのメタデータをクエリするには、project.get
メソッドに GET
リクエストを送信します。
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
出力は次のようになります。
"kind": "compute#project", "id": "XXXXXXX", "creationTimestamp": "2018-12-10T08:34:33.616-08:00", "name": "YOUR_PROJECT", "commonInstanceMetadata": { "kind": "compute#metadata", "fingerprint": "XXXXXCdg=", "items": [ { "key": "enable-guest-attributes", "value": "TRUE" }, { "key": "enable-os-inventory", "value": "true" }, { "key": "enable-osconfig", "value": "TRUE" }, { "key": "enable-oslogin", "value": "TRUE" }, { "key": "sshKeys", "value": "XXXXX" } ] }, ...
ゾーン メタデータを表示する
プロジェクトの特定のゾーンにあるすべての VM インスタンスに適用されるカスタム メタデータを表示するには、次のいずれかの方法を使用します。
gcloud
カスタム ゾーン メタデータをクエリするには、gcloud compute project-zonal-metadata describe
コマンドを使用します。
gcloud compute project-zonal-metadata describe \ --zone=ZONE \ --project=PROJECT_ID
次のように置き換えます。
PROJECT_ID
: プロジェクト IDZONE
: ゾーン メタデータを表示するゾーン。
出力は次のようになります。
{ "fingerprint": "VlRIl8dx9vk=", "metadata": { items: { "key-1": "value-1", "key-2": "value-2" } } }
REST
カスタム ゾーン メタデータをクエリするには、instanceSettings().get
メソッドに GET
リクエストを送信します。
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceSettings
次のように置き換えます。
PROJECT_ID
: プロジェクト IDZONE
: ゾーン メタデータを表示するゾーン。
出力は次のようになります。
{ "fingerprint": "VlRIl8dx9vk=", "metadata": { items: { "key-1": "value-1", "key-2": "value-2" } } }
インスタンスのメタデータを表示する
プロジェクト内の単一の VM に適用されるメタデータを表示するには、次のいずれかの方法を使用します。
コンソール
- Google Cloud コンソールで [VM インスタンス] ページに移動します。
メタデータを表示する VM の名前をクリックします。
この VM の SSH 認証鍵。[セキュリティとアクセス] セクションで、[SSH 認証鍵] フィールドを表示します。
値
None
は、インスタンスのメタデータに保存された SSH 認証鍵がないことを示します。その他の値は、SSH 認証鍵がインスタンスのメタデータに格納されていることを示します。
プロジェクトの SSH 認証鍵。[セキュリティとアクセス] セクションで、[プロジェクト全体の SSH 認証鍵をブロック] フィールドを表示します。
値
On
は、インスタンス メタデータのメタデータキーblock-project-ssh-keys
の値がTRUE
であることを示します。値
Off
は、メタデータキーblock-project-ssh-keys
の値がFALSE
であるか、キーが設定されていないことを示します。
その他すべてのカスタム メタデータ。[カスタム メタデータ] セクションを表示します。SSH 認証鍵メタデータ以外の、すべてのカスタム メタデータのキーと値が表示されます。
gcloud
gcloud compute instances describe
コマンドを使用して、インスタンスのメタデータをクエリします。
gcloud compute instances describe VM_NAME --flatten="metadata[]"
VM_NAME
は、メタデータを検索する VM の名前に置き換えます。
出力は次のようになります。
--- fingerprint: MTgTJ5m-Cjs= items: - key: enable-oslogin value: 'true' kind: compute#metadata
REST
特定の VM のメタデータをクエリするには、GET
リクエストを instances.get
メソッドに送信します。
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
出力は次のようになります。
...... "metadata": { "kind": "compute#metadata", "fingerprint": "XXXXXXVo=", "items": [ { "key": "enable-oslogin", "value": "true" } ] },....
次のように置き換えます。
PROJECT_ID
: プロジェクト IDZONE
: VM を配置するゾーンVM_NAME
: VM の名前
次のステップ
- VM メタデータの詳細を確認する。
- カスタム メタデータの設定方法を学習する。
- ゲスト属性を設定してクエリする方法を学習する。