Administra configuraciones de servicios

En esta página, se describe cómo administrar las configuraciones de servicios con Service Infrastructure.

Una configuración de servicio es una especificación que describe diferentes aspectos de un servicio administrado.

Los métodos de la API de Service Management generalmente implicados en la administración de las configuraciones de servicios son los siguientes:

Antes de comenzar

Para ejecutar los ejemplos en esta guía, asegúrate de seguir primero las instrucciones para completar la configuración inicial en Comienza a usar la API de Service Management.

Envía archivos fuente de configuración de servicio

Para actualizar tu configuración de servicio, debes enviar una lista de archivos de origen de configuración de servicio a la API de Service Management y el servidor los compilará en una configuración de servicio validada.

Los archivos fuente pueden tener los siguientes formatos:

La API de Service Management no toma archivos .proto, debes generar descriptores protobuf a partir de tus archivos .proto antes de enviarlos. Puedes usar el siguiente comando para generar los archivos descriptores:

$ protoc hello.proto --include_source_info --include_imports --descriptor_set_out=service.descriptors *.proto

La forma recomendada de enviar los archivos de origen de la configuración del servicio es usar gcloud CLI.

$ gcloud auth login
$ gcloud endpoints services deploy [a list of service configuration source files]

También puedes llamar directamente a la API de Service Management para enviar archivos de origen. Por ejemplo, si tienes esta definición de OpenAPI (hello.json):

{
  "swagger": "2.0",
  "info": {
    "title": "Hello Endpoints API.",
    "description": "Hello Endpoints API.",
    "version": "v1"
  },
  "host": "endpointsapis.appspot.com",
  "schemes": ["https"],
  "paths": {
    "/v1/hello": {
      "get": {
        "tags": ["endpointsapis"],
        "operationId": "GetHello",
        "description": "Returns \"Hello\" with given name in the response.",
        "parameters": [
          {
            "name": "name",
            "description": "Name to be greeted.",
            "in": "query",
            "type": "string"
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/GetHelloResponse"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "GetHelloResponse": {
      "description": "Response message for GetHello method.",
      "type": "object",
      "properties": {
        "response": {
          "description": "String of \"Hello \" + `name` provided in the request.",
          "type": "string"
        }
      }
    }
  }
}

Puedes realizar la siguiente llamada a la API para enviar la especificación de OpenAPI:

$ gcurl -d "
{
  'serviceName': 'endpointsapis.appspot.com',
  'configSource':
  {
    'files': [
      {
        'fileContents': '$(base64 hello.json | sed ':a;N;$!ba;s/\n//g')',
        'fileType': 'OPEN_API_JSON',
        'filePath': 'hello.json',
      }
    ]
  }
}" https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/configs:submit
{
  "name": "operations/serviceConfigs.endpointsapis.appspot.com:a7651c15-9017-4274-b065-d644cc337847",
  "metadata": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
    "resourceNames": [
      "services/endpointsapis.appspot.com/configs/2016-07-29r10"
    ],
    "startTime": "2016-07-29r10T23:59:21.081Z",
    "persisted": true
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.SubmitConfigSourceResponse",
    "serviceConfig": {
      "name": "endpointsapis.appspot.com",
      "title": "Hello Endpoints API.",
  ...
}

Genera informes de configuraciones de servicios

Antes de enviar una nueva versión de configuración del servicio, es posible que desee llamar al método services.generateConfigReport para obtener un informe de los cambios con respecto a una versión de configuración del servicio existente. Puede especificar la versión que se usará para la comparación mediante el campo old_config en la solicitud, o simplemente puede omitir este campo para generar un informe en el que se realice una comparación con la última versión de configuración del servicio.

Si suponemos que el archivo de configuración nuevo de OpenAPI se llama hello.json, puedes ejecutar el siguiente comando:

$ gcurl -d "
{
  'newConfig':
  {
    '@type': 'type.googleapis.com/google.api.servicemanagement.v1.ConfigSource',
    'files': [
      {
        'fileContents': '$(base64 hello.json | sed ':a;N;$!ba;s/\n//g')',
        'fileType': 'OPEN_API_JSON',
        'filePath': 'hello.json',
      }
    ],
  }
}" https://servicemanagement.googleapis.com/v1/services:generateConfigReport

Si deseas generar un informe para una versión de configuración específica, puedes ejecutar:

# Generate config report for the local configration from `/tmp/hello.json`
# and the configration version `2016-07-29r10`.
$ gcurl -d "
{
  'newConfig':
  {
    '@type': 'type.googleapis.com/google.api.servicemanagement.v1.ConfigSource',
    'files': [
      {
        'fileContents': '$(base64 hello.json | sed ':a;N;$!ba;s/\n//g')',
        'fileType': 'OPEN_API_JSON',
        'filePath': 'hello.json',
      }
    ],
  },
  'oldConfig':
  {
    '@type': 'type.googleapis.com/google.api.servicemanagement.v1.ConfigRef',
    'name': 'services/endpointsapis.appspot.com/configs/2016-07-29r10'
  }
}" https://servicemanagement.googleapis.com/v1/services:generateConfigReport

Obtén versiones de configuraciones de servicios anteriores

La API de Service Management conserva un historial de versiones de las configuraciones de servicio enviadas. Puede enumerarlas o recuperar una versión específica mediante los métodos services.configs.list o services.configs.get, como lo ilustran los siguientes comandos:

# List the service configuration history for a managed service.
$ gcurl https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/configs
{
  "serviceConfigs": [
    {
      "name": "endpointsapis.appspot.com",
      "title": "Hello Endpoints API",
      "id": "2016-07-16r1",
      ...
    },
    {
      "name": "endpointsapis.appspot.com",
      "title": "Hello Endpoints API",
      "id": "2016-07-16r0",
      ...
    }
  ]
}

# Get a specific version of the service configuration for a managed service.
$ gcurl https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/configs/2016-07-16r0
{
  "name": "endpointsapis.appspot.com",
  "title": "Hello Endpoints API",
  "id": "2016-07-16r0",
  ...
}