寻找使用 Amazon EC2 和 Amazon Route 53 组合来管理外部可寻址主机的“最佳实践”答案,没有为每个主机使用弹性 IP。在我的场景中,我将有 30 多个主机需要从 EC2 外部访问,因此直接使用内部 DNS 是行不通的。
过去,我通过为主机分配弹性 IP(例如 55.55.55.55)然后创建关联的 A 记录来寻址主机。例如,假设我想创建“ec2-corp01.mydomain.com”,我可能会这样做:
ec2-corp01.mydomain.com. A 55.55.55.55 300
然后在该 EC2 实例上,我将分配 55.55.55.55 的弹性 IP,一切正常。当然,要实现这一点,我需要每个实例都有一个弹性 IP,如果可能的话,我希望避免这种情况;我希望基础设施更加动态。
所以我的想法是尝试类似的事情:
创建一个脚本,查询内部 EC2 工具来确定实例的私有主机名
在实例启动时,调用该脚本来确定其主机名,然后使用命令行 Route 53 界面查找该主机名并将其更新为其当前内部主机名
由于主机的 TTL 相对较低(比如上面的 300,即 5 分钟),它应该很快就会生效
这是个好主意吗?有没有更好或更广泛接受的方法来处理这个问题?
如果这是个好主意,我应该创建什么类型的记录?指向内部主机的 CNAME,如 ec2-55-55-55-55.compute-1.amazonaws.com?A 记录是好还是坏?
谢谢!
答案1
自动化。只需让创建新实例的脚本的一部分通过其实例 ID 查找公共 IP(或公共名称)(您在调用时获取实例 ID ec2-run-instances
;只需继续调用ec2-describe-instances <instanceID>
直到在正确的字段中获得条目),然后修改您的 DNS(可以是 Route53,但不一定是)以包含您获得的数据的 CNAME 或 A 记录。
可能有一些 Route53 魔法可以达到这个效果,就像 ELB 一样,但我还没有遇到过。
答案2
对于 A 记录,您确实需要为每个实例分配一个 Elastic IP。在这种情况下,我会按照所述的方式做;使用 AWS API for Route 53 为每个实例分配一个 CNAME。如果这也是为了负载平衡之类的目的,我建议使用 AWS Elastic Load Balancing 服务,它将自动完成很多工作(请进一步研究它,看看它是否符合您的要求,因为它需要额外付费)。