VM メタデータについて


すべての仮想マシン(VM)インスタンスは、メタデータ サーバーにメタデータを保存します。VM からメタデータ サーバーの API にアクセスするのに追加の承認は必要ありません。自動的にアクセスできるようになります。メタデータは Key-Value ペアとして保存されます。

このドキュメントでは、VM メタデータの概要と、VM メタデータのタイプとプロパティについて説明します。

VM メタデータの使用

以下のセクションでは、メタデータ エントリを使用して VM を管理するいくつかのシナリオについて説明します。

起動とシャットダウンのスクリプト

メタデータ サーバーは、起動スクリプトおよびシャットダウン スクリプトと組み合わせて使用すると特に便利です。メタデータ サーバーを使用して、追加の承認を行わずに、VM に関する固有の情報をプログラムで取得できるからです。

たとえば、起動スクリプトで VM の外部 IP のメタデータの Key-Value ペアを取得して、その IP を使用してデータベースを設定できます。Compute Engine の事前定義されたメタデータキーはすべての VM で同じであるため、スクリプトはそのまま再利用できます。VM ごとに更新する必要はありません。これにより、アプリケーションのコードの安定性が向上します。

ホスト メンテナンス

メタデータ サーバーは、scheduling/ メタデータ ディレクトリ エントリと maintenance-event 属性を使用して、VM のスケジューリング オプションに関する情報を提供します。これらのメタデータ値を使用して、メンテナンス イベントが近くなったときに通知することで、イベントに備えることができます。詳細については、ライブ マイグレーション通知の取得をご覧ください。

ゲスト属性

ゲスト属性は、VM での実行中にアプリケーションから書き込み可能な特定の型のカスタム メタデータです。ゲスト属性は、頻繁に変更されない少量のデータが必要なユースケースにのみ使用します。ゲスト属性の詳細については、ゲスト属性の設定とクエリをご覧ください。

メタデータのセキュリティに関する考慮事項

メタデータ サーバーにリクエストを送信して情報を取得する際、そのリクエストやそれに対するメタデータ レスポンスが、VM を実行する物理ホストの外に出ることはありません。

ただし、メタデータ URL をクエリできるプロセスであれば、メタデータ サーバーのすべての値にアクセスできます。これには、サーバーに書き込むカスタム メタデータ値も含まれます。機密性の高い値をメタデータ サーバーに書き込むときや、サードパーティのプロセスを実行するときは、注意が必要です。

定義済みメタデータキーとカスタム メタデータキー

各メタデータ エントリは、Key-Value ペアとしてメタデータ サーバーに保存されます。メタデータキーでは大文字と小文字が区別されます。キーは、事前定義されたメタデータキーまたはカスタム メタデータキーのいずれかにすることができます。

事前定義されたメタデータキー

事前定義されたメタデータキーは、Compute Engine によって作成されるメタデータキーです。VM を作成すると、Compute Engine がその VM の一部のキーのメタデータ値(VM インスタンス ID やプロジェクト ID など)を自動的に設定します。Compute Engine が値を自動的に設定しない事前定義キーについては、システム構成に応じて使用可能な値のセットから選択できます。 たとえば、VM の OS Login を有効にするために、その VM の事前定義キー enable-oslogin の値を TRUE に設定できます。この VM の OS Login を無効にするには、キーの値を FALSE に更新します。更新できるのはこれらのキーの値のみで、キー自体は更新できません。

事前定義されたメタデータキーとこれらのキーのリストについては、事前定義されたメタデータキーをご覧ください。

カスタム メタデータキー

カスタム メタデータを使用すると、個々の VM またはプロジェクトで、独自のメタデータの Key-Value ペアを作成して使用できます。新しいカスタム メタデータキーの追加、既存のキーの値の更新、不要なカスタム メタデータ エントリの削除を行うことができます。 カスタム メタデータの設定は、プロジェクト内の VM に任意の値を渡す場合に便利です。また、起動スクリプトとシャットダウン スクリプトを作成する場合にも役立ちます。

VM のカスタム メタデータを追加、更新、削除する方法については、カスタム メタデータを構成するをご覧ください。

メタデータの種類

VM メタデータ エントリは、個々の VM またはプロジェクトに固有の情報を提供します。メタデータは、メタデータを設定するスコープに基づいて、プロジェクト、ゾーン、インスタンスのメタデータに分けられます。

