Ir para o conteúdo

Como soluciono erros de tempo limite atingido do pipeline de compilação no Image Builder?

8 minuto de leitura
0

Quero solucionar os erros de tempo limite atingido do pipeline de compilação que recebo no EC2 Image Builder.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Para solucionar erros de tempo limite atingido do pipeline de compilação, execute as seguintes ações com base em quando o tempo limite é atingido. Para obter mais informações sobre como monitorar os tempos limite, consulte Monitor Image Builder logs with Amazon CloudWatch Logs (Monitorar os logs do Image Builder com o Amazon CloudWatch Logs).

O tempo limite é atingido quando a compilação verifica a disponibilidade do SSM Agent

Se o tempo limite for atingido quando a compilação verificar o AWS Systems Manager Agent (SSM Agent), você poderá receber uma das seguintes mensagens de erro:

"Workflow Execution ID: failed with reason: ExpectationNotMet. ssm:*CommandInvocations returned terminal state Failed in workflow step LaunchBuildInstance."

"Workflow Execution ID: failed with reason: An error occurred (InvalidInstanceId) when calling the SendCommand operation: Instances [[i-1a1b1c1d1e1f1g1h1]] not in a valid state for account in workflow step LaunchBuildInstance."

"Workflow Execution ID: failed with reason: ExpectationNotMet. ec2:DescribeInstanceStatus did not meet terminal states: [['passed']] after 100 attempts. Reason: Timeout. in workflow step LaunchBuildInstance."

Para solucionar esses erros, execute as seguintes ações.

Valide se a instância do Amazon EC2 tem as permissões de IAM necessárias

Certifique-se de que sua instância do Amazon Elastic Compute Cloud (Amazon EC2) tenha as permissões necessárias do AWS Identity and Access Management (AWS IAM). Anexe a política gerenciada do AmazonSSMManagedInstanceCore ao perfil do IAM que você usa para o Image Builder. Para identificar o perfil que você usa para o Image Builder, verifique os detalhes da configuração da infraestrutura. Além disso, certifique-se de que o perfil AWSServiceRoleForImageBuilder possa usar a chave do AWS Key Management Service (AWS KMS) especificada no dispositivo de bloqueio de fórmulas de imagens.

Certifique-se de que o SSM Agent possa alcançar os endpoints

Verifique as seguintes configurações com base em sua configuração:

  • Se você usar uma sub-rede pública com um gateway de internet, configure a sub-rede para atribuir automaticamente um endereço IPv4 público.
  • Se você usa uma sub-rede privada com um gateway NAT, configure o gateway NAT para usar uma sub-rede pública.
  • Se você usa uma sub-rede privada com endpoints da Amazon Virtual Private Cloud (Amazon VPC), configure endpoints privados para o AWS Systems Manager.
  • Confirme se o grupo de segurança e as listas de controle de acesso à rede (ACLs de rede) permitem conexões de entrada nas portas efêmeras 1024-65535 e conexões de saída na porta 443.
  • Se você usa uma sub-rede privada com endpoints do AWS PrivateLink, confirme se o grupo de segurança do endpoint da Amazon VPC permite conexões de entrada na porta 443.
    Observação: para permitir as conexões de entrada, use a sub-rede ou o endereço CIDR da Amazon VPC.

Para conferir outras etapas de solução de problemas, consulte Por que meu pipeline de criação de imagem está falhando com o erro de tempo limite da etapa esgotado enquanto a etapa está verificando a disponibilidade do Systems Manager Agent nas instâncias de destino no Image Builder?

O tempo limite é atingido quando a compilação baixa a AWS CLI

Se a imagem de máquina da Amazon (AMI) da instância do EC2 não tiver a AWS CLI, o script de bootstrap instalará a AWS CLI pela Internet. No entanto, se você criar em uma sub-rede privada que não permite conectividade com a Internet, a compilação expirará na etapa ApplyBuildComponents. Para uma compilação de contêiner, o tempo limite é atingido na etapa BootstrapBuildInstance.

Para resolver esse problema de tempo limite, permita a conectividade com a Internet na sub-rede por meio de um gateway NAT ou gateway de Internet. Ou crie uma AMI personalizada na qual você instala a AWS CLI.

O tempo limite é atingido na etapa LaunchBuildInstance

Você deve usar nomes exclusivos de dispositivos raiz em sua instância de compilação. Como resultado, não é uma prática recomendada nomear seu dispositivo raiz como /dev/xvda ou /dev/sda1. Se você usar um nome de dispositivo raiz duplicado ao usar a API CreateImageRecipe, atingirá o tempo limite com a seguinte mensagem de erro:

