将 AWS/Route53 子域路由到 ec2 实例
Routing AWS/Route53 subdomain to ec2 instance
我在 AWS 的 Route53 上注册了一个域名,我想创建一个指向 EC2 实例的子域,该子域在重启机器后仍然存在 (经常发生).
以前的设置:
- EC2 实例 linked 到静态弹性 IP(例如
1.1.1.1
)
subdomain.example.com
是指向 1.1.1.1
的 A
记录
- 问题: 运行 个弹性 IP 地址(每个区域有 10 个 ips 的限制)。
当前设置:
- EC2 实例具有自动生成的 Public IP 和 Public DNS(例如
2.2.2.2
和 ec2-2-2-2-2.eu-west-1.compute.amazonaws.com
)
subdomain.example.com
是指向 ec2-2-2-2-2.eu-west-1.compute.amazonaws.com
的 CNAME
记录
- 问题:重启机器后,生成新的IP/DNS地址,路由中断!
也尝试过:
- 正在创建一个 Autoscaling 组 并将实例添加到其中。
- 正在为自动缩放组创建负载均衡器。
- 将
subdomain.example.com
作为 CNAME
别名 路由到负载均衡器
- 问题:复杂且难以维护。
所需设置
- 一种 简单 方法 link 直接将子域连接到实例,而无需耗尽 EIP 或创建负载平衡器。
AWS 唯一支持的方法是使用弹性 IP 地址。每个区域为您分配了 5 个 EIP 地址,但这是一个软限制。你可以要求更多。 EIP 地址在附加到 运行ning EC2 实例时是免费的。
[编辑]
另一种可行的方法是在 EC2 实例启动时更改子域的 Route53 资源记录以指向新的 IP 地址。这可以通过脚本(Python 等)或通过 CLI 来完成。
这是我在进行维护时用于更改 RRS 以进行故障转移的示例。
CLI 命令行:
aws --profile PROD route53 change-resource-record-sets --hosted-zone-id Z13KCDXXXXXXXX --change-batch file://update_mydomain.json
内容update_mydomain.json
{
"Comment": "Update record to reflect new IP address of www.mydomain.com",
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "www.mydomain.com.",
"Type": "A",
"TTL": 300,
"ResourceRecords": [
{
"Value": "NEW_IP_ADDRESS"
}
]
}
}
]
}
修改域名和 IP 地址,然后 运行 CLI 命令(我将其放入批处理脚本中)。您还需要用于 CLI 命令的 Route53 记录的托管区域 ID。
1) Create Elastic BeanStalk Application with Single Instance Environment
2) Point CNAME to url of Elastic BeanStalk.
由于 EBs 环境仅为单实例,因此您不需要负载均衡器的 Auto Scaling 组。由于系统重启,EB url 也应该不会生效。
创建一个 Elastic Load Balancing(ELB) 并将您的实例添加到 it.After 将您的实例添加到 ELB,您不再需要弹性 IP 地址(静态 IP 地址)。
不需要创建任何规模的up/down组(您可以自己添加manually/Also如果需要,您可以创建一个)。每次您的实例重新启动并获取新的IP地址时,您的负载balancer 将自动对您的 EC2 实例执行健康检查,并且仅将流量路由到通过健康检查的实例。
最后,将您的 DNS 更改为您的 ELB。
我在 AWS 的 Route53 上注册了一个域名,我想创建一个指向 EC2 实例的子域,该子域在重启机器后仍然存在 (经常发生).
以前的设置:
- EC2 实例 linked 到静态弹性 IP(例如
1.1.1.1
) subdomain.example.com
是指向1.1.1.1
的 - 问题: 运行 个弹性 IP 地址(每个区域有 10 个 ips 的限制)。
A
记录
当前设置:
- EC2 实例具有自动生成的 Public IP 和 Public DNS(例如
2.2.2.2
和ec2-2-2-2-2.eu-west-1.compute.amazonaws.com
) subdomain.example.com
是指向ec2-2-2-2-2.eu-west-1.compute.amazonaws.com
的 - 问题:重启机器后,生成新的IP/DNS地址,路由中断!
CNAME
记录
也尝试过:
- 正在创建一个 Autoscaling 组 并将实例添加到其中。
- 正在为自动缩放组创建负载均衡器。
- 将
subdomain.example.com
作为CNAME
别名 路由到负载均衡器
- 问题:复杂且难以维护。
所需设置
- 一种 简单 方法 link 直接将子域连接到实例,而无需耗尽 EIP 或创建负载平衡器。
AWS 唯一支持的方法是使用弹性 IP 地址。每个区域为您分配了 5 个 EIP 地址,但这是一个软限制。你可以要求更多。 EIP 地址在附加到 运行ning EC2 实例时是免费的。
[编辑]
另一种可行的方法是在 EC2 实例启动时更改子域的 Route53 资源记录以指向新的 IP 地址。这可以通过脚本(Python 等)或通过 CLI 来完成。
这是我在进行维护时用于更改 RRS 以进行故障转移的示例。
CLI 命令行:
aws --profile PROD route53 change-resource-record-sets --hosted-zone-id Z13KCDXXXXXXXX --change-batch file://update_mydomain.json
内容update_mydomain.json
{
"Comment": "Update record to reflect new IP address of www.mydomain.com",
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "www.mydomain.com.",
"Type": "A",
"TTL": 300,
"ResourceRecords": [
{
"Value": "NEW_IP_ADDRESS"
}
]
}
}
]
}
修改域名和 IP 地址,然后 运行 CLI 命令(我将其放入批处理脚本中)。您还需要用于 CLI 命令的 Route53 记录的托管区域 ID。
1) Create Elastic BeanStalk Application with Single Instance Environment
2) Point CNAME to url of Elastic BeanStalk.
由于 EBs 环境仅为单实例,因此您不需要负载均衡器的 Auto Scaling 组。由于系统重启,EB url 也应该不会生效。
创建一个 Elastic Load Balancing(ELB) 并将您的实例添加到 it.After 将您的实例添加到 ELB,您不再需要弹性 IP 地址(静态 IP 地址)。
不需要创建任何规模的up/down组(您可以自己添加manually/Also如果需要,您可以创建一个)。每次您的实例重新启动并获取新的IP地址时,您的负载balancer 将自动对您的 EC2 实例执行健康检查,并且仅将流量路由到通过健康检查的实例。
最后,将您的 DNS 更改为您的 ELB。