将AWS/Route53子域路由到EC2实例

5
我在AWS的Route53注册了一个域名,想要创建一个子域名并将其指向EC2实例,使其能够在机器重新启动后保持持久性(这经常发生)。
以前的设置: - EC2实例链接到静态弹性IP(例如1.1.1.1)。 - subdomain.example.com是指向1.1.1.1的A记录。 - 问题:弹性IP地址用尽(每个区域限制10个IP地址)。
当前设置: - EC2实例具有自动生成的公共IP和公共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地址,路由被破坏!
还尝试过: - 创建一个自动扩展组,并将实例添加到其中。 - 为自动扩展组创建负载均衡器。 - 将subdomain.example.com路由到负载均衡器作为CNAME ALIAS。 - 问题:复杂且难以维护。
期望设置: - 一种简单的方式,直接将子域名链接到实例,而不会耗尽EIP或创建负载均衡器。

1
你更喜欢解决方案简单易于设置还是简单易于维护?(在我看来,仅创建负载均衡器即可,但这会增加成本/无需自动缩放组/) - Dusan Bajic
我认为负载均衡器应该是一个很好的折中方案,因为正如你和@reza-mousavi所提到的,它既容易设置又不需要维护。 - mjalajel
3个回答

3
创建一个弹性负载均衡(ELB),并将您的实例添加到其中。在将实例添加到 ELB 后,您不再需要弹性 IP 地址(静态 IP 地址)。
不需要创建任何扩容/缩容组(您可以手动添加/如果需要也可以创建一个)。每次您的实例重新启动并获取新的 IP 地址时,您的负载均衡器将自动对您的 EC2 实例执行健康检查,并仅路由流量到通过健康检查的实例。
最后,将您的 DNS 更改为您的 ELB。
了解更多信息,请阅读 https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html?icmpid=docs_elbv2_console

1

唯一受AWS支持的方法是使用弹性IP地址。每个地区分配了5个EIP地址,但这只是一个软限制。您可以请求更多。当附加到正在运行的EC2实例上时,EIP地址是免费的。

AWS服务限制增加

[编辑]

另一种可行的方法是在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

更新我的域名.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。

如果我们需要运行许多这些盒子而不需要为每个盒子设置负载均衡器,我认为这将起作用。 - mjalajel

-1
1) Create Elastic BeanStalk Application with Single Instance Environment
2) Point CNAME to url of Elastic BeanStalk.

由于EB环境仅为单实例,因此您不需要自动扩展组或负载均衡器。EB的URL也不会受到系统重启的影响。

enter image description here


根据AWS文档:在单实例环境中,elasticbeanstalk.com子域名解析为附加到运行您的应用程序的实例的弹性IP地址。http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customdomains.html - John Hanley
另外,您无法随意启动和停止 EB 实例。在 EB 中停止意味着终止。 - John Hanley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接