google cloudのラベルとAWSのタグに関する制約

Google Cloudにおいてリソースへのメタデータとして利用できるラベルという機能がある。

ラベルを使用してリソースを整理する  |  Compute Engine Documentation  |  Google Cloud

これはAWSタグ機能とほぼ同等の機能を提供する。

docs.aws.amazon.com

Google Cloudの場合

Google Cloudにおけるラベルの要件は以下の通り

  • 各リソースには、最大 64 個のラベルを設定できます。
  • ラベルは、Key-Value ペアでなければなりません。
  • キーは 1 文字以上、63 文字までにする必要があります。空にすることはできません。値は 63 文字以下にします。空にすることもできます。
  • キーと値には、小文字、数字、アンダースコア、ダッシュのみを使用できます。すべての文字は UTF-8エンコードする必要があります。国際文字も使用できます。キーは、小文字または国際文字で始める必要があります。
  • ラベルのキー部分は、単一のリソース内では一意である必要があります。ただし、複数のリソースで同じキーを使用できます。

利用できる記号が制限されていること、大文字が使えないこと、文字数が63文字までなところはだいぶ辛い。 特に記号の制限が辛い。terraformでリソース構築するときに構築に利用したterraformのコードのリポジトリパスをラベルとして付与したかった。パスを指定しようとすると63文字も注意が必要になる。

AWSの場合

AWSタグ機能は全リソースで共通仕様であるかは保証されておらず、詳細な仕様は各サービスのドキュメントを参照してねとある。 AWSは汎用的な機能がサービスごとに異なるケースが多々あり、だいぶあやしい。

AWS のサービス が提供するタグ付け機能の詳細については、ドキュメントAWS インデックス のサービスのドキュメントを参照してください。

ただし、実際のところはほとんどのサービスでタグ仕様は同一のようだった。 EC2のタグ制限は以下の通り。

  • リソースあたりのタグの最大数 - 50 件
  • タグキーは、リソースごとにそれぞれ一意である必要があります。また、各タグキーに設定できる値は 1 つのみです。
  • キーの最大長 - UTF-8 の 128 Unicode 文字
  • 値の最大長 - UTF-8 の 256 Unicode 文字
  • 使用できる文字
    • EC2 ではタグ内に任意の文字を使用できますが、他の AWS のサービスでは制限があります。すべての AWS のサービスで使用できる文字は、UTF-8 で表現できる英字 (a-z、A-Z)、数字 (0-9)、スペース、および + - = . _ : / @ です。
    • インスタンスメタデータインスタンスタグを有効にすると、インスタンスタグキーは文字 (a-z、A-Z)、数字 (0-9)、および次の文字のみを使用できます: + - = . , _ : @。インスタンスタグキーは、スペースまたは / を含めることはできず、. (1 つのピリオド)、.. (2 つのピリオド)、または _index のみを含めることはできません。詳細については、インスタンスメタデータを使用して EC2 インスタンスのタグを表示するを参照してください。
  • タグのキーと値は大文字と小文字が区別されます。
  • aws: プレフィックスAWS 用に限定されています。タグにこのプレフィックスが付いたタグキーがある場合、タグのキーまたは値を編集、削除することはできません。aws: プレフィックスを持つタグは、リソースあたりのタグ数の制限時には計算されません。

インスタンスメタデータインスタンスタグを有効にすると利用可能な機能に制限が掛かることは知らなかった。 このとき付与したタグが破棄されるので、メタデータでのみ読み取れないのか、別の文字で置換されるのかはドキュメントからは読み取れなかった。