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

«Aws ec2 associate-address» не работает при использовании в UserData вместе с Auto Scaling Group

Я пытаюсь использовать AWS CloudFormation для создания экземпляра NAT через AutoScalingGroup, и я столкнулся с проблемой при попытке связать EIP во время создания экземпляра через LaunchConfiguration с помощью UserData.

Ниже мой UserData (вырезано и отредактировано, шаблон CloudFormation создается с помощью Ansible, следовательно, переменные стиля Jinja2),

 "UserData": {
     "Fn::Base64": {
         "Fn::Join": [
             "",
             [
                 "#!/bin/bash\n",
                 "\n",
                 "# Associate EIP address\n",
                 "aws ec2 associate-address --instance-id `curl http://169.254.169.254/latest/meta-data/instance-id` --allocation-id {{ nat_eip_allocation_id }} --region {{ aws_region }}\n"
             ]
         ]
     }
 }

Что действительно странно, так это то, что приведенный выше код выводит на экземпляре следующее (я передаю вывод в файл журнала),

 {
     "AssociationId": "eipassoc-b33d5ad7", 
     "return": "true"
 }

Тем не менее, когда я захожу в консоль AWS, я нигде не могу найти эту ассоциацию, EIP не выделен, а у экземпляра EC2 нет EIP или какого-либо общедоступного IP-адреса в этом отношении.

Если я связываю его вручную, все работает нормально.

Я упустил что-то действительно очевидное? Это потому, что у меня AssociatePublicIpAddress установлен в false в LaunchConfiguration? Я предположил, что мне нужно это сделать, поскольку мне не нужен автоматически назначенный IP.

Спасибо

Похоже на настройку AssociatePublicIpAddress к false действительно блокирует EIP от связывания через CLI во время UserData исполнение.

Кажется расточительным получать общедоступный IP-адрес только для его замены, но решение состоит в том, чтобы установить AssociatePublicIpAddress к true.