Aws lambda Traefik可动态路由到ECS后端,作为一次性任务运行

Aws lambda Traefik可动态路由到ECS后端,作为一次性任务运行,aws-lambda,aws-api-gateway,amazon-ecs,traefik,aws-lambda-edge,Aws Lambda,Aws Api Gateway,Amazon Ecs,Traefik,Aws Lambda Edge,我正在尝试使用Traefik v1(1.7)和ECS一次性任务作为后端实现反向代理服务解决方案,如图所示。路由应采用动态方式-对/user/1234/*路径的请求应转到ECS任务,并使用适当的docker标签运行: docker_labels = { traefik.frontend.rule = "Path:/user/1234" traefik.backend = "trax1" traefik.enable = "true" }

我正在尝试使用Traefik v1(1.7)和ECS一次性任务作为后端实现反向代理服务解决方案,如图所示。路由应采用动态方式-对
/user/1234/*
路径的请求应转到ECS任务,并使用适当的docker标签运行:

  docker_labels = {
    traefik.frontend.rule = "Path:/user/1234"
    traefik.backend       = "trax1"
    traefik.enable        = "true"
  }
到目前为止,此设置工作正常,但我需要为每个正在运行的任务创建一个ECS任务定义,因为docker标签是ECS任务定义的属性,而不是ECS任务本身。在任务键/值属性中,是否可以在ECS任务标记中仅创建一个TaskDefinition并传递Traefik规则

这将需要对Traefik源代码进行一些修改,是否有任何其他可用的选项或方法可以实现这一点,我错过了,比如API网关或Lambda@Edge? 我没有这些技术的经验,现实世界的例子更受欢迎。

使用Traefik provider解决。运行一次性任务的外部组件可以成对地发现任务内部IP并动态更新Traefik配置
Traefik.frontend.rule=“Path:/user/1234”
backends
部分中的任务内部
IP:port

它应该首先从
/api/providers/rest
端点
获取
Traefik配置,删除或添加相应的部分(如果任务已停止或启动),并通过
方法更新Traefik配置到同一端点

{
  "backends": {
    "backend-serv1": {
      "servers": {
        "server-service-serv-test1-serv-test-4ca02d28c79b": {
          "url": "http://172.16.0.5:32793"
        }
      }
    },
    "backend-serv2": {
      "servers": {
        "server-service-serv-test2-serv-test-279c0ba1959b": {
          "url": "http://172.16.0.5:32792"
        }
      }
    }
  },
  "frontends": {
    "frontend-serv1": {
      "entryPoints": [
        "http"
      ],
      "backend": "backend-serv1",
      "routes": {
        "route-frontend-serv1": {
          "rule": "Path:/user/1234"
        }
      }
    },
    "frontend-serv2": {
      "entryPoints": [
        "http"
      ],
      "backend": "backend-serv2",
      "routes": {
        "route-frontend-serv2": {
          "rule": "Path:/user/5678"
        }
      }
    }
  }
}
通过使用Traefik提供程序解决。运行一次性任务的外部组件可以成对地发现任务内部IP并动态更新Traefik配置
Traefik.frontend.rule=“Path:/user/1234”
backends
部分中的任务内部
IP:port

它应该首先从
/api/providers/rest
端点
获取
Traefik配置,删除或添加相应的部分(如果任务已停止或启动),并通过
方法更新Traefik配置到同一端点

{
  "backends": {
    "backend-serv1": {
      "servers": {
        "server-service-serv-test1-serv-test-4ca02d28c79b": {
          "url": "http://172.16.0.5:32793"
        }
      }
    },
    "backend-serv2": {
      "servers": {
        "server-service-serv-test2-serv-test-279c0ba1959b": {
          "url": "http://172.16.0.5:32792"
        }
      }
    }
  },
  "frontends": {
    "frontend-serv1": {
      "entryPoints": [
        "http"
      ],
      "backend": "backend-serv1",
      "routes": {
        "route-frontend-serv1": {
          "rule": "Path:/user/1234"
        }
      }
    },
    "frontend-serv2": {
      "entryPoints": [
        "http"
      ],
      "backend": "backend-serv2",
      "routes": {
        "route-frontend-serv2": {
          "rule": "Path:/user/5678"
        }
      }
    }
  }
}