我在ASG中有一个实例,我需要为该实例分配一个弹性ip。现在,当实例运行状况检查失败时,新启动的实例应具有相同的弹性IP。 IAM角色以及一切都以正确的顺序进行。
答案 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 密钥的权限关联地址
希望对你有帮助:)