web-dev-qa-db-fra.com

Déploiement AWS Docker

J'ai une image de menu fixe personnalisée téléchargée sur ECS. J'ai ouvert les autorisations pour essayer de résoudre ce problème (je le verrouillerai une fois que je pourrai le faire fonctionner). J'essaye de déployer l'image de docker sur un haricot élastique. J'ai un environnement de beanstalk élastique activé par docker mis en place. Selon la documentation AWS, si je récupère mon image dans AWS, je n'ai pas besoin de transmettre les informations d'identification. Je télécharge donc mon fichier Dockerrun.aws.json et tente de l'installer. Il échoue avec l'erreur:

La commande a échoué sur l'instance. Code de retour: 1 Sortie: Échec de l'authentification auprès de la caisse enregistreuse électronique pour le registre '434875166128' dans 'us-east-1'. Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/03build.sh a échoué. Pour plus de détails, consultez /var/log/eb-activity.log à l'aide de la console ou de l'interface de ligne de commande EB.

Les informations /var/log/eb-activity.log ne contiennent rien d’utile.

Voici mon fichier Dockerrun.aws.json:

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
  "Name": "{id000xxxx}.dkr.ecr.us-east-1.amazonaws.com/my-repo:1.0.0",
  "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "4000"
    }
  ],
  "Logging": "/var/log/app-name"
}

J'ai également essayé d'ajouter l'authentification avec le fichier dockercfg.json dans S3. Cela n'a pas fonctionné pour moi non plus.

Notez que j'utilise un compte professionnel au lieu d'un compte personnel. Il est donc possible que certains écarts soient également inconnus.

Merci!

Mise à jour: Mon utilisateur dispose également d'autorisations complètes. Par conséquent, rien ne devrait empêcher les autorisations.

23
Nick Allen

J'avais le même problème.

Solution: Dans AWS -> IAM -> Roles - >, choisissez le rôle que votre beanstalk utilise. 

Dans mon cas, il était réglé sur aws-elasticbeanstalk-ec2-role

Sous Autorisations pour le rôle, attachez une stratégie: AmazonEC2ContainerRegistryReadOnly

Dans ECR, il n'est pas nécessaire d'accorder d'autorisations à ce rôle.

51
Anter

Vous pouvez initialiser les rôles de service nécessaires pour le haricot élastique (aws-elasticbeanstalk-ec2-role, aws-elasticbeanstalk-service-role, AWSServiceRoleForECS) en utilisant la console new de Elastic Beanstalk. Vous devez le faire une seule fois sur chaque compte AWS:

  • Accédez à la console Elastic Beanstalk.
  • Acceptez le "nouveau design": dans la partie supérieure de la console, si le message "Nous testons un nouveau design", acceptez d’utiliser la nouvelle version de la console. Attention, il semble que vous ne puissiez pas revenir à l’ancienne console.
  • Lancez l'assistant Créer une nouvelle application et utilisez un exemple d'application par défaut dans la technologie.
  • Effectuez toutes les étapes de l’assistant jusqu’à la reprise et consultez le panneau de sécurité: vous verrez les deux rôles "aws-elasticbeanstalk-ec2-role" et "aws-elasticbeanstalk-service-role". Et terminez l'assistant pour créer l'exemple d'application.
  • Après un moment, l'application devrait être en cours d'exécution
  • En cas d'urgence, accédez à la console IAM et supprimez les rôles aws -asticbeanstalk-ec2-role et aws-elasticbeanstalk-service-role et exécutez à nouveau l'assistant.

J'ai corrigé le message "Echec de la commande sur l'instance. Code de retour: 1 Sortie: Échec de l'authentification auprès d'ECR pour le registre" et une autre erreur étrange ("L'ID de clé d'accès AWS que vous avez fourni n'existe pas dans nos enregistrements. (ElasticBeanstalk :: ManifestDownloadError)." ") en utilisant la console NEW. J'ai toujours eu cette erreur avec l'ancien.

0
JayMore