Назад | Перейти на главную страницу

Сетевые ошибки при запуске `apt-get update` в скрипте cloud-init

Вчера я создал свою первую группу автомасштабирования в AWS. Я написал сценарий cloud-init / userdata для установки своего приложения и протестировал его ~ 40 раз без каких-либо ошибок. Незадолго до того, как я вернулся домой, он внезапно перестал работать, новые экземпляры, которые запускаются, никогда не становятся работоспособными и в конечном итоге закрываются по истечении их льготного периода.

Сегодня утром я зашел и обнаружил, что проблема не устранена. Я подключился к экземпляру по SSH, просмотрел файл cloud-init-output.log и обнаружил следующее:

Err:1 http://ap-southeast-2.ec2.archive.ubuntu.com/ubuntu xenial InRelease
  Could not connect to ap-southeast-2.ec2.archive.ubuntu.com:80 (54.253.131.141), connection timed out [IP: 54.253.131.141 80]
Err:2 http://ap-southeast-2.ec2.archive.ubuntu.com/ubuntu xenial-updates InRelease
  Unable to connect to ap-southeast-2.ec2.archive.ubuntu.com:http: [IP: 54.253.131.141 80]
Err:3 http://ap-southeast-2.ec2.archive.ubuntu.com/ubuntu xenial-backports InRelease
  Unable to connect to ap-southeast-2.ec2.archive.ubuntu.com:http: [IP: 54.253.131.141 80]
Err:4 http://security.ubuntu.com/ubuntu xenial-security InRelease
  Cannot initiate the connection to security.ubuntu.com:80 (2001:67c:1360:8001::21). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8001::21 80]
Reading package lists...
W: Failed to fetch http://ap-southeast-2.ec2.archive.ubuntu.com/ubuntu/dists/xenial/InRelease  Could not connect to ap-southeast-2.ec2.archive.ubuntu.com:80 (54.253.131.141), connection timed out [IP: 54.253.131.141 80]
W: Failed to fetch http://ap-southeast-2.ec2.archive.ubuntu.com/ubuntu/dists/xenial-updates/InRelease  Unable to connect to ap-southeast-2.ec2.archive.ubuntu.com:http: [IP: 54.253.131.141 80]
W: Failed to fetch http://ap-southeast-2.ec2.archive.ubuntu.com/ubuntu/dists/xenial-backports/InRelease  Unable to connect to ap-southeast-2.ec2.archive.ubuntu.com:http: [IP: 54.253.131.141 80]
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/xenial-security/InRelease  Cannot initiate the connection to security.ubuntu.com:80 (2001:67c:1360:8001::21). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8001::21 80]
W: Some index files failed to download. They have been ignored, or old ones used instead.

Это вызвано sudo apt-get update команда в верхней части моего скрипта. После этого несколько пакетов в моем sudo apt-get -y install не удается установить, что мешает работе моего приложения.

Странно то, что если я убегу sudo apt-get update через SSH работает без ошибок, только в скрипте cloud-init не работает. Я догадываюсь, что, возможно, экземпляр еще не подключился к сети во время выполнения скрипта? Если это так, как я могу обойти эту проблему?

РЕДАКТИРОВАТЬ: я больше не могу воспроизвести эту проблему. Я добавил это в начало своего скрипта, чтобы попытаться предотвратить повторение проблемы:

until ping -c1 ap-southeast-2.ec2.archive.ubuntu.com &>/dev/null; do echo "waiting for networking to initialise"; done

Но сообщение «Ожидание инициализации сети» отсутствует в cloud-init-output.log, поэтому кажется, что этот код ничего не делает, и проблема могла быть временной. Если кто-нибудь знает, что вызывает эту проблему и какой более надежный способ ее решения, сообщите мне.

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

Причина, по которой эту проблему было трудно устранить, заключается в том, что для подключения к SSH и просмотра журналов я назначал экземпляру эластичный IP-адрес, что затем привело к успешному выполнению сценария.