

# Solución de problemas
<a name="microvms-troubleshooting"></a>

En esta sección se describe cómo depurar y solucionar problemas comunes al trabajar con las MicroVM de AWS Lambda.

## Acceso al intérprete de comandos
<a name="microvms-troubleshooting-shell"></a>

Use el acceso al intérprete de comandos para conectarse directamente a una MicroVM en ejecución con fines de depuración y solución de problemas.

Se puede conectar al intérprete de comandos de una MicroVM de dos maneras:
+ **Consola**: seleccione la MicroVM en la consola de Lambda y elija Conectar.
+ **CLI**: genere un token de acceso al intérprete de comandos mediante `create-microvm-shell-auth-token` y, a continuación, úselo para establecer una conexión.

Genere un token de acceso al intérprete de comandos y, a continuación, conéctese:

```
aws lambda-microvms create-microvm-shell-auth-token \
  --microvm-identifier <id> --expiration-in-minutes 30
# In Console: select MicroVM -> Connect
# In shell: ctr task ls, then ctr task exec -t --exec-id shell <id> /bin/sh
```

La MicroVM se debe haber ejecutado con el conector de red `SHELL_INGRESS` (`arn:aws:lambda:{{us-east-1}}:aws:network-connector:aws-network-connector:SHELL_INGRESS`). Si la MicroVM no se lanzó con este conector, `create-microvm-shell-auth-token` devuelve una `ValidationException`.

Para otros problemas:
+ Compruebe el campo `terminationMessage` de la respuesta `get-microvm` para identificar las MicroVM terminadas.
+ Compruebe los registros de compilación de CloudWatch para detectar problemas relacionados con la creación de imágenes.
+ Compruebe el campo `StateReason` de los conectores de red cuyo estado sea `FAILED`.

## Solución de problemas
<a name="microvms-troubleshooting-troubleshooting"></a>

En esta sección se proporcionan soluciones para problemas comunes al trabajar con las MicroVM de Lambda.


| Síntoma | Causa posible y solución | 
| --- | --- | 
| Error en la compilación de la imagen (CREATION\_FAILED) | Consulte los registros de compilación en /aws/lambda/microvms/<image-name>. Compruebe la sintaxis de Dockerfile, los permisos de Amazon S3 y la disponibilidad de la imagen base. Ejecute docker build de forma local para reproducir el problema. | 
| La MicroVM permanece bloqueada en PENDING | Espere y vuelva a intentarlo. Si el problema persiste, compruebe el estado del servicio. Compruebe que la cuota de simultaneidad no se haya agotado. | 
| La aplicación no responde después de la reanudación | Implemente el enlace de ciclo de vida /resume para restablecer las conexiones y validar el estado. Compruebe que la aplicación se vincule al puerto 8080, o al puerto configurado, después de la reanudación. | 
| 502 Puerta de enlace incorrecta del punto de conexión | La aplicación se bloqueó o no escucha. Compruebe los registros del tiempo de ejecución. Compruebe EXPOSE y CMD en Dockerfile. Si está habilitada la reanudación automática, es posible que la MicroVM no se haya reanudado correctamente. Compruebe su estado mediante get-microvm. | 
| 429 Demasiadas solicitudes | Se superó la tasa de solicitudes. Vuelva a intentarlo con retroceso exponencial y fluctuación aleatoria. | 
| Interrupción de las conexiones | Se activó el tiempo de espera por inactividad. Implemente mensajes ping/pong para mantener activas las conexiones. También puede ampliar maxIdleDurationSeconds en la política de inactividad. | 
| Alta latencia en el punto de conexión | Saturación del ancho de banda. Compruebe si el tráfico supera la capacidad de ancho de banda correspondiente al tamaño de la MicroVM. Escalar verticalmente a un tamaño mayor. | 
| Token de autenticación vencido (403) | Los tokens tienen un periodo de vencimiento configurable. Genere un token nuevo antes de que venza el anterior. Implemente en el cliente una lógica de renovación de tokens. | 
| La salida de VPC no funciona | Compruebe que el conector de red se encuentre en el estado ACTIVE. Compruebe que las reglas del grupo de seguridad permitan el tráfico saliente. Confirme que las subredes tengan rutas hacia los recursos de destino. | 

## Errores comunes durante la creación de imágenes
<a name="microvms-troubleshooting-image-errors"></a>


