如何连接到 Fargate 上运行的 ECS 服务?

Cyr*_*ris 6 amazon-ecs slack-api aws-api-gateway aws-fargate

我正在构建一个 slack 应用程序,我的应用程序预计会接收来自 slack 的 webhook 调用。所以我需要向 Slack 提供“我的服务的端点 URL”

我不确定我是否理解需要将哪些 AWS 模块组合在一起才能完成这项工作。到目前为止,我已经使用 Fargate 配置了我的服务,它正在 ECS 上运行,有 1 个任务。

我不太确定如何成功地将互联网(松弛)连接到我的容器实例。如何创建一个 slack 可以向其发送请求的“端点”?我相信我需要为此使用 API Gateway,但我不确定应该如何配置 API Gateway,以便它将我的 URL 重定向到我的 ECS 服务...?

注意事项:

  • 我现在不打算执行多个任务,因此如果我不必设置负载均衡器,会更方便
  • 不过,我计划对服务本身进行一些定期更新,并且任务将经常重新启动

Cyr*_*ris 6

我不确定是否有替代方案,但是在 Fargate 上设置服务时,为了接收流量,您将需要

  • 拥有负载均衡器(ALB 或 NLB 都可以)
  • 如果是 ALB,则必须创建针对“IP”的目标组
  • 只有在创建服务期间,您才能选择将容器放在目标组或 ALB 后面

例如,要分配来自目标组的流量,您可以使用它来配置服务

"loadBalancers": [
        {
            "containerName": "your-container-name-app",
            "containerPort": 80,
            "targetGroupArn": "arn:aws:elasticloadbalancing:eu-central-1:account-id:targetgroup/targetgroup-name/RANDOM-ID"
        }
    ],
Run Code Online (Sandbox Code Playgroud)

像这样创建目标组

aws elbv2 create-target-group \
--name targetgroup-name \
--protocol HTTP \
--port 80 \
--vpc-id vpc-YOUR_VPC_ID \
--health-check-protocol HTTP \
--health-check-path /healthcheck \
--target-type ip
Run Code Online (Sandbox Code Playgroud)

因此,您基本上将使用负载均衡器 DNS 将流量路由到您的实例。使用 ALB,您可以轻松拦截某个路径(例如/slack/*)以路由到您的特定目标组,因此同一个 ALB 可以用于多个不同的服务。

但你需要一个负载均衡器,并且不能根据我的理解直接定位 Fargate 容器。