【发布时间】:2021-02-13 06:16:57
【问题描述】:
我尝试了几种方法来重新分配弹性 iP,但没有运气:
-
amazon web services - AWS EC2 User Data script to allocate Elastic IP - Stack Overflow
-
Elastic IP in an Auto-Scaling Group | by lakshman sundaram | Medium
我将 EC2 扩展组配置为使用启动模板和启动配置,如下所示: 最小值= 1,期望值= 1,最大值= 2。
我有两个具有相同区域的子网,但有两个不同的可用区。
每当我终止一个实例时,新实例都会启动,但它不会自动接收公共 IP。即使设置设置为自动接收公共 IP。有时它有新的公共 IP,但它与我想要的不同。 我目前正在使用一个弹性 IP。
用户数据:
#!/bin/bash
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
MAXWAIT=3
ALLOC_ID=eipalloc-redacted
AWS_DEFAULT_REGION=us-east-1
# Make sure the EIP is free
echo "Checking if EIP with ALLOC_ID[$ALLOC_ID] is free...."
ISFREE=$(aws ec2 describe-addresses --allocation-ids $ALLOC_ID --query Addresses[].InstanceId --output text)
STARTWAIT=$(date +%s)
while [ ! -z "$ISFREE" ]; do
if [ "$(($(date +%s) - $STARTWAIT))" -gt $MAXWAIT ]; then
echo "WARNING: We waited 30 seconds, we're forcing it now."
ISFREE=""
else
echo "Waiting for EIP with ALLOC_ID[$ALLOC_ID] to become free...."
sleep 3
ISFREE=$(aws ec2 describe-addresses --allocation-ids $ALLOC_ID --query Addresses[].InstanceId --output text)
fi
done
# Now we can associate the address
echo Running: aws ec2 associate-address --instance-id $INSTANCE_ID --allocation-id $ALLOC_ID --allow-reassociation}
aws ec2 associate-address --instance-id $INSTANCE_ID --allocation-id $ALLOC_ID --allow-reassociation}
角色政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeAddresses",
"ec2:AllocateAddress",
"ec2:DescribeInstances",
"ec2:AssociateAddress"
],
"Resource": "*"
}
]
}
错误:
Cloud-init v. 20.4.1-0ubuntu1~20.04.1 running 'modules:config' at Fri, 12 Feb 2021 21:35:16 +0000. Up 21.57 seconds.
Checking if EIP with ALLOC_ID[eipalloc-redacted1234] is free....
/var/lib/cloud/instance/scripts/part-001: line 9: aws: command not found
Running:
/var/lib/cloud/instance/scripts/part-001: line 24: aws: command not found
/var/lib/cloud/instance/scripts/part-001: line 25: aws: command not found
Cloud-init v. 20.4.1-0ubuntu1~20.04.1 running 'modules:final' at Fri, 12 Feb 2021 21:35:28 +0000. Up 33.63 seconds.
2021-02-12 21:35:28,823 - cc_scripts_user.py[WARNING]: Failed to run module scripts-user (scripts in /var/lib/cloud/instance/scripts)
2021-02-12 21:35:28,824 - util.py[WARNING]: Running module scripts-user (<module 'cloudinit.config.cc_scripts_user' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_scripts_user.py'>) failed
Cloud-init v. 20.4.1-0ubuntu1~20.04.1 finished at Fri, 12 Feb 2021 21:35:29 +0000. Datasource DataSourceEc2Local. Up 34.17 seconds
【问题讨论】:
-
您检查过
/var/log/cloud-init-output.log的用户数据错误吗? -
您能说明一下您的实际目标吗?您是否希望 Auto Scaling 组中的两个实例都具有弹性 IP 地址?如果您告诉我们您真正想要完成什么(以及WHY),我们或许可以提供其他选项。另外,我很困惑你说“新实例启动但它没有自动接收公共 IP”,但你也说“有时它有新的公共 IP”——那么它是否接收到公共 IP?也许您可以编辑您的问题以澄清细节?谢谢!
-
我配置为一次只运行一个实例,如果 cpu 达到指定百分比,那么它将启动第二个实例。接下来,经过一段时间后,只有一个实例继续运行,但具有相同的弹性 IP。
标签: amazon-web-services amazon-ec2