Je déploie une image docker de Github vers AWS Elastic Beanstalk à l'aide de travis. Cette partie se passe bien, le déploiement réel se termine avec 0 et il y a un .Zip
dans le compartiment S3.
Le problème est que, comme c'est la première fois que j'utilise AWS, j'ai créé l'application à l'aide de l'exemple d'application puisque le code est déployé à partir de Github, et après le déploiement, j'obtiens l'état d'intégrité comme dégradé (signe d'exclamation rouge) avec ce message:
ERROR
During an aborted deployment, some instances may have deployed the new application version. To ensure all instances are running the same version, re-deploy the appropriate application version.
Si je vais à Causes je trouve ceci:
J'ai même supprimé l'exemple d'application et redéployé celui qui avait été téléchargé et obtenu cette erreur particulière. Comme vous pouvez le voir dans le dernier message, j'ai déjà déployé cela 3 fois, obtenant le même résultat.
Enfin, j'ai téléchargé le fichier Zip à partir du compartiment S3 et j'ai trouvé à l'intérieur essentiellement les dossiers src
et public
ainsi que tous les fichiers du dossier racine tels que package.json
, .gitignore
tous les fichiers du docker, etc.
J'ai créé deux dépôts séparés dans github pour tester cela. Le premier dépôt est une page statique dans un conteneur Docker, assez simple. Je crée un environnement dans EB et tout démarre avec l'exemple d'application. Ensuite, je pousse les modifications sur github, travis fait son truc et déploie l'application sur AWS. Cela fonctionne bien et l'environnement de l'application est mis à jour sans erreur. Voici le dépôt: https://github.com/rhernandog/docler-static-page-aws
Le deuxième repo est une application de réaction simple. Même procédure, créez l'environnement dans EB avec l'exemple d'application. Poussez le code sur github, travis fait son truc et se déploie sur AWS. Cela échoue et j'obtiens toujours la même erreur:
Environment health has transitioned from Info to Degraded. Command failed on all
instances. Incorrect application version found on all instances. Expected version
"Sample Application" (deployment 1). Application update failed 1 second ago and
took 2 minutes.
Voici le dépôt de l'application react: https://github.com/rhernandog/react-docker-awseb
En termes de Docker, tout fonctionne bien dans ma machine locale.
Sur la base de la suggestion de @stefansundin, j'ai redéployé l'application sur EB et vérifié les journaux. J'ai fini de regarder les journaux complets pour plus d'informations et j'ai trouvé ceci: /var/log/cfn-hup.log
2020-05-14 17:07:42,605 [WARNING] Action for aws-eb-command-handler exited with 1, returning FAILURE
Le seul endroit où j'ai trouvé une erreur était dans le fichier journal du moteur: /var/log/eb-engine.log
2020/05/14 17:07:42.514601 [INFO] Executing instruction: Docker Specific Build Application
2020/05/14 17:07:42.514605 [INFO] start build docker app
2020/05/14 17:07:42.514615 [INFO] fetch image name
2020/05/14 17:07:42.514639 [INFO] authenticate with ECR if the image is in an ECR repo
2020/05/14 17:07:42.514644 [INFO] pull docker image if update is not false in dockerrun.aws.json
2020/05/14 17:07:42.514657 [INFO] Running command /bin/sh -c docker pull node:12-Alpine AS builder
2020/05/14 17:07:42.558923 [ERROR] "docker pull" requires exactly 1 argument.
Donc, fondamentalement, cela se plaint de cela dans le fichier docker: FROM node:12-Alpine AS builder
. Vous pouvez voir le fichier entier dans le dépôt: https://github.com/rhernandog/react-docker-awseb/blob/master/Dockerfile
Le point est: pourquoi cela ne se produit pas sur ma machine locale? Et comment puis-je obtenir les fichiers à partir de la commande build et les copier dans le dossier nginx?
C'est en fait la seule erreur que j'ai trouvée dans les fichiers journaux.
AWS Docs dire que
Pour résoudre ce problème, démarrez un autre déploiement. Vous pouvez redéployer une version précédente dont vous savez qu'elle fonctionne, ou configurer votre environnement pour ignorer les vérifications de l'état pendant le déploiement et redéployer la nouvelle version pour forcer le déploiement à se terminer.
Vous pouvez également identifier et mettre fin aux instances qui exécutent la mauvaise version d'application. Elastic Beanstalk lancera des instances avec la version correcte pour remplacer toutes les instances que vous résiliez. Utilisez la commande EB CLI health pour identifier les instances qui exécutent la mauvaise version d'application.
Pouvez-vous essayer de supprimer les instances qui exécutent vos applications et démarrer une nouvelle installation?
En outre, vous pouvez utiliser CodePipeline pour déployer vos codes sur Elastic Beanstalk, vous pouvez utiliser votre dossier S3 pour l'étape source et ignorer le processus de construction si votre code est construit sur travis et déployer en utilisant l'étape de déploiement pour installer votre nouvelle application sur votre Elastic Beanstalk. Il peut y avoir une mauvaise configuration lors de l'installation de la nouvelle application dans votre environnement.
Je vous suggère de mettre fin à vos instances et de démarrer de nouvelles instances, désolé si j'ai mal compris votre question.
Je n'ai pas utilisé Docker sur Elastic Beanstalk. Lorsque mon Ruby sur les déploiements Elastic Beanstalk échoue, je trouve que je trouve généralement le problème si je demande les 100 dernières lignes des journaux. Si vous accédez à "Journaux" -> "Demander des journaux" -> "Les 100 dernières lignes", cela peut vous aider.
Si cela échoue, je me connecte en SSH à l'instance et je regarde les journaux dans /var/log
. Peut être docker ps
et docker logs
peut vous aider.
Lors de la création d'un nouvel environnement de serveur Web sur la branche de plate-forme, sélectionnez "Docker fonctionnant sur Amazon Linux 64 bits", cela fonctionnera.