Creación de una implementación del lanzamiento canary - Amazon API Gateway

Creación de una implementación del lanzamiento canary

La implementación del lanzamiento canary se crea cuando la API se implementa con las opciones de configuración canary como datos de entrada, además de con la operación de creación de la implementación.

También puede crear una implementación de lanzamiento canary a partir de una implementación no canary creando una solicitud stage:update para agregar la configuración de canary a la etapa.

Cuando crea una implementación de una versión que no es canary, puede especificar un nombre de etapa que no existe. Si no existe la etapa especificada no existe, API Gateway la crea. Sin embargo, no puede especificar una etapa que no existe al crear una implementación canary. Si lo hace, aparecerá un error y API Gateway no creará ninguna implementación del lanzamiento canary.

Puede crear una implementación de lanzamiento canary en API Gateway con la consola de API Gateway, la AWS CLI o un AWS SDK.

Creación de una implementación canary con la consola de API Gateway

Si desea utilizar la consola de API Gateway para crear una implementación de un lanzamiento canary, siga las instrucciones que se indican a continuación:

Para crear la implementación inicial del lanzamiento canary
  1. Inicie sesión en la consola de API Gateway.

  2. Elija una API de REST existente o cree una nueva API de REST.

  3. En el panel de navegación principal, elija Recursos y, a continuación, elija Implementar API. Siga las instrucciones en pantalla que se indican en Deploy API (Implementar API) para implementar la API en una nueva etapa.

    Hasta ahora, ha implementado la API en una etapa de versión de producción. A continuación, va a configurar la configuración de canary en la etapa y, si es necesario, también habilitará el almacenamiento en caché, definirá las variables de etapa o configurará los registros de ejecución o acceso de la API.

  4. Para habilitar el almacenamiento en caché de la API o asociar una ACL web de AWS WAF a la etapa, en la sección de Detalles de la etapa, elija Editar. Para obtener más información, consulte Configuración de caché para las API de REST en API Gateway o Asociación de una ACL web de AWS WAF a una etapa de la API de API Gateway mediante la consola de API Gateway.

  5. Para configurar los registros de ejecución o acceso, en la sección Registros y rastreo, elija Editar y siga las instrucciones que aparecen en pantalla. Para obtener más información, consulte Configuración del registro de CloudWatch para las API de REST en API Gateway.

  6. Para definir las variables de etapa, elija la pestaña Variables de etapa y siga las instrucciones que aparecen en pantalla para agregar o modificar variables de etapa. Para obtener más información, consulte Uso de variables de etapa para una API de REST en API Gateway.

  7. Elija la pestaña Canary y, a continuación, elija Crear Canary. Puede que tenga que elegir el botón de flecha hacia la derecha para mostrar la pestaña Canary.

  8. En la Configuración de Canary, para Canary, ingrese el porcentaje de solicitudes que se van a desviar al canary.

  9. Si lo desea, seleccione Caché de etapa para activar el almacenamiento en caché del lanzamiento canary. La caché no está disponible para el lanzamiento canary hasta que el almacenamiento en caché de la API está habilitado.

  10. Para anular las variables de etapa actuales, en Sustitución de Canary, ingrese un nuevo valor de variable de etapa.

Una vez que el lanzamiento canary se inicialice en la etapa de implementación, cambie la API y pruebe los cambios. Puede volver a implementar la API en la misma etapa para que tanto la versión actualizada como la versión base estén accesibles en la misma etapa. En los pasos siguientes, se describe cómo hacerlo.

Para implementar la última versión de la API en un lanzamiento canary
  1. Con cada actualización de la API, elija Implementar API.

  2. En Implementar API, elija la etapa que contiene un canary en la lista desplegable Etapa de implementación.

  3. De forma opcional, ingrese una descripción para Descripción de implementación.

  4. Seleccione Deploy (Implementar) para insertar la última versión de la API en el lanzamiento canary.

  5. Si lo desea, puede volver a configurar los ajustes, los registros o la configuración de canary de la etapa, tal y como se describe en Para crear la implementación inicial del lanzamiento canary.

Cuando termine, el lanzamiento canary apuntará a la última versión, mientras que la versión de producción seguirá apuntando a la versión inicial de la API. La propiedad canarySettings ahora tiene un nuevo valor deploymentId, mientras que la etapa sigue teniendo el valor deploymentId. En segundo plano, la consola llama a stage:update.

Creación de una implementación canary a través de la AWS CLI

En primer lugar, cree una implementación de referencia con dos variables, pero sin ningún lanzamiento canary:

aws apigateway create-deployment \ --variables sv0=val0,sv1=val1 \ --rest-api-id abcd1234 \ --stage-name 'prod' \

