VM マネージド インスタンス グループのサイズ提案の Recommender

VM インスタンス グループのサイズ提案の Recommender は、Compute Engine 仮想マシンのマネージド インスタンスのリソース使用率を最適化するのに役立ちます。これらのレコメンデーションは、Cloud Monitoring サービスが過去 8 日間に集めたシステム指標または指標に基づいて自動的に生成されます。レコメンデーションに従って、グループのマシンタイプのサイズを変更して、VM リソースをより効率的に使用できます。

推奨サイズ提案は、サイズの適正化ともいいます。

詳細については、マネージド インスタンス グループの推奨サイズ提案の適用をご覧ください。

Recommender ID

VM インスタンス グループのサイズ提案の Recommender ID は次のとおりです。

google.compute.instanceGroupManager.MachineTypeRecommender

この ID は、gcloud コマンドまたは RESTRPC API を使用して、レコメンデーションを表示および変更するときに使用します。

場所

Recommender の gcloud コマンドと API では、表示または変更するレコメンデーションのロケーションを指定する必要があります。VM インスタンス グループの推奨サイズ提案の場合は、gcloud と API インタラクションのロケーションとして Compute Engine のゾーンを使用してください。

権限

必要な権限

インスタンス グループの推奨サイズ提案を表示するには:

  • recommender.computeInstanceGroupManagerMachineTypeRecommendations.get
  • recommender.computeInstanceGroupManagerMachineTypeRecommendations.list

インスタンス グループの推奨サイズ提案の状態を変更するには:

  • recommender.computeInstanceGroupManagerMachineTypeRecommendations.update

権限の付与

これらの権限を付与するには、次のようにロールを割り当てます。

  • レコメンデーションのみを表示するには、Compute Recommender の閲覧者roles/recommender.computeViewer)のロールを付与します。
  • レコメンデーションを表示および変更するには、Compute Recommender の管理者roles/recommender.computeAdmin)のロールを付与します。
  • serviceusage.services.use 権限を付与するには、Service Usage ユーザーのロール(roles/serviceusage.serviceUsageConsumer)を付与します。

別の方法として、次の基本ロールを付与することもできます。

  • レコメンデーションだけを表示するには、閲覧者roles/viewer)のロールを付与します。
  • レコメンデーションを表示および変更するには、オーナーroles/owner)または編集者roles/editor)のロールを付与します。
    • これらのロールには serviceusage.services.use 権限も含まれます。

レコメンデーションのサブタイプ

この Recommender は、次のサブタイプをサポートしています。

  • CHANGE_MACHINE_TYPE - 現在の使用量に基づいて、仮想マシン マネージド インスタンス グループの現在のマシンタイプの変更を推奨します。

オペレーション グループ

VM インスタンス グループのサイズ提案の Recommender によって生成される各レコメンデーションには、レコメンデーションを適用するために必要な一連のアクションを示すオペレーション グループがあります。

マネージド インスタンス グループ内の VM インスタンスの推奨サイズ提案

VM インスタンス グループの推奨サイズ提案には、2 つの OperationGroup エンティティが含まれます。

最初のエンティティでは、compute.googleapis.com/InstanceTemplate リソースに対する 3 つのオペレーションを指定します。

  1. test オペレーション。現在のマシンタイプがレコメンデーションが作成されたときと同じであることを確認します。例:

    {
     "action": "test",
     "resourceType": "compute.googleapis.com/InstanceTemplate",
     "resource": "//compute.googleapis.com/projects/example-project/global/instanceTemplates/it-name",
     "path": "/properties/machineType"
     "value": "n1-standard-4"
    }
    
  2. copy オペレーション。新しいインスタンス テンプレート リソースを作成します。次に例を示します。

    {
       "action": "copy",
       "resourceType": "compute.googleapis.com/InstanceTemplate",
       "sourceResource": "//compute.googleapis.com/projects/example-project/global/instanceTemplates/it-name",
       "resource": "//compute.googleapis.com/projects/p1/global/instanceTemplates/$new-it-name",
       "sourcePath": "/",
       "path": "/"
     }
    

    ここで、$new-it-name は新しいインスタンス テンプレート名です。

  3. replace オペレーション。新しいインスタンス テンプレートでのマシンタイプを、推奨されたタイプに置き換えます。

    {
      "action": "replace",
      "resourceType": "compute.googleapis.com/InstanceTemplate",
      "resource": "//compute.googleapis.com/projects/example-project/global/instanceTemplates/$new-it-name",
      "path": "/properties/machineType",
      "value" : "n1-standard-8"
    }
    

    ここで、$new-it-name は新しいインスタンス テンプレート名です。

