有没有办法在 Fargate 容器变得健康之前确定它的 public IP?

Is there anyway to determine the public IP of a Fargate container before it becomes healthy?

我在 public 子网上有一个 AWS Fargate 容器 运行。每次启动时,它都会自动分配一个新的 public IP。有什么方法可以确定 IP 在它变得健康之前会是什么?

原因:我只有一个容器,不需要负载均衡器,所以我想直接将DNS记录映射到容器的IP地址而不是负载均衡器,以避免LB费用。一切都很好,但我还想在容器启动时使用 [certbot][https://certbot.eff.org/] 生成一个 SSL 证书。为此,DNS 记录必须指向新容器的 IP。不过,我不确定这是否可行。

不幸的是,这不可能直接实现。

将域记录与容器相关联(而不是将域指向负载均衡器然后通过它进行路由)的正常方法是使用 ECS service discovery。目前有以下限制:

The DNS records created for a service discovery service always register with the private IP address for the task, rather than the public IP address, even when public namespaces are used.

因此您将无法创建指向服务中容器的 DNS 记录。

一个选项是让其他东西监控 ECS 服务并自动更新容器的 DNS 记录,但可能会有一定程度的延迟,这意味着您可能会在部署期间遇到短暂的中断或任务在 DNS 记录更新为指向新容器之前退出。

一个示例是使用 Lambda 函数并连接以响应 task start event,这将更新 Route53 记录以指向该容器的 public IP 地址。

如果您使用的 AWS CDK then the ECS service extensions module has the AssignPublicIpExtension extension 将自动创建和部署 Lambda 函数,该函数将监视这些任务启动和退出事件并按预期更新 Route53。