【问题标题】:Can't Re-allocate Elastic IP to EC2 Scaling Group无法将弹性 IP 重新分配给 EC2 扩展组
【发布时间】:2021-02-13 06:16:57
【问题描述】:

我尝试了几种方法来重新分配弹性 iP,但没有运气:

我将 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


【解决方案1】:

我发现了这个问题。 该实例缺少 awscli 工具。 一旦我安装了它,脚本就可以工作了! 感谢编写此脚本的人。

【讨论】:

    猜你喜欢
    • 2013-08-25
    • 1970-01-01
    • 2021-09-03
    • 2019-07-11
    • 2018-03-06
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多