Я пытаюсь использовать 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
.