¿Cómo soluciono el error de ejecución de la canalización de compilación de imágenes “Unable to bootstrap TOE” (“No se puede iniciar TOE”) en Image Builder?

5 minutos de lectura
0

La ejecución de la canalización de compilación de imágenes falla con el error “Unable to bootstrap TOE” (“No se puede iniciar TOE”) en EC2 Image Builder. ¿Cómo se soluciona esto?

Descripción breve

En la etapa de compilación de una canalización de compilación de imágenes, la instancia de generación de Amazon Elastic Compute Cloud (Amazon EC2) instala y ejecuta el script de arranque bootstrap.sh de AWS Task Orchestrator and Executor (AWS TOE). Si la instancia de generación de Amazon EC2 no puede instalar ni ejecutar el script de arranque, recibirá un error en la consola de EC2 Image Builder.

Ejemplo de mensaje de error:

SSM execution '7729e837-22d4-49dd-bb60-cc2c835a2625' failed for image arn: 'arn:aws:imagebuilder:us-west-2:account-ID:image/test/1.0.0/1' with 
status= 'Failed' in state = 'BUILDING' and failure message = 'Unable to bootstrap TOE'

Image Builder usa la Automatización de AWS Systems Manager para crear imágenes personalizadas. La automatización suele fallar en los pasos RunBuildScriptsWithLogging o RunBuildScriptsWithoutLogging.

Los siguientes son motivos comunes por los que se producen errores en el script de arranque:

  • La instancia de compilación de EC2 no tiene acceso a Amazon Simple Storage Service (Amazon S3).
  • La imagen de máquina de Amazon (AMI) base está protegida por CIS y el directorio /tmp predeterminado se monta con noexec.

Resolución

Para solucionar el problema, use el ID de ejecución de automatización de SSM que aparece en el mensaje de error.

  1. Abra la consola de EC2 Image Builder.
  2. Elija la canalización de compilación fallida.
  3. Tome nota del ID de ejecución de automatización de SSM del mensaje de error. El ID del mensaje de error del ejemplo anterior es 7729e837-22d4-49dd-bb60-cc2c835a2625.
  4. Abra la consola de AWS Systems Manager.
  5. En el panel de navegación, elija Automations (Automatizaciones).
  6. Seleccione la automatización asociada al ID de ejecución de automatización de SSM.
  7. Elija el ID para el paso RunBuildScriptsWithoutLogging para obtener más detalles sobre el error del script de arranque.

La instancia de compilación no tiene acceso a Amazon S3

Durante el paso RunBuildScriptsWithoutLogging, recibirá el siguiente mensaje de error con No such file or directory (No existe tal archivo o directorio):

{"Status":"Failed","ResponseCode":1,"Output":"Waiting for Cloud-init to initialize ...
Cloud-init fails to initialize ... waiting another 5 minutes for the instance to stabilize
/var/lib/amazon/ssm/i-0ad513xxxxxxx/document/orchestration/bb0d8b53-994f-4c47-8297-e852a484501d/awsrunShellScript/0.awsrunShellScript/_script.sh: 
line 49: /tmp/imagebuilder/TaskOrchestratorAndExecutor/bootstrap.sh: No such file or directory
{\"failureMessage\":\"Unable to bootstrap TOE\"}

El error anterior significa que el archivo bootstrap.sh no existe en la instancia de compilación. Este error se produce cuando la instancia de compilación está en una subred privada y no puede descargar el script de arranque de AWS TOE.

Para resolver este problema, compruebe si el punto de conexión de la puerta de enlace de Amazon S3 com.amazonaws.region.s3 está en la misma Amazon Virtual Private Cloud (Amazon VPC) que la configuración de la infraestructura de la canalización. Si el punto de conexión está en la misma Amazon VPC, compruebe que esté asociado a la tabla de enrutamiento correcta. El punto de conexión debe estar asociado a la tabla de enrutamiento que usa la subred especificada en la configuración de la infraestructura.

Además, verifique que el grupo de seguridad que está anexado a la instancia de compilación permita la conectividad HTTPS saliente (puerto 443) a la dirección IP pública de S3. La instancia de compilación debe permitir la conectividad HTTPS saliente para descargar el script de arranque del bucket de Image Builder S3. Verifique el intervalo de direcciones IP públicas de S3 que corresponde a la región de AWS de la canalización.

Nota: Los puntos de conexión de la interfaz de Amazon S3 no admiten la función de DNS privado. Para obtener más información, consulte Acceder a un servicio de AWS mediante un punto de conexión de VPC de interfaz.

Además, asegúrese de que la política del punto de conexión permita la acción GetObjects del bucket de Image Builder S3 ec2imagebuilder-toe-REGION-prod. La política tiene acceso total de forma predeterminada.

El directorio /tmp se monta con noexec (aplicable solo para la compilación de la AMI de Linux)

Durante el paso RunBuildScriptsWithoutLogging, recibirá el siguiente mensaje de error con Permission denied (Permiso denegado):

{"Status":"Failed","ResponseCode":1,"Output":"Waiting for Cloud-init to initialize ...
/var/lib/amazon/ssm/i-0ad513xxxxxxx/document/orchestration/634699d5-3b04-4152-aab3-33d6981524cd/awsrunShellScript/0.awsrunShellScript/_script.sh:
line 49: /tmp/imagebuilder/TaskOrchestratorAndExecutor/bootstrap.sh: Permission denied
{\"failureMessage\":\"Unable to bootstrap TOE\"}

El error anterior significa que la instancia de compilación no puede ejecutar el script bootstrap.sh debido a problemas de permisos del sistema operativo. Este error se produce cuando el directorio /tmp predeterminado se monta con la opción noexec. La opción de montaje noexec impide que los binarios se ejecuten en el sistema de archivos montado.

Para comprobar si el directorio /tmp está montado con noexec, lance una instancia de prueba desde la AMI base que se especifica en la receta de la imagen.

Ejecute el siguiente comando:

sudo mount | grep -E '/tmp.*noexec'

Resultado:

dev/xvdf on /tmp type ext4 (rw,noexec,relatime,data=ordered)

El resultado anterior confirma que el directorio /tmp está montado como noexec. Para resolver este problema, cambie el directorio de trabajo en la receta de la imagen o quite la opción noexec del directorio de la AMI base.

Para modificar el parámetro del directorio de trabajo en la receta de la imagen, cree una nueva versión de la receta de la imagen. A continuación, edite la canalización para usar la nueva versión. Asegúrese de que el nuevo directorio ya esté en la AMI y no esté configurado para montarse con la opción noexec.

Para quitar la opción noexec del directorio**/tmp**:

  1. Lance manualmente una instancia desde la AMI base especificada en la receta de la imagen.
  2. En el archivo /etc/fstab, quite la opción noexec de la entrada asociada al directorio /tmp o al directorio de trabajo.
  3. Cree una nueva AMI a partir de la instancia para usarla como la AMI base de la receta de la imagen.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años