El comando devuelve una representación del recurso Deployment resultante, similar a la representación que se muestra a continuación:

{ "id": "du4ot1", "createdDate": 1511379050 }

El valor de id de la implementación resultante identifica una instantánea (o versión) de la API.

Ahora, cree una implementación canary en la etapa prod:

aws apigateway create-deployment --rest-api-id abcd1234 \ --canary-settings \ '{ "percentTraffic":10.5, "useStageCache":false, "stageVariableOverrides":{ "sv1":"val2", "sv2":"val3" } }' \ --stage-name 'prod'

Si la etapa especificada (prod) no existe, el comando anterior devuelve un error. De lo contrario, devuelve la representación del recurso deployment que se acaba de crear y que es similar a la siguiente:

{ "id": "a6rox0", "createdDate": 1511379433 }

La implementación resultante id identifica la versión de prueba de la API del lanzamiento canary. Como resultado, la etapa asociada está habilitada para canary. Puede ver una representación de esta etapa llamando al comando get-stage de manera similar a la siguiente:

aws apigateway get-stage --rest-api-id acbd1234 --stage-name prod

A continuación, se muestra una representación de Stage como la salida del comando:

{ "stageName": "prod", "variables": { "sv0": "val0", "sv1": "val1" }, "cacheClusterEnabled": false, "cacheClusterStatus": "NOT_AVAILABLE", "deploymentId": "du4ot1", "lastUpdatedDate": 1511379433, "createdDate": 1511379050, "canarySettings": { "percentTraffic": 10.5, "deploymentId": "a6rox0", "useStageCache": false, "stageVariableOverrides": { "sv2": "val3", "sv1": "val2" } }, "methodSettings": {} }

En este ejemplo, la versión de la API utilizará las variables de etapa {"sv0":val0", "sv1":val1"}, mientras que la versión de prueba utilizará {"sv1":val2", "sv2":val3"}. Tanto la versión de producción como el lanzamiento canary utilizan la variable de etapa sv1, pero con diferentes valores: val1 y val2, respectivamente. La variable de etapa sv0 solo se utiliza en la versión de producción, mientras que sv2 solo se utiliza en el lanzamiento canary.

Puede crear una implementación de un lanzamiento canary a partir de una implementación normal existente actualizando la etapa de forma que habilite un lanzamiento canary. Para ver una demostración, cree primero una implementación normal:

aws apigateway create-deployment \ --variables sv0=val0,sv1=val1 \ --rest-api-id abcd1234 \ --stage-name 'beta'

El comando devuelve una representación de la implementación de la versión base:

{ "id": "cifeiw", "createdDate": 1511380879 }

La etapa beta asociada no tiene una configuración de canary:

{ "stageName": "beta", "variables": { "sv0": "val0", "sv1": "val1" }, "cacheClusterEnabled": false, "cacheClusterStatus": "NOT_AVAILABLE", "deploymentId": "cifeiw", "lastUpdatedDate": 1511380879, "createdDate": 1511380879, "methodSettings": {} }

Ahora, cree una nueva versión de implementación canary adjuntando un lanzamiento canary en la etapa:

aws apigateway update-stage \ --rest-api-id abcd1234 \ --stage-name 'beta' \ --patch-operations '[{ "op": "replace", "value": "0.0", "path": "/canarySettings/percentTraffic" }, { "op": "copy", "from": "/canarySettings/stageVariableOverrides", "path": "/variables" }, { "op": "copy", "from": "/canarySettings/deploymentId", "path": "/deploymentId" }]'

La etapa actualizada será similar a la siguiente:

{ "stageName": "beta", "variables": { "sv0": "val0", "sv1": "val1" }, "cacheClusterEnabled": false, "cacheClusterStatus": "NOT_AVAILABLE", "deploymentId": "cifeiw", "lastUpdatedDate": 1511381930, "createdDate": 1511380879, "canarySettings": { "percentTraffic": 10.5, "deploymentId": "cifeiw", "useStageCache": false, "stageVariableOverrides": { "sv2": "val3", "sv1": "val2" } }, "methodSettings": {} }

Como hemos habilitado canary en una versión existente de la API, tanto la versión de producción (Stage) como el lanzamiento canary (canarySettings) apuntan a la misma implementación; es decir, a la misma versión de la API: deploymentId. Después de cambiar la API y e implementarla de nuevo en esta etapa, la nueva versión estará en el lanzamiento canary, mientras que la versión base seguirá en la versión de producción. Esto se pone de manifiesto a medida que evoluciona la etapa, cuando el valor de deploymentId del lanzamiento canary se actualiza al nuevo id de la implementación y el valor de deploymentId de la versión de producción se mantiene sin cambios.