Назначьте stati c elasti c IP экземпляру в Autoscaling Group - PullRequest
0 голосов
/ 09 июля 2020

У меня есть один экземпляр в ASG, мне нужно назначить elasti c ip этому экземпляру. Теперь, когда проверка работоспособности экземпляра завершается неудачно, только что запущенный экземпляр должен иметь тот же IP-адрес elasti c. Роль IAM и все в правильном порядке.

Ответы [ 2 ]

0 голосов
/ 10 июля 2020
            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
0 голосов
/ 09 июля 2020

Не уверен, как взять этот 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, который будет использоваться when EIP_IP=${MyEIP}:

Когда вы передаете логический идентификатор этого ресурса в функцию intrinsi c Ref, Ref возвращает Elasti c IP-адрес .

...