Comment résoudre l'erreur « error pulling image configuration: toomanyrequests » (erreur lors de l'extraction de la configuration de l'image) lorsque j'utilise des images Docker dans AWS CodeBuild ?

Date de la dernière mise à jour : 04/08/2021

Je veux résoudre l'erreur « error pulling image configuration: toomanyrequests » (erreur lors de l'extraction de la configuration de l'image) que je reçois lorsque j'utilise des images Docker dans AWS CodeBuild.

Brève description

Si vous utilisez des images Docker dans CodeBuild, vous pouvez rencontrer une limitation lorsque vous extrayez des couches du référentiel DockerHub public.

Pour résoudre l'erreur que vous recevez lorsque la limitation se produit, vous devez configurer CodeBuild pour authentifier les extractions de couche à l'aide des informations d'identification de votre compte DockerHub.

Important : pour effectuer les étapes suivantes, vous devez disposer d'un compte DockerHub ainsi que du nom d'utilisateur et du mot de passe de votre compte.

Solution

Stocker vos informations d'identification DockerHub avec AWS Secrets Manager

1.    Ouvrez la console AWS Secrets Manager.

2.    Choisissez Stocker un nouveau secret.

3.    Dans la section Sélectionner le type de secret, choisissez Autre type de secrets.

4.    Dans la section Spécifier les paires clé/valeur à stocker dans ce secret, choisissez l'onglet Clé secrète/valeur.

5.    Dans la première zone de texte, saisissez username (nom d'utilisateur). Dans la deuxième zone de texte, saisissez votre nom d'utilisateur DockerHub. Ensuite, choisissez Add row (Ajouter une ligne).

6.    Dans la première zone de texte de la nouvelle ligne, entrez password. Dans la deuxième zone de texte, saisissez votre mot de passe DockerHub. Ensuite, choisissez Add row (Ajouter une ligne).

7.    Choisissez Suivant.

8.    Pour Nom du secret, entrez un nom pour votre secret. Par exemple : dockerhub

9.    Sélectionnez Next (Suivant).

10.    Vérifiez que le paramètre par défaut pour Disable automatic rotation(Désactiver la rotation automatique) est sélectionné.

11.    Sélectionnez Suivant.

12.    Choisissez Stocker.

13.    Dans la colonne Nom du secret, choisissez votre secret.

14.    Dans la section Secret details(Détails du secret), notez l'Amazon Resource Name (ARN) pour Secret ARN (l'ARN du secret).

Résoudre la limitation qui se produit dans la phase PROVISIONING (provisionnement)

1.    Ouvrez la console CodeBuild.

2.    Dans le panneau de navigation, choisissez Construire, puis Construire des projets.

3.    Choisissez votre projet de construction.

4.    Choisissez Modifier, puis Environnement.

5.    Choisissez Remplacer l'image.

6.    Pour Nouvelle image d'environnement, choisissez Image personnalisée.

7.    Pour Environment type (Type d'environnement), sélectionnez votre image personnalisée.

8.    Pour Registre d'image, choisissez Autre registre.

9.    Pour URL du registre externe, entrez le nom de votre image Docker.

10.    Pour Informations d'identification du registre, entrez l'ARN du secret que vous avez noté précédemment.

11.    Choisissez Update environment (Mettre à jour l'environnement).

Résoudre la limitation qui se produit dans d'autres phases

Important : vous devez accorder des autorisations AWS Identity and Access Management (IAM) au rôle de service CodeBuild pour accéder au secret.

1.    Ouvrez la console CodeBuild.

2.    Dans le panneau de navigation, choisissez Construire, puis Construire des projets.

3.    Choisissez votre projet de construction.

4.    Choisissez l'onglet Détails de construction.

5.    Dans la section Environnement, pour Service role (Rôle de service), choisissez l'ARN du rôle de service. Cela ouvre la console IAM.

6.    Dans l'onglet Autorisations, choisissez Ajouter une stratégie en ligne.

7.    Sélectionnez l'onglet JSON.

8.    Remplacez le code de l'éditeur de texte par la politique IAM suivante :

Important : remplacez YOUR_SECRET_ARN par l'ARN du secret que vous avez noté précédemment.

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

9.    Choisissez Examiner une politique.

10.    Pour Name (Nom), entrez un nom pour la politique. Par exemple : dockerhub_secret_access Remarque : vous pouvez choisir n'importe quel nom pour la politique. Le nom est pour votre propre référence future seulement.

11.    Choisissez Créer une stratégie.

Configurer CodeBuild pour récupérer le secret

1.    Ouvrez la console CodeBuild.

2.    Dans le panneau de navigation, choisissez Construire, puis Construire des projets.

3.    Choisissez votre projet de construction.

4.    Choisissez Modifier, puis Environnement.

5.    Développez la section Configuration supplémentaire.

6.    Pour ajouter des variables d'environnement, dans la section Variables d'environnement, pour Nom, saisissez DOCKERHUB_USERNAME.

7.    Pour Valeur, entrez le nom de votre secret, suivi par :username. Par exemple : dockerhub:username

8.    Pour Type, choisissez Secrets Manager.

9.    Pour ajouter la variable d'environnement suivante, choisissez Add environment variable (Ajouter une variable d'environnement).

10.    Pour Nom, saisissez DOCKERHUB_PASSWORD.

11.    Pour Value, entrez le nom de votre secret, suivi par :password. Par exemple : dockerhub:password

12.    Pour Type, choisissez Secrets Manager.

13.    Choisissez Mettre à jour l'environnement.

14.    Modifiez votre buildpec et ajoutez la commande suivante avant d'effectuer toute autre action sur le Docker :

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

Par exemple:

version: 0.2

phases:
  install:
    commands:
      - echo "${DOCKERHUB_PASSWORD}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin

  build:
    commands:
      - docker pull docker:dind

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?