2 番目のエンティティでは、compute.googleapis.com/InstanceGroupManager リソースに対して replace オペレーションを指定します。このオペレーションによって、現在のインスタンス テンプレート it-name が、推奨されたマシンタイプを使用する上記で指定した新しいテンプレートに置き換えられます。

 {
   "action" : "replace",
   "resourceType": "compute.googleapis.com/InstanceGroupManager",
   "resource": "//compute.googleapis.com/projects/example-project/zones/z1/instanceGroupManagers/instance-group",
   "path": "/versions/*/instanceTemplate",
   "pathValueMatchers": {
     "/versions/*/instanceTemplate": {
       "matchesPattern": ".*global/instanceTemplates/it-name"
     }
   }
   "value": "global/instanceTemplates/$new-it-name"
 }

ここで、$new-it-name は新しいインスタンス テンプレート名です。

次の例は、マネージド インスタンス グループの推奨サイズ提案を一覧表示する方法を示しています。

  1. 必要な環境変数を設定します。

    PROJECT=TARGET_PROJECT_ID
    LOCATION=LOCATION_ID
    RECOMMENDER=google.compute.instanceGroupManager.MachineTypeRecommender
    

    ここで

    • TARGET_PROJECT_ID は、推奨事項を一覧表示するプロジェクトです。現在のプロジェクトとは異なるプロジェクトを指定できます。

      • gcloud コマンドには、プロジェクト ID を使用する必要があります。
      • API リクエストには、プロジェクト番号またはプロジェクト ID を使用できます。プロジェクト番号をおすすめします。

      プロジェクト番号は、API コマンドと gcloud コマンドの両方のレスポンスで返されます。

    • LOCATION_ID は、レコメンデーションに関連付けられたリソースがある Google Cloud ゾーンus-central1-a など)です。

  2. VM インスタンス グループの推奨サイズ提案を一覧表示します。

    gcloud

    次の情報を入力します。

    gcloud recommender recommendations list \
        --project=${PROJECT} \
        --location=${LOCATION} \
        --recommender=${RECOMMENDER} \
        --format=json
    

    REST

    次の情報を入力します。

    curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
        -H "x-goog-user-project: ${PROJECT}" \
        "https://recommender.googleapis.com/v1/projects/${PROJECT}/locations/${LOCATION}/recommenders/${RECOMMENDER}/recommendations"
    

出力は次のようになります。

[
  {
    "content": {
      "operationGroups": [
        {
          "operations" : [
            {
              "action": "test",
              "resourceType": "compute.googleapis.com/InstanceTemplate",
              "resource": "//compute.googleapis.com/projects/test-project/global/instanceTemplates/it-name",
              "path": "/properties/machineType"
              "value": "n1-standard-4"
            },
            {
              "action": "copy",
              "resourceType": "compute.googleapis.com/InstanceTemplate",
              "sourceResource": "//compute.googleapis.com/projects/test-project/global/instanceTemplates/it-name",
              "resource": "//compute.googleapis.com/projects/test-project/global/instanceTemplates/$new-it-name",
              "sourcePath": "/",
              "path": "/"
            },
            {
              "action": "replace",
              "resourceType": "compute.googleapis.com/InstanceTemplate",
              "resource": "//compute.googleapis.com/projects/test-project/global/instanceTemplates/$new-it-name",
              "path": "/name",
              "value" : "$new-it-name"
            },
            {
              "action": "replace",
              "resourceType": "compute.googleapis.com/InstanceTemplate",
              "resource": "//compute.googleapis.com/projects/test-project/global/instanceTemplates/$new-it-name",
              "path": "/properties/machineType",
              "value" : "n1-standard-8"
            }
          ]
        },
        {
          "operations" : [
            {
              "action" : "replace",
              "resourceType": "compute.googleapis.com/InstanceGroupManager",
              "resource": "//compute.googleapis.com/projects/test-project/zones/us-west1-a/instanceGroupManagers/igm-name",
              "path": "/versions/*/instanceTemplate",
              "pathValueMatchers": {
                "/versions/*/instanceTemplate": {
                  "matchesPattern" : ".*global/instanceTemplates/it-name"
                }
              }
              "value": "global/instanceTemplates/$new-it-name"
            }
          ]
        }
      ]
    },
    "description" : "Improve performance by changing machine type from n1-standard-4 to n1-standard-8.",
    "etag": "\"eebe926c12f923da\"",
    "name": "projects/823742397239/locations/us-west1-a/recommenders/google.compute.instanceGroupManager.MachineTypeRecommender/recommendations/0fd31b24-cc05-4132-8431-ed54a22dd4f1",
    "lastRefreshTime": {
      "seconds": 1543912652
    },
    "primaryImpact": {
      "category": "PERFORMANCE"
    },
    "additionalImpact": [
      "category": "COST",
      "costProjection": {
        "cost": {"currencyCode": "USD", "units": 50},
        "duration": { "seconds": 2592000 }
      }
    ],
    "stateInfo": {
      "state": "ACTIVE"
    },
    "recommenderSubtype": "CHANGE_MACHINE_TYPE"
  }
]

Recommender の gcloud コマンドと API を使用してレコメンデーションに関する追加タスクを実行する手順については、API の使用をご覧ください。