CodeDeploy 如何使用动态端口映射?

How does CodeDeploy work with dynamic port mapping?

几周以来,我一直在努力让 CodeDeploy / CodePipeline 为我们的解决方案工作。进行某种 CI/CD,并使部署更快、更安全……等

当我继续深入研究时,我觉得要么我做的方式根本不正确,要么它不适合我们的情况。

我们所有的 AWS 基础设施是什么 :

我们未来可能有什么 :

有什么问题:

现在,“手动”部署(即告诉服务在 ECS 上进行新部署)不起作用。 CodeDeploy卡在创建替换任务,查看服务日志,出现如下错误

service xxxx-xxxx was unable to place a task because no container instance met all of its requirements. The closest matching container-instance yyyy is already using a port required by your task.

这个我不是很懂,因为端口分配是随机的,但可能CodeDeploy在那之前运行,只知道分配的端口是0,和前面的任务定义一样?

我真的不知道如何解决这个问题,我什至怀疑 CodeDeploy 在我们的案例中是否可用...

-- 编辑 02/18/2021 --

所以,我知道为什么它现在不起作用了。就像我说的,我的主机监听反向代理的端口是随机的。但是我的 API 正在监听的端口仍然不是随机的

但是现在,即使我告诉 API 端口像反向代理一样是随机的,我的反向代理如何知道 API 可以在哪个端口上访问?我尝试 link 容器,但它似乎在配置文件中不起作用(我使用 nginx 作为反向代理)。

--

不指定 hostPort 似乎是在主机上分配一个“随机”端口

但是,由于 NGINX 和 API 是两个不同的容器,我需要我的第一个 NGINX 容器来调用我的第一个 API 容器,即 API:32798。我想我错过了什么

您可能会遇到此端口冲突,因为您在同一台主机上有两个任务想要将主机的端口 80 映射到它们的容器中。

我试图想象冲突:

紫色框共享一个端口名称空间,绿色和橙色框也是如此。这意味着在每个框中,您可以使用 1 - ~65k 的端口一次。当您明确需要一个主机端口时,它会尝试将紫色端口 80 映射到两个容器端口,这是行不通的。

您不想将这些容器端口显式映射到主机端口,让 ECS 操心。

只需在服务定义中指定 Load Balancer 集成中的容器端口,它就会为您进行映射。如果你设置容器端口为80,这里指的是绿色的80端口,橙色的80端口。它会暴露这些随机端口,并自动将这些随机端口注册到Load Balancer。

Service Definition docs(搜索 containerPort