Actualización o migración a Envoy 1.17 - AWS App Mesh

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Actualización o migración a Envoy 1.17

Secret Discovery Service con SPIRE

Si utiliza SPIRE (Entorno en tiempo de ejecución de SPIFFE) con App Mesh para distribuir certificados de confianza a sus servicios, compruebe que utiliza al menos una versión 0.12.0 del agente de SPIRE (publicado en diciembre de 2020). Esta es la primera versión que es compatible con las versiones de Envoy posteriores a la 1.16.

Cambios de las expresiones regulares

A partir de Envoy 1.17, App Mesh configura Envoy para que utilice el motor de expresiones regulares RE2 de forma predeterminada. Este cambio es evidente para la mayoría de los usuarios, pero las coincidencias de rutas o rutas de puerta de enlace ya no permiten las referencias retrospectivas o prospectivas en las expresiones regulares.

Referencia prospectiva positiva y negativa

Positiva: una referencia prospectiva positiva es una expresión entre paréntesis que comienza con ?=:

(?=example)

Son las que tienen más utilidad cuando se reemplaza una cadena porque permiten hacer coincidir una cadena sin utilizar los caracteres que forman parte de la coincidencia. Debido a que App Mesh no admite la sustitución de cadenas de expresiones regulares, recomendamos que las sustituya por coincidencias normales.

(example)

Negativa: una anticipación negativa es una expresión entre paréntesis que comienza con ?!.

ex(?!amp)le

Las expresiones entre paréntesis se utilizan para afirmar que parte de la expresión no coincide con una entrada determinada. En la mayoría de los casos, puede sustituirlas por un cuantificador cero.

ex(amp){0}le

Si la propia expresión es una clase de caracteres, puede anular toda la clase y marcarla como opcional utilizando ?.

prefix(?![0-9])suffix => prefix[^0-9]?suffix

Dependiendo de su caso de uso, es posible que también pueda cambiar sus rutas para solucionar este problema.

{ "routeSpec": { "priority": 0, "httpRoute": { "match": { "headers": [ { "name": "x-my-example-header", "match": { "regex": "^prefix(?!suffix)" } } ] } } } } { "routeSpec": { "priority": 1, "httpRoute": { "match": { "headers": [ { "name": "x-my-example-header", "match": { "regex": "^prefix" } } ] } } } }

La primera coincidencia de rutas busca un encabezado que comience con el “prefijo“ pero no seguido del “sufijo“. La segunda ruta busca todos los demás encabezados que comienzan con el “prefijo“, incluidos los que terminan en el “sufijo“. En su lugar, también se pueden invertir para eliminar la referencia prospectiva negativa.

{ "routeSpec": { "priority": 0, "httpRoute": { "match": { "headers": [ { "name": "x-my-example-header", "match": { "regex": "^prefix.*?suffix" } } ] } } } } { "routeSpec": { "priority": 1, "httpRoute": { "match": { "headers": [ { "name": "x-my-example-header", "match": { "regex": "^prefix" } } ] } } } }

En este ejemplo, se invierten las rutas para dar mayor prioridad a los encabezados que terminan con “sufijo“, y todos los demás encabezados que comienzan con “prefijo“ coinciden en la ruta de menor prioridad.

Referencias retrospectivas

Una referencia retrospectiva es una forma de escribir expresiones más cortas, repitiéndolas a un grupo anterior entre paréntesis. Tienen este formato.

(group1)(group2)\1

Una barra invertida \ seguida de un número actúa como marcador de posición para el enésimo grupo entre paréntesis de la expresión. En este ejemplo, \1 se utiliza como una forma alternativa de escribir (group1) por segunda vez.

(group1)(group2)(group1)

Se pueden eliminar simplemente sustituyendo la referencia retrospectiva por el grupo al que se hace referencia, como en el ejemplo.