すべての仮想マシン(VM)は、メタデータをメタデータ サーバーのディレクトリに保存します。VM からこのメタデータ サーバーの API にアクセスするのに追加の承認は必要ありません。自動的にアクセスできるようになります。このドキュメントの次のセクションで説明するメソッドを使用して、VM メタデータ値を表示してクエリを実行できます。
メタデータ サーバーにアクセスするときにエラーが発生した場合は、メタデータ サーバーへのアクセスに関する問題のトラブルシューティングをご覧ください。
始める前に
- Windows Server VM の場合は、PowerShell 3.0 以降を使用します。コピーしたコードブロックを貼り付ける場合は
ctrl+vの使用をおすすめします。 - Compute Engine の VM メタデータを定義、分類、配置する方法の基本を確認します。詳細については、VM メタデータについてをご覧ください。
-
まだ設定していない場合は、認証を設定します。認証では、 Google Cloud サービスと API にアクセスするための ID が確認されます。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。
gcloud init外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
- Set a default region and zone.
Python
ローカル開発環境でこのページの Python サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
Google Cloud CLI をインストールします。
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
詳細については Set up authentication for a local development environment をご覧ください。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Google Cloud CLI をインストールします。
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
必要なロール
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)またはその IP アドレス(169.254.169.254)を使用してメタデータ サーバーにクエリを実行できます。IPv6 専用インスタンスでも IPv4 アドレスを使用します。 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 のサブパスとして定義されます。
- http エンドポイント:
http://metadata.google.internal/computeMetadata/v1
http://169.254.169.254/computeMetadata/v1
http://metadata.goog/computeMetadata/v1
- https エンドポイント(プレビュー):
プレビュー ステージでは、この URL のみがサポートされます。https://metadata.google.internal/computeMetadata/v1
リクエスト ヘッダー このヘッダーにより、そのリクエストがメタデータ値を取得する目的で送信されたものであり、安全でないソースから意図せず送信されたものではないことが示されるため、リクエストしたデータがメタデータ サーバーから返されるようになります。このヘッダーが含まれていないリクエストはメタデータ サーバーで拒否されます。
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") $valuePATH_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/のパスを指定します。 -
disksVM インスタンスのメタデータ ディレクトリ エントリを表示するには、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/") $valuePATH_TO_METADATA_DIRECTORYは、リスティングを再帰的にクエリする VM インスタンスまたはプロジェクトのメタデータ ディレクトリのパスに置き換えます。次に例を示します。-
attributesプロジェクト メタデータ ディレクトリ エントリを表示するには、project/attributes/のパスを指定します。 -
disksVM インスタンスのメタデータ ディレクトリ エントリを表示するには、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/のパスを指定します。 -
disksVM インスタンスのメタデータ ディレクトリ エントリを表示するには、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/のパスを指定します。 -
disksVM インスタンスのメタデータ ディレクトリ エントリを表示するには、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") $valuePATH_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") $valueHTTPS メタデータ サーバー エンドポイントを使用してメタデータをクエリする
HTTPS メタデータ サーバー エンドポイント(
https://metadata.google.internal/computeMetadata/v1)は、メタデータ サーバーと VM の間で情報を送信する際のセキュリティを強化します。HTTPS メタデータ サーバー エンドポイントを使用するには、VM が次の要件を満たしている必要があります。
- ゲスト環境が VM 上で実行されている必要があります。
- VM の
disable-https-mds-setupメタデータキーがFALSEに設定されている必要があります。 - 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。ルート証明書が OS トラストストアに追加されていない場合は、この値を指定する必要があります。
たとえば、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 @
ステータス コード
メタデータ サーバーにリクエストを送信すると、リクエストが成功したかどうかを示す標準の HTTP ステータス コードが返されます。ネットワークの状態やホストイベントが原因で、メタデータ サーバーがリクエストに失敗し、エラーコードが返されることがあります。そのような場合は、それらのエラーが認識されて適切に処理されるようにして、アプリケーションをフォールト トレラントにする必要があります。
返される可能性のあるステータス コードの一覧については、サーバーコードのトラブルシューティングをご覧ください。
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 メタデータの詳細を確認する。
- カスタム メタデータの設定方法を学習する。
- ゲスト属性を設定してクエリする方法を学習する。
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-10-19 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["わかりにくい","hardToUnderstand","thumb-down"],["情報またはサンプルコードが不正確","incorrectInformationOrSampleCode","thumb-down"],["必要な情報 / サンプルがない","missingTheInformationSamplesINeed","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-10-19 UTC。"],[],[]] -