3

Я хочу развернуть приложение с несколькими контейнерами в эластичном бобовом стебле. Я получаю следующую ошибку.Эластичная дозатор MultiContainer BeanStalk не работает

Error 1: The EC2 instances failed to communicate with AWS Elastic Beanstalk, either because of configuration problems with the VPC or a failed EC2 instance. Check your VPC configuration and try launching the environment again.

Я настроил VPC только с публичной подсети и группы безопасности, что позволяет весь трафик, как входящий и исходящий. Я знаю, что это не рекомендуется для развертывания уровня производительности, но я уменьшил сложность, чтобы найти причину ошибки.

Итак, балансировщик нагрузки и экземпляр EC2 находятся в одной и той же общественной подсети, которая подключена к интернет-шлюзу. Они оба используют одну и ту же группу безопасности, которая позволяет весь трафик.

Перед выше ошибок, я также получаю другую ошибку, указав Ошибки 2: Нет определение ЭКС задачи (или пустой файл определение) найдено в среде

Сказав, я в комплекте моего Dockerrun.aws.json файл с .ebextensions папкой внутри исходного пакета, который использует beanstalk для развертывания. После всех этих ошибок, свертывание на два вопроса:

  1. Я не могу понять, почему не появляется ошибка задачи ЭКС, когда я упаковывают свой файл, содержащий dockerrun.aws.json containerDefinitions?
  2. Поскольку нет задачи ecs, в экземпляре ничего не выполняется. Разве это почему beanstalk и ELB не могут связаться с экземпляром? (Предполагая, что моя общественная подсеть и вся группа безопасности трафика не являются проблемой)

ответ

2

Проблема была в VPC. Даже у меня был простой VPC с только публичной подсети, beanstalk не может разговаривать с экземпляром, и поэтому не может развернуть определение задачи ECS и контейнеры докеров в этом экземпляре.

Создание двух подсетей, а именно публичных и частных и имеющих экземпляр NAT в публичной подсети, который становится маршрутизатором для экземпляров в частной подсети. Выполнение вышеуказанной настройки работало для меня, и я смог успешно развернуть определение задачи ECS для экземпляра EC2 в частной подсети.

1

Я нашел этот вопрос, потому что у меня такая же ошибка. Вот шаги, которые работали для меня на самом деле развернуть приложение мульти-контейнер на Beanstalk:

пройти этот конкретный ошибка, я использовал eb инструменты CLI. По какой-то причине, используя eb deploy вместо того, чтобы закрепить и загрузить, я исправил это. На самом деле это не работало, но это дало мне новую ошибку.

Итак, я изменил свой Dockerrun.aws.json, формат файла, который нуждается в дополнительной документации для WAY, до тех пор, пока я не получу ошибки около , которые.

Тогда у меня была еще лучшая ошибка!

ERROR: [Instance: i-0*********0bb37cf] Command failed on instance. 
Return code: 1 Output: (TRUNCATED)..._api_call 
raise ClientError(parsed_response, operation_name) 
botocore.exceptions.ClientError: An error occurred (AccessDenied) when 
calling the GetObject operation: Access Denied 
Failed to download authentication credentials [config file name] from [bucket name]. 
Hook /opt/elasticbeanstalk/hooks/appdeploy/enact/02update- 
credentials.sh failed. For more detail, check /var/log/eb-activity.log 
using console or EB CLI. 

this part of the docs Per путь для решения этой проблемы заключается в

  1. Откройте Roles страницу в IAM консоли.

  2. Выберите aws-elasticbeanstalk-ec2-role.

  3. На вкладке «Разрешения» в разделе «Управляемые политики» выберите «Политика присоединения».

  4. Выберите управляемую политику для дополнительных сервисов, которые использует ваше приложение. Например, AmazonS3FullAccess или AmazonDynamoDBFullAccess. (Для нашей проблемы, S3 один)

  5. Выберите политику присоединения.

Эта часть получила очень интересно, потому что я получил еще одну ошибку: Authentication credentials are not in JSON format as expected. Please generate the credentials using 'docker login'. (Имейте в виду, я пытался следовать the instructions о том, как сделать это в письме, но, да ладно). Оказывается, этот был на мне, я исказил JSON в моем архиве DockerHub, хранящемся на S3. Я переименовал файл в dockercfg.json, чтобы получить проверку синтаксиса, и кажется, что Beanstalk/ECS в порядке с .json как часть имени, потому что на этот раз ... произошла другая ошибка: CannotPullContainerError: Error: image [DockerHub organization]/[repo name]:latest not found). Хм, может, была опечатка? Давайте проверим:

$ docker run -it [DockerHub organization]/[repo name]:latest 
Unable to find image '[DockerHub organization]/[repo name]:latest' locally 
latest: Pulling from [DockerHub organization]/[repo name] 

Хорошо, репо есть. Итак ... мой аут плохой? Оказывается, я последовал примеру в документах DockerHub, которые были из того, что вы не должны делать. Ваш dockercfg.json должен выглядеть

{ 
    "https://index.docker.io/v1/": { 
    "auth": "ZWpMQ=Vyd5zOmFsluMTkycN0ZGYmbn=WV2FtaGF2", 
    "email": "[email protected]" 
    } 
} 

Существовало несколько больше ошибок (объем sourcePath должен быть абсолютным путем! Вот что значит invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed сообщения), но в конце концов развернуто. Извините за роман; надеясь, что это поможет кому-то.

+0

https://github.com/micahhausler/container-transform был действительно полезен с форматом Dockerrun.aws.json –

 Смежные вопросы

  • Нет связанных вопросов^_^