Dienst-Rollouts verwalten

Auf dieser Seite wird beschrieben, wie Sie Service Infrastructure verwenden, um schrittweise Rollouts einer Dienstkonfiguration durchzuführen.

Das Aktualisieren der Konfiguration ist bei einem Dienst im Produktionsbetrieb riskant und kann zu einem Ausfall führen. Mithilfe der Service Management API können Sie Konfigurationsänderungen schrittweise bereitstellen und so die Auswirkungen möglicher fehlerhafter Dienstkonfigurationen in Grenzen halten.

Mit der Methode services.rollouts.createinitiieren Sie ein Rollout, in dessen Rahmen Sie mehrere Versionen von Dienstkonfigurationen bereitstellen und definieren können, wie diese während der Laufzeit genutzt werden sollen. Es können höchstens 5 Dienstkonfigurationen gleichzeitig bereitgestellt werden.

Hinweise

Wenn Sie die Beispiele in diesem Leitfaden verwenden möchten, folgen Sie zuerst der Anleitung für die Ersteinrichtung unter Erste Schritte mit der Service Management API.

Rollout ausführen

Beispiel: Sie möchten für den verwalteten Dienst endpointsapis.appspot.com, der auf der Service Management API basiert, eine Konfigurationsänderung implementieren. Mit den folgenden Schritten können Sie das Rollout einer Dienstkonfiguration schrittweise und kontrolliert ausführen.

Angenommen, endpointsapis.appspot.com verwendet zurzeit die Dienstkonfiguration old und Sie möchten sie auf die Dienstkonfiguration new umstellen. Anstatt die neue Dienstkonfiguration sofort für den gesamten Produktionstraffic zu implementieren, können Sie ein Rollout erstellen, um die neue Dienstkonfiguration mit 10 % des Gesamttraffics zu testen:

# Create rollout to test the new configuration with 10% traffic.
$ gcurl -d '{
  "rolloutId": "canary-rollout",
  "serviceName": "endpointsapis.appspot.com",
  "trafficPercentStrategy": {
    "percentages": {
      "new": 10,
      "old": 90
    }
  }
}' https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/rollouts
{
  "name": "operations/rollouts.endpointsapis.appspot.com:canary-rollout"
  "metadata": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
    "resourceNames": [
      "services/endpointsapis.appspot.com/rollouts/canary-rollout"
    ],
    "startTime": ...
  },
  "response": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.Rollout",
    "rolloutId": "canary-rollout",
    "createTime": ...
    "trafficPercentStrategy": {
      "percentages": {
        "old": 90,
        "new": 10,
      }
    },
    "serviceName": "endpointsapis.appspot.com"
  }
}

Nachdem das Rollout erstellt wurde, können Sie dessen Status abrufen, indem Sie den folgenden Befehl ausführen und dabei Ihre eigene Rollout-ID einsetzen:

# Get rollout status of `operations/rollouts.endpointsapis.appspot.com:canary-rollout`.
$ gcurl https://servicemanagement.googleapis.com/v1/operations/rollouts.endpointsapis.appspot.com:canary-rollout
{
  "name": "operations/rollouts.endpointsapis.appspot.com:canary-rollout",
  "metadata": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
    "resourceNames": [
      "services/endpointsapis.appspot.com/rollouts/canary-rollout"
    ],
    "steps": [
      {
        "description": "update Service Controller",
        "status": "DONE"
      }
    ],
    "progressPercentage": 100,
    "startTime": ...
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.Rollout",
    "rolloutId": "canary-rollout",
    "createTime": ...
    "status": "SUCCESS",
    "trafficPercentStrategy": {
      "percentages": {
        "old": 90,
        "new": 10,
      }
    },
    "serviceName": "endpointsapis.appspot.com"
  }
}

Nachdem Sie sichergestellt haben, dass das Canary-Rollout abgeschlossen ist und die neue Servicekonfiguration ordnungsgemäß funktioniert, können Sie ein Rollout für 100 % des Traffics erstellen:

# Create rollout to let new configuration serve 100% traffic.
$ gcurl -d '{
  "rolloutId": "full-rollout",
  "serviceName": "endpointsapis.appspot.com",
  "trafficPercentStrategy": {
    "percentages": {
      "new": 100,
    }
  }
}' https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/rollouts
{
  "name": "operations/rollouts.endpointsapis.appspot.com:full-rollout",
  "metadata": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
    "resourceNames": [
      "services/endpointsapis.appspot.com/rollouts/full-rollout"
    ],
    "startTime": ...
  },
  "response": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.Rollout",
    "rolloutId": "full-rollout",
    "createTime": ...
    "trafficPercentStrategy": {
      "percentages": {
        "new": 100,
      }
    },
    "serviceName": "endpointsapis.appspot.com"
  }
}

Falls in der Testphase Probleme auftreten, können Sie so zur früheren Konfiguration zurückwechseln:

# Rollback to the old configuration.
$ gcurl -d '{
  "rolloutId": "rollout-to-old",
  "serviceName": "endpointsapis.appspot.com",
  "trafficPercentStrategy": {
    "percentages": {
      "old": 100,
    }
  }
}' https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/rollouts
{
 "name": "operations/rollouts.endpointsapis.appspot.com:rollout-to-old",
 "metadata": {
   "@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
   "resourceNames": [
     "services/endpointsapis.appspot.com/rollouts/rollout-to-old"
   ],
   "startTime": ...
 },
 "response": {
   "@type": "type.googleapis.com/google.api.servicemanagement.v1.Rollout",
   "rolloutId": "rollout-to-old",
   "createTime": ...
   "trafficPercentStrategy": {
     "percentages": {
       "old": 100,
     }
   },
   "serviceName": "endpointsapis.appspot.com"
 }

}

Rollout-Verlauf ansehen

Die Service Management API speichert einen Verlauf der Rollouts. So rufen Sie den Rollout-Verlauf für endpointsapis.appspot.com auf:

# List rollout history for `endpointsapis.appspot.com`.
$ gcurl https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/rollouts
{
  "rollouts": [
    {
      "rolloutId": "canary-rollout",
      "createTime": ...
      "status": "IN_PROGRESS",
      "trafficPercentStrategy": {
        "percentages": {
          "old": 90,
          "new": 10
         }
      },
      "serviceName": "endpointsapis.appspot.com"
    },
    {
      "rolloutId": "old-rollout",
      "createTime": ...
      "status": "SUCCESS",
      "trafficPercentStrategy": {
        "percentages": {
          "old": 100
         }
      },
      "serviceName": "endpointsapis.appspot.com"
    },
    ...
  ]
}