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. Seleccione una API existente o cree una nueva.

  3. Cambie la API, si es necesario, o configure las integraciones y los métodos de API que desee.

  4. Elija Deploy API (Implementar API) en el menú desplegable Actions (Acciones). 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.

  5. Para habilitar el almacenamiento en caché de la API, seleccione la pestaña Settings (Configuración) en Stage Editor (Editor de etapas) y siga las instrucciones que aparecen en pantalla. Para obtener más información, consulte Habilitación del almacenamiento en caché de la API para mejorar la capacidad de respuesta.

  6. Para definir las variables de etapa, seleccione la pestaña Stage Variables (Variables de etapa) en Stage Editor (Editor de etapas) y siga las instrucciones que aparecen en pantalla para agregar o modificar variables de etapa. Para obtener más información, consulte Configuración de variables de etapa para una implementación de una API de REST.

  7. Para configurar los registros de ejecución o acceso, seleccione la pestaña Logs (Registros) en Stage Editor (Editor de etapas) y siga las instrucciones que aparecen en pantalla. Para obtener más información, consulte Configuración del registro de CloudWatch para una API de REST en API Gateway.

  8. En Stage Editor (Editor de etapas), seleccione la pestaña Canary y después Create Canary (Crear canary).

  9. En la sección Stage's Request Distribution (Distribución de solicitud de la etapa), seleccione el icono con forma de lápiz situado junto a Percentage of requests to Canary (Porcentaje de solicitudes a canary) y especifique un número (por ejemplo, 5.0) en el campo de texto de entrada. Haga clic en el icono de marca de verificación para guardar la configuración.

  10. Para asociar una ACL web de AWS WAF a la etapa, elija una ACL web en la lista desplegable Web ACL (ACL web).

    nota

    Si es necesario, elija Create Web ACL (Crear ACL web) para abrir la consola de AWS WAF en una nueva pestaña del navegador, crear la ACL web y volver a la consola de API Gateway para asociar la ACL web a la etapa.

  11. Si lo desea, elija Block API Request if WebACL cannot be evaluated (Fail- Close) (Bloquear solicitud de API si no se puede evaluar WebACL (cierre por error)).

  12. Si es necesario, seleccione Add Stage Variables (Añadir variables de etapa) para agregar las variables en la sección Canary Stage Variables (Variables de etapa de canary) y anular las variables de etapa existentes o agregar nuevas variables de etapa para el lanzamiento canary.

  13. Si lo desea, seleccione Enable use of stage cache (Habilitar uso de la caché de etapas) para habilitar el almacenamiento en caché del lanzamiento canary y guardar la opción seleccionada. La caché no está disponible para el lanzamiento canary hasta que el almacenamiento en caché de la API está habilitado.

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. Cada vez que actualice la API, seleccione Deploy API (Implementar API) en el menú desplegable Actions (Acciones) situado junto a la lista Resources (Recursos).

  2. En Deploy API (Implementar API), en la lista desplegable Deployment stage (Etapa de implementación), seleccione una nueva etapa habilitada para canary.

  3. Si lo desea, también puede incluir una descripción en Deployment description (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 4wk1k4onj3 --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 --canary-settings '{ \ "percentTraffic":10.5, \ "useStageCache":false, \ "stageVariableOverrides":{ \ "sv1":"val2", \ "sv2":"val3" \ } \ }' \ --rest-api-id 4wk1k4onj3 \ --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 4wk1k4onj3 --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 4wk1k4onj3 \ --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 \ --patch-operations '[{ \ "op":"replace", \ "path":"/canarySettings/percentTraffic", \ "value":"10.5" \ },{ \ "op":"replace", \ "path":"/canarySettings/useStageCache", \ "value":"false" \ },{ \ "op":"replace", \ "path":"/canarySettings/stageVariableOverrides/sv1", \ "value":"val2" \ },{ \ "op":"replace", \ "path":"/canarySettings/stageVariableOverrides/sv2", \ "value":"val3" \ }]' \ --rest-api-id 4wk1k4onj3 \ --stage-name beta

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.