"Workflow Execution ID: failed with reason: ExpectationNotMet. ec2:DescribeInstanceStatus did not meet terminal states: [['passed']] after 100 attempts. Reason: Timeout. in workflow step LaunchBuildInstance."

Observação: se você usa uma instância criada no AWS Nitro System ou que é do tipo Xen, é possível usar um nome de dispositivo duplicado.

Para verificar o nome do dispositivo da AMI de origem, execute o seguinte comando describe-images da AWS CLI:

aws ec2 describe-images \
    --region exampleregion \
    --image-ids exampleami

Observação: substitua exampleregion pela sua região da AWS e exampleami pelo ID da AMI de origem.

Na saída, verifique o valor de RootDeviceName. Certifique-se de usar o mesmo nome de dispositivo na fórmula do Image Builder.

O tempo limite é atingido quando a compilação obtém os componentes do Image Builder

Se você criar em uma sub-rede privada e o Image Builder não conseguir se conectar para baixar componentes, você receberá a seguinte mensagem de erro:

"failed with reason: failed to download the EC2 Image Builder Component, operation error imagebuilder: GetComponent, exceeded maximum number of attempts, 3, dial tcp i/o timeout."

Para resolver o erro anterior, certifique-se de que seus grupos de segurança e a resolução de DNS permitam a comunicação nas portas necessárias. Ou crie uma interface de endpoint da Amazon VPC para a mesma VPC e sub-rede que você usa na configuração da sua infraestrutura do Image Builder. Além disso, verifique se sua configuração atende aos requisitos do Image Builder.

O tempo limite é atingido quando a compilação recupera a mirrorlist

O Amazon Linux armazena a mirrorlist em um bucket do Amazon Simple Storage Service (Amazon S3). Se você criar em uma sub-rede privada que não tem acesso ao Amazon S3, receberá a seguinte mensagem de erro de tempo limite:

"Could not retrieve mirrorlist; error was 12: Timeout was reached."

Para resolver esse problema, crie um endpoint de gateway da Amazon VPC para o Amazon S3. Por padrão, a Amazon VPC adiciona a lista de prefixos do Amazon S3 à tabela de rotas quando você cria um endpoint. No entanto, é uma prática recomendada confirmar se a lista de prefixos está na tabela de rotas.

Se você criar em uma AMI que não seja o Amazon Linux, a mirrorlist não será armazenada no Amazon S3. Nesse cenário, um tempo limite de compilação pode ser atingido quando a compilação obtém o repository/mirrorlist. Certifique-se de permitir o endereço ou URL do repositório em seu firewall ou proxy de rede. Se o repository/mirrorlist exigir a Internet, permita a conectividade com a Internet na sub-rede por meio de um gateway NAT.

O tempo limite é atingido na etapa ApplyBuildComponents

Se for atingido o tempo limite de compilação na etapa ApplyBuildComponents, você receberá a seguinte mensagem de erro:

"Workflow Execution ID: failed with reason: ExpectationNotMet. ssm:ListCommandInvocations did not meet terminal states: [['Success']] after 1440 attempts. Reason: Timeout. in workflow step ApplyBuildComponents."

Para solucionar esse problema, analise os logs que o Image Builder enviou para o bucket do Amazon S3 da infraestrutura. Para mais informações, consulte Review workflow runtime logs (Consulte os logs de runtime do workload) em Troubleshoot pipeline builds (Solucionar problemas de compilação de pipelines).

Além disso, analise os logs de componentes da instância que você usa para criar ou testar uma nova imagem. Antes de verificar os logs, desative a opção Encerrar instância em caso de falha. Para acessar esse atributo, conclua as seguintes etapas:

  1. Abra o console do Image Builder.
  2. Escolha Editar infraestrutura.
  3. Escolha Editar e selecione Especificar configurações para solucionar problemas com a criação da imagem.
  4. Escolha Configurações da instância e desmarque a opção Encerrar instância em caso de falha.

Observação: o arquivo de log detailedoutput.json descreve o motivo pelo qual o componente falhou ou atingiu o tempo limite. O arquivo application.log fornece informações de solução de problemas em nível de depuração.

Por fim, verifique o valor do parâmetro timeoutSeconds no esquema YAML do seu documento. O valor padrão é 7200. Para aumentar o tempo até que o Image Builder expire, atualize o valor em seu documento YAML. Um valor de -1 é infinito.

AWS OFICIALAtualizada há 9 meses