#amazon-web-services #amazon-ec2 #amazon-cloudformation
#amazon-web-services #amazon-ec2 #aws-cloudformation
Вопрос:
Я использую CloudFormation для определения подсети и экземпляра EC2. Я хочу выделить конкретный частный IP-адрес экземпляру EC2 и попытался сделать это, используя определения ресурсов, подобные приведенным ниже.
Когда я пытаюсь развернуть свой шаблон, создание ресурса NetworkInterface завершается ошибкой с сообщением «Адрес находится в зарезервированном диапазоне адресов подсети». Я пытался решить эту проблему, но не добился прогресса. Как мне определить свою подсеть с диапазоном частных IP-адресов, которые я могу применить к своим экземплярам EC2?
Спасибо.
Примечание: весь шаблон содержит другие ресурсы, поэтому я попытался свести его к важным компонентам, поэтому приведенное ниже намеренно неполное.
"SharedVPC": {
"Type": "AWS::EC2::VPC",
"Properties": {
"CidrBlock": "10.10.0.0/16",
"EnableDnsHostnames": true,
"EnableDnsSupport": true,
"InstanceTenancy": "default"
}
},
"SharedVPCPrivateSubnet1": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"AvailabilityZone": "eu-west-1a",
"CidrBlock": "10.10.129.0/24",
"MapPublicIpOnLaunch": false,
"VpcId": {
"Ref": "SharedVPC"
}
}
},
"DbServerEC2Instance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"KeyName": "WindowsEC2",
"InstanceType": "t2.micro",
"AvailabilityZone": "eu-west-1a",
"ImageId": {
"Ref": "DbServerEC2ImageAMI"
},
"IamInstanceProfile": {
"Ref": "EC2InstanceProfile"
},
"NetworkInterfaces": [{
"NetworkInterfaceId": {
"Ref": "DbServerEC2InstanceNetworkInterface"
},
"DeviceIndex" : "0"
}]
}
},
"DbServerEC2InstanceNetworkInterface": {
"Type": "AWS::EC2::NetworkInterface",
"Properties": {
"Description": "eth0",
"PrivateIpAddresses": [{
"PrivateIpAddress": "10.10.129.2",
"Primary": "true"
},
{
"PrivateIpAddress": "10.10.129.3",
"Primary": "false"
}
],
"SourceDestCheck": "true",
"SubnetId": {
"Ref": "SharedVPCPrivateSubnet1"
}
}
}
Ответ №1:
AWS резервирует первые 4 IP-адреса и последний IP-адрес подсети. Эти диапазоны в подсети недоступны.
В документации AWS указано следующее:
Первые четыре IP-адреса и последний IP-адрес в каждом блоке CIDR подсети недоступны для использования и не могут быть назначены экземпляру. Например, в подсети с блоком CIDR
10.0.0.0/24
зарезервированы следующие пять IP-адресов:
10.0.0.0
: Сетевой адрес.10.0.0.1
: Зарезервировано AWS для маршрутизатора VPC.10.0.0.2
: Зарезервировано AWS. IP-адрес DNS-сервера является базовым для сетевого диапазона VPC плюс два. Для виртуальных серверов с несколькими блоками CIDR IP-адрес DNS-сервера находится в основном CIDR. Мы также резервируем базу каждого диапазона подсети плюс два для всех блоков CIDR в VPC. Дополнительные сведения см. в разделе DNS-сервер Amazon.10.0.0.3
: Зарезервировано AWS для будущего использования.10.0.0.255
: Широковещательный сетевой адрес. Мы не поддерживаем широковещательную передачу в VPC, поэтому мы резервируем этот адрес.
Комментарии:
1. Ах, я думал, что мне не хватает какой-то конфигурации в моей подсети, неудивительно, что я изо всех сил пытался ее найти — вопрос в том, чтобы задать правильный вопрос! Спасибо. Пробую сейчас.
2. Нет проблем, технически первый и последний фактически зарезервированы любой сетью. Остальные 3 относятся к AWS
3. Как только я отошел от зарезервированного диапазона, я обнаружил, что действительно могу выбирать из доступных IP-адресов и выделять их без необходимости сообщать AWS, что это было моим намерением, как я думал, мне нужно. Так что это здорово, спасибо за это простое объяснение 🙂
4. В шаблоне отсутствовал параметр DeviceIndex, поэтому я отредактировал свой вопрос, чтобы включить его; на всякий случай, если кто-нибудь попытается использовать мое определение экземпляра EC2