当我将Network Load Balancer与Auto Scaling一起使用时,每次产生一个实例都会获得一个新的公共IP。 我希望每个实例都有一个EIP。我希望当我将EIP分配给Network Loadbalancer配置中的可用区时,就可以解决问题。 有没有一种方法可以为实例生成自动缩放和静态IP?
据此看来,这是不可能的:
不幸的是,无法自动进行自动缩放 为新启动的实例分配弹性IP地址
Static IP for Auto Scale in AWS
并据此:
答案 0 :(得分:1)
编写脚本并将其放在自动缩放组的启动配置中的启动脚本中,该脚本可以执行您想要的任何事情,从分配新的EIP到检查其他服务的白名单/黑名单。 有关更多信息,请阅读 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html
答案 1 :(得分:1)
正如其他人所提到的,可以通过供应新的EIP
并使用UserData
将实例与新发布的EIP
关联来实现。但是,以下设置会出现以下问题:
1)默认情况下,EIP对每个VPC有5个限制,即使您可以增加限制,您也需要知道VPC将使用的最大EIP数量
2)实例终止后,您将需要创建一个流程以删除陈旧的EIP或弄清楚如何重新关联先前分配的EIP
我已经说过,我确实在ASG中使用了静态EIP
,但它仅用于HA
而不是可伸缩性,因此在以下示例中,我每次都重复使用现有的EIP
启动一个新实例
#!/bin/bash -xe
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
aws ec2 disassociate-address --association-id ${OpenPVNEIP.AllocationId} --region ${AWS::Region} || true
aws ec2 associate-address --instance-id "${!INSTANCE_ID}" --allocation-id ${OpenPVNEIP.AllocationId} --region ${AWS::Region}
答案 2 :(得分:0)
我在专用子网中创建了一个Lambda。 我将专用子网链接到NAT网关,因此设法为Lambda获取了静态IP。限制5个EIP对我来说是个问题。
https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/
答案 3 :(得分:0)
使用 EC2 和自动扩展,您需要在 EC2 中使用 user data
将弹性 IP 自动附加到 EC2 实例以进行自动扩展
#!/bin/bash
aws configure set aws_access_key_id "XYZ..."
aws configure set aws_secret_access_key "ABC..."
aws configure set region "ap-..."
aws ec2 associate-address --instance-id "$(curl -X GET "http://169.254.169.254/latest/meta-data/instance-id")" --public-ip your_elastic_IP
注意:您应该创建新用户,IAM 仅具有创建/获取 aws 密钥的权限关联地址
希望对你有帮助:)