Как создать экземпляр Ec2 с общедоступным IP-адресом автоматически ** без ** объявления эластичного IP-адреса в облачной информации?

Есть ли в AWS Cloudformation какой-либо способ объявить экземпляр EC2 в VPC с общедоступным IP-адресом без необходимости объявлять эластичный IP-адрес и подключаться к нему?

В AWS :: AutoScaling :: LaunchConfiguration можно добавить свойство AssociatePublicIpAddress, чтобы сказать, что экземпляры будут принимать общедоступный IP-адрес автоматически. Ищу аналог для AWS :: EC2 :: Instance

Ниже приведен мой фрагмент облачной информации для создания экземпляра EC2. Я не могу ни одного документа, в котором упоминается, как добавить общедоступный IP-адрес без предварительного объявления эластичного IP-адреса.

"MyEc2Instance": {
    "Type": "AWS::EC2::Instance",
    "Properties": {
        "IamInstanceProfile": {
            "Ref": "MyEc2InstanceProfile"
        },
        "ImageId": {
            "Fn::FindInMap": [
                "MyEc2Box",
                {
                    "Ref": "Region"
                },
                "ImageId"
            ]
        },
        "InstanceType": {
            "Fn::FindInMap": [
                "MyEc2Box",
                {
                    "Ref": "Region"
                },
                "InstanceType"
            ]
        },
        "KeyName": {
            "Ref": "DefaultKeyPair"
        },
        "Monitoring": "true",
        "SecurityGroupIds": [
            {
                "Ref": "MyEc2SecurityGroup"
            }
        ],
        "SubnetId": {
            "Ref": "MyBoxSubnet"
        },
        "Tags": [
            {
                "Key": "Name",
                "Value": "MyBox"
            },
        ]
    }
},

person MechaStorm    schedule 04.01.2015    source источник
comment
Публичный IP назначается автоматически при создании экземпляра ec2. Вам не нужно добавлять его вручную. Вам нужно добавить публичный IP-адрес для отправки?   -  person BMW    schedule 04.01.2015
comment
В настройках подсети есть параметр: Автоматически назначать общедоступный IP-адрес. Вы это пробовали?   -  person Edwin    schedule 05.01.2015
comment
Если мой ответ будет правильным, можете ли вы пометить его как таковой, чтобы помочь другим разобраться в правильных ответах? Благодарность   -  person Sébastien Stormacq    schedule 07.01.2015


Ответы (2)


Предполагая, что вы запускаете свой экземпляр в общедоступной подсети VPC (то есть в подсети с таблицей маршрутизации, включая правило для отправки трафика на 0.0.0.0/0 на интернет-шлюз), просто определите свойство AssociatePublicIpAddress в группе NetworkInterfaces вашего EC2. ресурс:

            "NetworkInterfaces" : [{
                 "AssociatePublicIpAddress" : "True",
                 "DeleteOnTermination" : "True",
                 "SubnetId" : { "Ref" : "PublicSubnet" },
                 "DeviceIndex" : "0",
                 "GroupSet" : [ { "Ref" : "SecurityGroup" } ]
            }],

См. Документацию по адресу http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html

Если вы запускаете свой экземпляр в сети EC2 Classic (без VPC), он автоматически получит общедоступный IP-адрес.

person Sébastien Stormacq    schedule 05.01.2015
comment
Можно ли настроить его в подсети, чтобы все экземпляры EC2 по умолчанию получали общедоступный IP-адрес? Равнозначно включению опции Автоматически назначать общедоступный IP-адрес в конфигурации подсети, доступной в пользовательском интерфейсе консоли AWS. - person Pablo Banderas; 17.02.2015
comment
Я не думаю, что это возможно. API для изменения этого значения - ModifySubnetAttribute (docs.aws.amazon.com / AWSEC2 / latest / APIReference /) и должен вызываться в существующей подсети. Я не могу найти аналога в CloudFormation, но я хотел бы, чтобы меня доказали, что я ошибаюсь в этом вопросе :-) - person Sébastien Stormacq; 18.02.2015
comment
Это не имеет смысла, если у вас есть несколько подсетей, в которые может быть запущен экземпляр (например, в рамках автоматического масштабирования и балансировки нагрузки). Должен быть (может быть?) Параметр, позволяющий просто автоматически назначать общедоступный IP-адрес экземпляру без указания сетевого интерфейса? - person Glenn Bech; 28.12.2016
comment
Если вы все же используете этот метод, убедитесь, что у вас нет свойства SubnetId или SecurityGroups, определенного за пределами вашего свойства NetworkInterfaces, в противном случае вы получите сообщение об ошибке, например: Сетевые интерфейсы и группы безопасности на уровне экземпляра не могут быть указаны в одном запросе. - person Tj Kellie; 21.08.2017

Я вижу, что это старый пост, но я все равно отправляю ответ, он может быть полезен. В подсети вы можете установить: «MapPublicIpOnLaunch» в значение True, чтобы все экземпляры этой подсети имели общедоступный IP-адрес.

MapPublicIpOnLaunch

Indicates whether instances that are launched in this subnet receive a public IP address. By default, the value is false.

Required: No

Type: Boolean

Update requires: No interruption.
person K. Mounir    schedule 06.06.2016
comment
Хотя он действительно устанавливает значение true по умолчанию для общедоступного IP-адреса подсети (что буквально было частью вопроса), похоже, что экземпляры, запускаемые CloudFormation, не придерживаются этого параметра, поэтому он бесполезен для запуска экземпляра CF с публичным IP - person Claude; 13.10.2016