当 Auto Scaling 启动新实例时自动更新 Route 53
Updating Route 53 automatically when Auto Scaling brings up new instance
我在我的环境中使用 Amazon EC2 Auto Scaling,每当 Auto Scaling 触发新实例时,我需要在 Route 53 中手动更改 IP。我想自动执行此过程。
尝试使用 Lifecycle Hooks 但没有看到 Route 53 的任何更新。
您可以使用此用户数据脚本在实例启动时更新 Route 53 记录。
它从实例元数据中收集所需信息。
#!
INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
PRIVATE_IP=$(curl http://169.254.169.254/latest/meta-data/local-ipv4)
DOMAIN_NAME=$(aws route53 get-hosted-zone --id "${HOSTED_ZONE_ID}" --query 'HostedZone.Name' --output text | sed 's/.$//')
hostnamectl set-hostname hostname."${DOMAIN_NAME}"
aws route53 change-resource-record-sets --hosted-zone-id "${HOSTED_ZONE_ID}" --change-batch '{"Changes": [{"Action": "UPSERT","ResourceRecordSet": {"Name": "'"$(hostname)"'","Type": "A","TTL": 60,"ResourceRecords": [{"Value": "'"${PRIVATE_IP}"'"}]}}]}'
您需要为 ${HOSTED_ZONE_ID}
插入一个值来标识要更新的记录。
编辑:
如果您有多个由 ASG 提供的实例,您可以开发一个脚本来命名新主机。
即:
- 使用 ASG 将 "role" TAG 应用到 ASG 提供的每个实例,即 role=webserver
- 在用户数据脚本中列出所有带有 TAG role=webserver
的实例
- 检查 TAG 的返回实例 "node"
- 如果none,那么这个实例就是node1 -> hostname webserver-node1.${DOMAIN_NAME}
- 如果有,解析 TAG "node" 以检查哪个实例被 ASG 替换。即结果你可以有 node=node1, node=node3, node=node4。 node2 丢失,所以这个实例是 node2 -> hostname webserver-node2.${DOMAIN_NAME}
- 在用户数据的末尾,您必须向此实例添加 "node" TAG,因此下一个不会命名为现有实例。
# !/bin/bash
INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
PRIVATE_IP=$(curl http://169.254.169.254/latest/meta-data/local-ipv4)
DOMAIN_NAME=$(aws route53 get-hosted-zone --id "<Hosted Zone ID >" --query 'HostedZone.Name' --output text | sed 's/.$//')
hostnamectl set-hostname hostname."${DOMAIN_NAME}"
CN=`echo $PRIVATE_IP | cut -d . -f 3`
echo $CN
a=5
if [ $CN == $a ]
then
aws route53 change-resource-record-sets --hosted-zone-id "<Hosted Zone ID >" --change-batch '{"Changes": [{"Action": "UPSERT","ResourceRecordSet": {"Name": "'"Dns Name"'","Type": "A","TTL": 60,"ResourceRecords": [{"Value": "'"${PRIVATE_IP}"'"}]}}]}'
else
aws route53 change-resource-record-sets --hosted-zone-id "<Hosted Zone ID >" --change-batch '{"Changes": [{"Action": "UPSERT","ResourceRecordSet": {"Name": "'"< Dns Name>"'","Type": "A","TTL": 60,"ResourceRecords": [{"Value": "'"${PRIVATE_IP}"'"}]}}]}'
fi
我在我的环境中使用 Amazon EC2 Auto Scaling,每当 Auto Scaling 触发新实例时,我需要在 Route 53 中手动更改 IP。我想自动执行此过程。
尝试使用 Lifecycle Hooks 但没有看到 Route 53 的任何更新。
您可以使用此用户数据脚本在实例启动时更新 Route 53 记录。
它从实例元数据中收集所需信息。
#!
INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
PRIVATE_IP=$(curl http://169.254.169.254/latest/meta-data/local-ipv4)
DOMAIN_NAME=$(aws route53 get-hosted-zone --id "${HOSTED_ZONE_ID}" --query 'HostedZone.Name' --output text | sed 's/.$//')
hostnamectl set-hostname hostname."${DOMAIN_NAME}"
aws route53 change-resource-record-sets --hosted-zone-id "${HOSTED_ZONE_ID}" --change-batch '{"Changes": [{"Action": "UPSERT","ResourceRecordSet": {"Name": "'"$(hostname)"'","Type": "A","TTL": 60,"ResourceRecords": [{"Value": "'"${PRIVATE_IP}"'"}]}}]}'
您需要为 ${HOSTED_ZONE_ID}
插入一个值来标识要更新的记录。
编辑:
如果您有多个由 ASG 提供的实例,您可以开发一个脚本来命名新主机。 即:
- 使用 ASG 将 "role" TAG 应用到 ASG 提供的每个实例,即 role=webserver
- 在用户数据脚本中列出所有带有 TAG role=webserver 的实例
- 检查 TAG 的返回实例 "node"
- 如果none,那么这个实例就是node1 -> hostname webserver-node1.${DOMAIN_NAME}
- 如果有,解析 TAG "node" 以检查哪个实例被 ASG 替换。即结果你可以有 node=node1, node=node3, node=node4。 node2 丢失,所以这个实例是 node2 -> hostname webserver-node2.${DOMAIN_NAME}
- 在用户数据的末尾,您必须向此实例添加 "node" TAG,因此下一个不会命名为现有实例。
# !/bin/bash
INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
PRIVATE_IP=$(curl http://169.254.169.254/latest/meta-data/local-ipv4)
DOMAIN_NAME=$(aws route53 get-hosted-zone --id "<Hosted Zone ID >" --query 'HostedZone.Name' --output text | sed 's/.$//')
hostnamectl set-hostname hostname."${DOMAIN_NAME}"
CN=`echo $PRIVATE_IP | cut -d . -f 3`
echo $CN
a=5
if [ $CN == $a ]
then
aws route53 change-resource-record-sets --hosted-zone-id "<Hosted Zone ID >" --change-batch '{"Changes": [{"Action": "UPSERT","ResourceRecordSet": {"Name": "'"Dns Name"'","Type": "A","TTL": 60,"ResourceRecords": [{"Value": "'"${PRIVATE_IP}"'"}]}}]}'
else
aws route53 change-resource-record-sets --hosted-zone-id "<Hosted Zone ID >" --change-batch '{"Changes": [{"Action": "UPSERT","ResourceRecordSet": {"Name": "'"< Dns Name>"'","Type": "A","TTL": 60,"ResourceRecords": [{"Value": "'"${PRIVATE_IP}"'"}]}}]}'
fi