为Autoscaling组中的实例分配静态弹性IP

时间:2020-07-09 02:26:38

标签: amazon-web-services amazon-ec2 amazon-cloudformation amazon-vpc

我在ASG中有一个实例,我需要为该实例分配一个弹性ip。现在,当实例运行状况检查失败时,新启动的实例应具有相同的弹性IP。 IAM角色以及一切都以正确的顺序进行。

3 个答案:

答案 0 :(得分:0)

不确定如何从资源本身获取IP并将其作为用户数据传递到启动配置中。

在CFN中,它看起来类似于以下内容:

Resources:

    MyEIP:
        Type: AWS::EC2::EIP
        Properties: {}

    MyLaunchTemplate:
        Type: AWS::EC2::LaunchTemplate
        Properties:           
            UserData:
              Fn::Base64: !Sub |
                #!/bin/bash -xe

                EIP_IP=${MyEIP}

                echo ${!EIP_IP}

                # use aws cli to attach EIP_IP to the instance

实例角色以及附加EIP的权限也将是必需的。

docs!Ref,将在EIP_IP=${MyEIP}时使用:

当您将此资源的逻辑ID传递给内部Ref函数时, Ref返回弹性IP地址

答案 1 :(得分:0)

            INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
            MAXWAIT=3
            ALLOC_ID=${IPAddresses}
            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 --region ${AWS::Region})
            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 --region ${AWS::Region})
              fi
            done
            echo Running: aws ec2 associate-address --instance-id $INSTANCE_ID --allocation-id $ALLOC_ID --allow-reassociation --region ${AWS::Region}}
            aws ec2 associate-address --instance-id $INSTANCE_ID --allocation-id $ALLOC_ID --allow-reassociation --region ${AWS::Region}
            yum install  jq -y

答案 2 :(得分: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 密钥的权限关联地址

希望对你有帮助:)