我有一个运行在公共子网上的AWS Fargate容器。每次启动它都会自动分配一个新的公共IP。是否有办法在IP变得健康之前确定它将是什么?
原因:我只有一个容器,不需要负载均衡器,所以我想将DNS记录直接映射到容器的IP地址,而不是负载均衡器,以避免LB费用。一切都很好,但是我还想在容器启动时用[certbot][https://certbot.eff.org/]生成一个SSL证书。为了做到这一点,DNS记录必须指向新容器的IP。不过,我不确定这是否可能。
不幸的是,这不是直接可能的。
将域记录与容器关联的正常方式(而不是将域指向负载平衡器,然后通过它进行路由)是使用ECS服务发现。目前有以下限制:
为服务发现服务创建的DNS记录总是注册到任务的私有IP地址,而不是公共IP地址,即使使用了公共命名空间。
所以你不能让它创建一个指向服务中的容器的DNS记录。
一种选择是让其他东西监视ECS服务并自动更新容器的DNS记录,但这可能会涉及到一定程度的延迟,这意味着在DNS记录更新到指向新容器之前,您可能会在部署期间或任务退出期间经历短暂的中断。
一个例子是使用Lambda函数并连接起来响应任务启动事件,该事件将更新Route53记录以指向该容器的公共IP地址。
如果你使用AWS CDK,那么ECS服务扩展模块有AssignPublicIpExtension
扩展,它将自动创建和部署一个Lambda函数,该函数将监视这些任务启动和退出事件,并按预期更新Route53。