【问题标题】:How to connect two tasks in fargate如何在fargate中连接两个任务
【发布时间】:2021-05-08 15:34:08
【问题描述】:

我有两个来自两个不同任务定义的任务。现在,相同任务中的容器可以通过 localhost 相互访问。

但是,我如何让两个不同任务中的容器相互通信。

我主要尝试构建一个管道,其中每个任务定义(作为任务)一个接一个地运行。 一项任务依赖于另一项任务。

【问题讨论】:

  • 这些容器并发运行,然后需要在运行的同时相互通信?
  • 不,我正在尝试构建一个 CI/CD 管道,为管道的每个阶段提供任务。例如 - 构建、测试和部署由三个不同的任务负责。这三个任务将一个接一个地运行,并且不是并发的。我不确定这是否可能,或者将所有阶段都放在一个任务下(不同阶段的不同容器)会是一个更好的选择。
  • 在这种情况下,克里斯已经为您提供了正确答案:-)
  • 是的,我同意 :)

标签: amazon-web-services amazon-ecs aws-fargate


【解决方案1】:

与其使用它们进行通信,不如使用可以控制流程的编排层。

Step functions 是一个 AWS 解决方案,它支持 ECS 和 Fargate,因此将在需要时负责启动任务。

而不是每个步骤直接相互通信的任务可以provide output, and take in input

通过使用这种方法,容器彼此隔离,但仍保持按顺序执行的能力。它还将提供对正在发生的事情的可见性,并支持等待、循环和成功/失败案例。

【讨论】:

    【解决方案2】:

    在 Fargate 中,当多个容器作为单个任务的一部分启动时,它们还可以通过本地环回接口相互通信。 Fargate 使用称为 awsvpc 的特殊容器网络模式,它为任务中的所有容器提供共享的弹性网络接口以用于通信。

    如果您为任务中的每个容器指定端口映射,则容器可以在该端口上相互通信。例如,以下任务定义可用于部署 Web 层和 API 层:

    JSON

      "family": "myapp"
      "containerDefinitions": [
        {
          "name": "web",
          "image": "my web image url",
          "portMappings": [
            {
              "containerPort": 80
            }
          ],
          "memory": 500,
          "cpu": 10,
          "esssential": true
        },
        {
          "name": "api",
          "image": "my api image url",
          "portMappings": [
            {
              "containerPort": 8080
            }
          ],
          "cpu": 10,
          "memory": 500,
          "essential": true
        }
      ]
    }
    

    ECS 与 Fargate 能够采用此定义并启动两个容器,每个容器都绑定到任务的弹性网络接口上的特定静态端口。

    由于每个 Fargate 任务都有自己的隔离网络堆栈,因此无需像其他网络模式那样使用动态端口来避免不同任务之间的端口冲突。静态端口使容器之间的通信变得容易。

    例如,Web 容器使用其众所周知的 API 容器向 API 容器发出请求 静态端口:

     curl 127.0.0.1:8080/my-endpoint
     Bash
    

    这会发送一个本地网络请求,该请求通过本地环回接口直接从一个容器发送到另一个容器,而无需遍历网络。这种部署策略允许在两个紧密耦合的容器之间进行快速高效的通信。

    【讨论】:

    • 但是,是否有可能从同一任务定义启动的每个新任务都有稍微不同的工作要做,并且主服务器希望与主任务定义的特定实例进行通信。可能有 2-10 个不同的任务,每个任务运行相同的代码,但根据输入参数执行的工作略有不同。然后主服务器想要与特定任务进行通信并查看其进度。理想情况下,您应该能够通过私有 IP 地址做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2020-04-25
    • 2022-11-03
    • 2021-11-29
    • 2020-02-05
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多