amazon-web-services - 无论如何在 Fargate 容器变得健康之前确定它的公共 IP 吗?
问题描述
我有一个在公共子网上运行的 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 服务扩展模块具有将自动创建和部署 Lambda 函数的AssignPublicIpExtension
扩展,该函数将监视这些任务启动和退出事件并按预期更新 Route53。
推荐阅读
- vba - 粘贴空白图片(位图)仅适用于 1 张幻灯片,使用 VBA 将数据从 Excel 粘贴到电源点时仍按预期工作
- java - 运行时 JsonString 到 JavaObject
- visual-studio - 如何使用 ReSharper 找到所有未使用的 using 语句?
- sql-server - Visual Studio Code SQL Server 连接到使用 Azure Key Vault 的加密数据库(始终加密)
- css - material-ui-next:设置图像大小以适合容器
- python - 使用 Python 将图像填充到一个大小
- wpf - 在 WPF 中绑定 ListBox SelectedItem
- ruby-on-rails - 如何在更改数据库时修复 Sequel::DatabaseConnectionError
- python - 我无法使用 django 部署到 heroku
- java - 将 Java 类包装到 Python 中的最佳方法