インスタンス・メタデータの更新

コマンドライン・インタフェース(CLI)またはREST APIドキュメントを使用して、コンピュート・インスタンスのカスタム・メタデータを追加および更新できます。

LaunchInstance操作を使用してインスタンスを作成する場合、インスタンスのカスタム・メタデータをLaunchInstanceDetailsデータ型のmetadataまたはextendedMetadata属性に指定できます。

インスタンスのメタデータを更新するには、UpdateInstance操作を使用して、カスタム・メタデータをUpdateInstanceDetailsデータ型のmetadataまたはextendedMetadata属性に指定します。

metadata属性では、キー/値の文字列ペアがサポートされます。extendedMetadata属性では、ネストしたJSONオブジェクトがサポートされます。これら2つの属性の結合サイズは、最大32,000バイトです。

変更がインスタンス・メタデータ・サービスに反映されるまで最大1分かかる場合があります。

権限については、インスタンスの操作に必要なIAMポリシーを参照してください。

APIの使用

UpdateInstance操作を使用する場合、インスタンスのメタデータは、UpdateInstanceDetailsデータ型のmetadataまたはextendedMetadata属性に指定された値の組合せになります。UpdateInstance 操作のこれらの属性に指定されたキー/値ペアのセットによって、これらの属性の既存の値が置き換えられます。したがって、呼出しのたびに、追加する値だけでなく、インスタンスのすべてのメタデータ値を含める必要があります。UpdateInstanceを呼び出すときに、属性を空にしておくと、その属性の既存のメタデータ値が使用されます。同じメタデータ・キーの値を2回指定することはできません。そうした場合は、キーが重複しているためにUpdateInstance操作が失敗します。

これを理解するために、LaunchInstance操作を使用してインスタンスを作成し、metadata 属性に次のキー/値ペアを指定したサンプル・シナリオについて考えてみます:

"myCustomMetadataKey" : "myCustomMetadataValue"

次に、UpdateInstance操作をコールし、extendedMetadata属性に追加のキー/値ペアを指定して新しいメタデータを追加しながらmetadata属性を空のままにする場合、extendedMetadata属性にmyCustomMetadataKeyのキー/値を含めないでください。このキーはすでに存在するため、操作に失敗します。このmetadata属性の値を指定する場合は、それをインスタンスのメタデータに保持するために、myCustomMetadataKeyキー/値を含める必要があります。このケースでは、次のいずれかの属性に指定できます。

2つの予約済キーuser_dataおよびssh_authorized_keysがあります。これらは、起動時のみにインスタンスに設定でき、後で更新することはできません。メタデータ属性を使用してインスタンスに対してメタデータを追加または更新する場合、これらの両方のキーに起動時に指定された値を必ず含める必要があります。そうしないと、UpdateInstance操作は失敗します。

インスタンス・メタデータの更新のベスト・プラクティス

UpdateInstance操作を使用するとき、推奨事項は次のとおりです:

  • GetInstance操作を使用してインスタンスの既存のカスタム・メタデータを取得して、UpdateInstanceを呼び出す際に、適切な属性に保持する値を含めていることを確認します。メタデータ値は、インスタンスmetadataおよびextendedMetadata属性に返されます。これを示すコード例は、SDK for JavaUpdateInstanceExampleを参照してください。

  • metadata属性を使用して追加されたカスタム・メタデータを更新する場合を除き、extendedMetadata属性を使用してカスタム・メタデータを追加します。それ以外の場合は、user_dataおよびssh_authorized_keys予約済キーに起動時の値を含める必要があります。metadata属性を使用して値を追加する場合に、これらの予約済キーの値を除外するか、別の値を指定すると、UpdateInstance呼出しは失敗します。