Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 自动缩放带来新实例时自动更新路由53_Amazon Web Services_Amazon Ec2_Aws Lambda_Amazon Route53_Autoscaling - Fatal编程技术网

Amazon web services 自动缩放带来新实例时自动更新路由53

Amazon web services 自动缩放带来新实例时自动更新路由53,amazon-web-services,amazon-ec2,aws-lambda,amazon-route53,autoscaling,Amazon Web Services,Amazon Ec2,Aws Lambda,Amazon Route53,Autoscaling,我在我的环境中使用Amazon EC2自动伸缩,每当自动伸缩触发一个新实例时,我需要在Route 53中手动更改IP。我想自动化这个过程 尝试使用Route 53,但未看到任何更新。启动实例时,可以使用此用户数据脚本更新Route 53记录 它从实例元数据收集所需的信息 #! INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) PRIVATE_IP=$(curl http://169.254.169.25

我在我的环境中使用Amazon EC2自动伸缩,每当自动伸缩触发一个新实例时,我需要在Route 53中手动更改IP。我想自动化这个过程


尝试使用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”标记应用于ASG提供的每个实例,即role=webserver
  • 在userdata脚本中,列出标记role=webserver的所有实例
  • 检查标记“node”的返回实例
  • 如果没有,则此实例为node1->hostname webserver-node1。${DOMAIN\u NAME}
  • 如果有,则解析标记“node”以检查哪个实例被ASG替换。也就是说,在结果中可以有node=node1、node=node3、node=node4。node2缺失,因此此实例为node2->hostname webserver-node2。${DOMAIN\u NAME}
  • 在userdata的末尾,您必须向这个实例添加“node”标记,这样下一个就不会被命名为existing
  • #/bin/bash
    实例_ID=$(curlhttp://169.254.169.254/latest/meta-data/instance-id)
    私有_IP=$(卷曲)http://169.254.169.254/latest/meta-data/local-ipv4)
    域名=$(aws route53 get hosted zone--id”“--查询'HostedZone.NAME'--输出文本| sed's/$/'))
    hostnamectl设置主机名。${DOMAIN_NAME}
    CN=`echo$PRIVATE|IP | cut-d-F3`
    echo$CN
    a=5
    如果[$CN==$a]
    然后
    aws route53更改资源记录集--托管区域id”“--更改批处理{“更改”:[{“操作”:“UPSERT”,“资源记录集”:{“名称”:“Dns名称”,“类型”:“A”,“TTL”:60,“资源记录”:[{“值”:“${PRIVATE_IP}”}”
    其他的
    aws route53更改资源记录集--托管区域id”“--更改批处理{“更改”:[{“操作”:“UPSERT”,“资源记录集”:{“名称”:“”,“类型”:“A”,“TTL”:60,“资源记录”:[{“值”:“${PRIVATE_IP}”}”
    fi
    
    Hi Tomasz,谢谢你的回复。我正在使用autoscaling group如何将其用于正在旋转的新实例。此脚本在这种情况下有用吗?@John此脚本很有用,但在我的情况下,我有两台服务器连接到我在diff availability zone 2a和2b中的自动缩放组。如果我将其作为用户数据添加到ASG中。。我只能给出一个主机名。您必须实现主机命名脚本。您的自动缩放组中有多少个实例?如果自动缩放仅提供一个实例,则更新IP地址是有意义的,但是如果您使用多个实例,请告诉我们您将如何管理IP地址。谢谢各位,我已经发布了最终解决方案。您能解释CN=部分吗?