Desidero risolvere l'errore "exec format" che causa l'esito negativo delle mie attività Amazon Elastic Container Service (Amazon ECS).
Breve descrizione
Questo errore si verifica quando le attività eseguite utilizzando un'immagine del container sono create per istanze Amazon Elastic Compute Cloud (Amazon EC2) con un'architettura diversa. Ad esempio, hai creato un'immagine del container in un'istanza basata su ARM e provi a eseguire l'attività in un'istanza x86.
Nota: l'attività ha un motivo di arresto "Essential container in task exited" e un codice di uscita 1.
Risoluzione
Per risolvere il problema, modifica l'architettura delle attività Amazon ECS o ricostruisci l'immagine per l'architettura corretta.
Modifica l'architettura delle attività ECS
L'architettura di un'attività è determinata dal parametro cpuArchitecture della definizione dell'attività. I valori validi sono x86_64 e ARM64. x86_64 è il valore predefinito.
Per modificare l'architettura utilizzata per avviare le attività, crea una nuova revisione della definizione dell'attività con il parametro cpuArchitecture impostato sul valore desiderato. Se le attività fanno parte di un servizio, utilizza l'architettura rivista per aggiornare il servizio ed eseguire una distribuzione in modo da avviare nuove attività.
Per i tipi di avvio Fargate, AWS esegue automaticamente il provisioning dell'infrastruttura con l'architettura corretta per eseguire l'attività. Se utilizzi istanze EC2 o istanze esterne come tipo di avvio, devi gestire la capacità per la configurazione. Per ulteriori informazioni, consulta Cos'è Amazon Elastic Container Service?.
Ricostruisci l'immagine per l'architettura corretta
Utilizza la stessa architettura specificata nella definizione dell'attività per ricostruire l'immagine del container.
Nota: la maggior parte degli strumenti di creazione di immagini dei container utilizza per impostazione predefinita l'architettura del computer host.
Utilizza Docker o Finch
Aggiungi il parametro --platform al comando build per impostare l'architettura di destinazione. Ad esempio, il build Docker --platform linux/arm64 [...] crea un'immagine per ARM64. Il build Finch --plaform linux/amd64 [...] crea un'immagine per l'architettura x86/64.
Esempio di comando build:
docker build -t my-image --platform linux/arm64
Per ulteriori informazioni sul client a riga di comando Finch, consulta Introducing Finch: An Open Source Client for Container Development (Finch, un client open source per lo sviluppo di container).
Per ulteriori informazioni sulla creazione di immagini Docker, consulta Building multi-platform images (Creazione di immagini multi-piattaforma) sul sito web Docker.
AWS CDK
Utilizza l'immagine ecs.ContainerImage.fromAsset di AWS Cloud Development Kit (AWS CDK) per creare e caricare un'immagine da un file Docker nella directory di origine. Per ulteriori informazioni, consulta Images (Immagini).
CodeBuild
Per configurare l'architettura, puoi anche utilizzare AWS CodeBuild con immagini Docker. Per ulteriori informazioni, consulta Modi e tipi di calcolo dell'ambiente di creazione.