| Error | Causa | Solución | 
| --- | --- | --- | 
| S3\_ACCESS\_DENIED | El rol de compilación no tiene permisos para recuperar el artefacto de Amazon S3. | Agregue el permiso s3:GetObject para el bucket de artefactos. | 
| S3\_NO\_SUCH\_KEY | La clave del artefacto no existe en el bucket. | Compruebe que la ruta de Amazon S3 sea correcta. | 
| S3\_NO\_SUCH\_BUCKET | El bucket de Amazon S3 no existe. | Compruebe el nombre del bucket y confirme que se haya creado. | 
| S3\_INVALID\_OBJECT | El artefacto está en Glacier o en una clase de almacenamiento que no permite el acceso directo. | Mueva el artefacto a la clase de almacenamiento Standard. | 
| S3\_CROSS\_REGION\_ACCESS\_DENIED | El artefacto se encuentra en una región distinta de la imagen de MicroVM. | Asegúrese de que el artefacto se encuentre en la misma región que la imagen de MicroVM. | 
| ARCHIVE\_DOCKERFILE\_NOT\_FOUND | Al archivo .zip le falta Dockerfile en el directorio raíz. | Agregue un Dockerfile a la raíz del archivo .zip. | 
| ARCHIVE\_INVALID | El archivo no es un ZIP válido o está dañado. | Vuelva a crear el archivo .zip y cárguelo de nuevo. | 
| CONTAINER\_BUILD\_FAILED | Las instrucciones de Dockerfile no son válidas, faltan archivos o hay errores de sintaxis. | Depure Dockerfile de forma local mediante docker build. | 
| DISK\_STORAGE\_FULL | La MicroVM se quedó sin espacio de almacenamiento durante la compilación. | Reduzca el tamaño del artefacto o póngase en contacto con el soporte. | 
| INTERNAL\_PLATFORM\_ERROR | Se ha producido un error interno. | Vuelva a intentar la operación. Si el problema persiste, póngase en contacto con el servicio de asistencia. | 

## Solución de problemas del conector de red
<a name="microvms-troubleshooting-connector-errors"></a>


| Código de error | Causa | Solución | 
| --- | --- | --- | 
| DisallowedByVpcEncryptionControl | La VPC tiene una política de control de cifrado que impide el uso de interfaces de red o tráfico sin cifrar. Lambda no puede crear ENI que cumplan los requisitos de cifrado. | Agregue Lambda a la lista de exclusión del control de cifrado de la VPC. Si no es posible establecer una exclusión, use una VPC o una subred que no tenga aplicados controles de cifrado restrictivos. | 
| Ec2RequestLimitExceeded | Lambda realiza llamadas a la API de EC2, por ejemplo, CreateNetworkInterface y DescribeSubnets, para configurar la conectividad. Un número excesivo de llamadas simultáneas a la API de EC2 provoca una limitación controlada. | Vuelva a intentar la operación después de una breve espera. Si el problema persiste, reduzca las operaciones simultáneas de los conectores de red o solicite a AWS Support un aumento del límite de limitación controlada de la API de EC2. | 
| InsufficientRolePermissions | El rol de operador no tiene los permisos de EC2 necesarios. | Compruebe que el rol de IAM tenga los permisos de red de EC2 necesarios. | 
| InternalError | Se produjo un error inesperado en el servicio de Lambda mientras se procesaba la solicitud del conector de red. | Vuelva a intentar la operación. Si el problema persiste después de varios reintentos, póngase en contacto con AWS Support e indique el ARN del conector de red y una marca de tiempo aproximada. | 
| InvalidSecurityGroup | El ID del grupo de seguridad no existe, se eliminó o no pertenece a la misma VPC que las subredes especificadas. | Compruebe que todos los ID de los grupos de seguridad existan y pertenezcan a la misma VPC que las subredes. Use aws ec2 describe-security-groups --group-ids <sg-id> para realizar la validación. | 
| InvalidSubnet | El ID de la subred no existe, se eliminó o pertenece a una VPC distinta de la prevista. | Compruebe que todos los ID de las subredes existan y pertenezcan a la VPC correcta. Use aws ec2 describe-subnets --subnet-ids <subnet-id> para realizar la validación. | 
| SubnetOutOfIPAddresses | El bloque de CIDR de la subred está agotado: todas las direcciones IP están asignadas a otros recursos, como ENI e instancias, por lo que Lambda no puede crear una interfaz de red. | Libere direcciones IP mediante la eliminación de las ENI o instancias que no se utilicen, o use otra subred que tenga capacidad disponible. Considere usar subredes más grandes, por ejemplo, /24 o de mayor tamaño, para los conectores de red. | 