¿Cómo soluciono el error “error pulling image configuration: toomanyrequests” (Error al extraer la configuración de imagen: demasiadas solicitudes) cuando utilizo imágenes de Docker en AWS CodeBuild?

5 minutos de lectura
0

Quiero resolver el error “error pulling image configuration: toomanyrequests” (Error al extraer la configuración de imagen: demasiadas solicitudes) que aparece cuando uso imágenes de Docker en AWS CodeBuild.

Descripción breve

Si utiliza imágenes de Docker en CodeBuild, puede experimentar una limitación al extraer capas del repositorio DockerHub público.

Para resolver el error que aparece cuando se produce la limitación, debe configurar CodeBuild para autenticar las extracciones de capa con las credenciales de su cuenta de DockerHub.

**Importante:**Para completar los siguientes pasos, debe tener una cuenta de DockerHub, así como un nombre de usuario y contraseña para su cuenta.

Resolución

Almacene sus credenciales de DockerHub con AWS Secrets Manager

1.    Abra la consola de AWS Secrets Manager.

2.    Seleccione Store a new secret (Guardar un nuevo secreto).

3.    En la sección Select secret type (Seleccionar tipo de secreto), elija Other type of secrets (Otro tipo de secretos).

4.    En la sección Specify the key/value pairs to be stored in this secret (Especificar los pares clave y valor que se almacenarán en este secreto), elija la pestaña Secret key/value(Clave y valor de secreto).

5.    En el primer cuadro de texto, introduzca username (Nombre de usuario). En el segundo cuadro de texto, introduzca su nombre de usuario de DockerHub. A continuación, elija Add row (Añadir fila).

6.    En el primer cuadro de texto de la nueva fila, introduzca password (Contraseña). En el segundo cuadro de texto, introduzca su contraseña de DockerHub. A continuación, elija Add row (Añadir fila).

7.    Elija Next (Siguiente).

8.    En Secret name (Nombre de secreto), introduzca un nombre para el secreto. Por ejemplo: **dockerhub **

9.    Elija Next (Siguiente).

10.    Confirme que esté seleccionada la configuración predeterminada para Disable automatic rotation (Desactivar la rotación automática).

11.    Elija Next (Siguiente).

12.    Elija Store (Almacenar).

13.    En la columna Secret name (Nombre de secreto), elija su secreto.

14.    En la sección Secret details (Detalles del secreto), anote el nombre de recurso de Amazon (ARN) para Secret ARN (ARN del secreto).

**Nota:**Si ha creado un secreto configurado con una clave de cifrado administrada por el cliente, debe añadir permisos para la acción kms:Decrypt mediante la clave configurada.

Resolver la limitación que se produce en la fase de APROVISIONAMIENTO

1.    Abra la consola de CodeBuild.

2.    En el panel de navegación, elija Build (Compilar) y, a continuación, elija Build projects (Proyectos de compilación).

3.    Elija su proyecto de compilación.

4.    Elija Edit (Editar) y, a continuación, elija Environment (Entorno).

5.    Elija Override image (Anular imagen).

6.    En New environment image (Nueva imagen de entorno), elija Custom image (Imagen personalizada).

7.    En Environment type (Tipo de entorno), seleccione su imagen personalizada.

8.    En Image registry (Registro de imagen), elija Other registry (Otro registro).

9.    En External registry URL (URL de registro externa), introduzca el nombre de su imagen de Docker.

10.    En Registry credential (Credencial de registro), introduzca el ARN secreto que anotó anteriormente.

11.    Elija Update environment (Actualizar entorno).

Resolver la limitación que se produce en otras fases

**Importante:**Debe conceder permisos de AWS Identity and Access Management (IAM) al rol de servicio de CodeBuild para acceder al secreto.

1.    Abra la consola de CodeBuild.

2.    En el panel de navegación, elija Build (Compilar) y, a continuación, elija Build projects (Proyectos de compilación).

3.    Elija su proyecto de compilación.

4.    Elija la pestaña Build details (Detalles de compilación).

5.    En la sección Environment (Entorno), en Service role (Rol de servicio), elija el ARN de rol de servicio. Esta acción abre la consola de IAM.

6.    En la pestaña Permissions (Permisos), elija Add inline policy (Añadir política en línea).

7.    Elija la pestaña JSON.

8.    Sustituya el código del editor de texto por la siguiente política de IAM:

**Nota:**Sustituya YOUR\ _SECRET\ _ARN por el ARN de secreto que anotó anteriormente.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": [
        "YOUR_SECRET_ARN*"
      ]
    }
  ]
}

9.    Elija Review policy (Política de revisión).

10.    En Name (Nombre), introduzca un nombre para la política. Por ejemplo: dockerhub_secret_access **Nota:**Puede elegir cualquier nombre para la política. El nombre solo se utiliza para que pueda hacer referencia posteriormente a la misma.

11.    Elija Create policy (Crear política).

Configurar CodeBuild para recuperar el secreto

1.    Abra la consola de CodeBuild.

2.    En el panel de navegación, elija Build (Compilar) y, a continuación, elija Build projects (Proyectos de compilación).

3.    Elija su proyecto de compilación.

4.    Elija Edit (Editar) y, a continuación, elija Environment (Entorno).

5.    Expanda la sección Additional configuration (Configuración adicional).

6.    Para añadir variables de entorno, en la sección Environment variables (Variables de entorno), en Name (Nombre), introduzca DOCKERHUB_USERNAME.

7.    En Value (Valor), introduzca el nombre del secreto, seguido de**:username**. Por ejemplo: dockerhub:username

8.    En Type (Tipo), elija Secrets Manager (Administrador de secretos).

9.    Para añadir la siguiente variable de entorno, elija Add environment variable (Añadir variable de entorno).

10.    En Name (Nombre), introduzca DOCKERHUB_PASSWORD.

11.    En Value (Valor), introduzca el nombre del secreto, seguido de :password. Por ejemplo: dockerhub:password

12.    En Type (Tipo), elija Secrets Manager (Administrador de secretos).

13.    Elija Update environment (Actualizar entorno).

14.    Modifique la especificación de compilación y añada el siguiente comando antes de realizar cualquier otra acción de Docker:

echo "${DOCKERHUB_PASSWORD}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin

Advertencia: Este comando puede registrar los detalles de su nombre de usuario y contraseña de inicio de sesión de Docker en los registros de compilación. Después de resolver el error de limitación, restablezca la contraseña de Docker.

Por ejemplo:

version: 0.2

phases:
  install:
    commands:
      - echo "${DOCKERHUB_PASSWORD}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin
  build:
    commands:
      - docker pull docker:dind
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año