プロジェクトのメタデータ

プロジェクト メタデータはプロジェクト スコープで定義され、プロジェクト内のすべての VM に適用される情報を提供します。このメタデータを設定すると、メタデータ エントリがそのプロジェクト内のすべての VM に伝播されます。

プロジェクトのメタデータを設定するには、事前定義されたメタデータキーとカスタム メタデータキーの両方を使用できます。詳細については、事前定義されたプロジェクト メタデータキープロジェクトのカスタム メタデータを設定する方法をご覧ください。

ゾーン メタデータ

ゾーン メタデータは、プロジェクト内のゾーンスコープで定義され、そのプロジェクトの特定のゾーンにある VM に関する情報を提供します。ゾーン メタデータを設定すると、メタデータ エントリは、そのプロジェクトで構成されたゾーン内のすべての VM に伝播されます。プロジェクト メタデータと比較して、ゾーン メタデータは障害の分離に役立ち、信頼性を高めることができます。

Compute Engine には、ゾーン メタデータ用の事前定義キーはありません。ゾーン メタデータを設定するには、独自のカスタム メタデータ キーを作成する必要があります。方法については、カスタム ゾーン メタデータを設定するをご覧ください。

インスタンス メタデータ

インスタンス メタデータは、特定の VM インスタンスに関する情報を提供します。インスタンス メタデータは、各 VM インスタンスに対して個別に設定します。

インスタンス メタデータの設定には、事前定義されたメタデータキーとカスタム メタデータキーの両方を使用できます。事前定義されたインスタンス メタデータキーとカスタム インスタンス メタデータを設定する方法の詳細を確認してください。

メタデータの配置

Compute Engine は、VM とプロジェクトのメタデータのキーと値をディレクトリ リストに保存し、管理します。メタデータの種類に応じて、Compute Engine はメタデータ エントリを次のいずれかのディレクトリに保存します。

メタデータのタイプ ディレクトリ
  • プロジェクトのメタデータ
  • ゾーン メタデータ
http://metadata.google.internal/computeMetadata/v1/project/
インスタンス メタデータ
http://metadata.google.internal/computeMetadata/v1/instance/

各ディレクトリには、メタデータ エントリが Key-Value ペアの形式で格納されます。一部のメタデータ エントリは、他のメタデータキーを含むディレクトリでもあります。ディレクトリとして機能するメタデータ エントリは、メタデータキー名の末尾にスラッシュ(/)でマークされます。たとえば、/project/attributes/ は、他のメタデータキーが含まれる project/ ディレクトリの下のディレクトリです。独自のメタデータ ディレクトリ リストを作成するには、カスタム メタデータ エントリを作成するときに、メタデータキー名の末尾にスラッシュ(/)を使用する必要があります。

プロジェクトとゾーン メタデータ エントリは、同じ project/ ディレクトリに保存されます。プロジェクト レベルとゾーンレベルの VM について、同じカスタム メタデータキーに異なる値を設定すると、これらのキーのゾーン メタデータ値は、それぞれのゾーンにおけるプロジェクトのメタデータよりも優先されます。

  • すでにプロジェクトの値が設定されているメタデータキーに、ゾーン メタデータ値を追加すると、Compute Engine によって、この指定されたゾーン内にある VM のプロジェクト メタデータ値がオーバーライドされ、/project ディレクトリがゾーン値で更新されます。
  • すでにゾーン メタデータ値が設定されているメタデータキーに、新しいプロジェクト全体のメタデータ値を追加しても、何も変更されません。Compute Engine では、特定のゾーンの /project ディレクトリにゾーン メタデータの値が保持されます。
  • 特定のゾーンのカスタム メタデータキーにゾーン メタデータ値を指定しない場合は、キーにプロジェクト メタデータ値が設定されていれば、それらのゾーンの VM では引き続きプロジェクト メタデータ値が保持されます。

たとえば、key-1=value-1 というプロジェクト全体のメタデータペアを定義するとします。また、us-central1-a ゾーンに対してのみ、key-1=zonal-value-1 というゾーン メタデータのペアを定義したとします。プロジェクトの us-central1-a ゾーン内のすべての VM は、メタデータのペアとして key-1=zonal-value1 を継承します。key-1 に対してゾーン メタデータを設定していない他のゾーンのすべての VM では、メタデータのペアが key-1=value-1 のままです。

次のステップ