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 にのみ伝播されます。プロジェクト ゾーンのメタデータは、障害の分離に役立ち、信頼性を高めます。また、プロジェクトのゾーン メタデータを使用して、既存の鍵のプロジェクト全体の値をオーバーライドし、ゾーン固有の値を使用することもできます。

    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 のままです。

次のステップ