如何使用 Docker 图像通过 AWS 托管 SSL Rest API?

How can I host an SSL Rest API through AWS using a Docker image?

我对 AWS 中的服务数量有点迷茫,我很难找到我认为可能是一个非常简单的问题的答案。

我有一个 Docker 图像在端口 80 上通过 HTTP 提供 RestAPI 服务。我目前使用 ECS 在 AWS 上托管它。它使用的是 Faregate,但如果需要,我可以制作一个 EC2 集群。

问题是: 1) 目前,每当我 运行 我的任务时,我都会获得一个新的 IP 地址,我想要一个一致的地址来访问它。不需要是静态 IP,它可以从 DNS 路由。 2) 它没有使用我的主机名,我希望 api.myhostname.com 转到 Docker 图像,而 www.myhostname.com 目前已经转到我的 Cloudfront CDN 服务于 Web 应用程序。 3) 没有 SSL,我需要对其进行加密。

我应该使用哪些服务来实现这一目标?我查看了 API 网关,但没有找到将 ECS 任务用作后端的方法。我查看了 ECS 的 ELB,但负载平衡器似乎没有提供从 Docker 图像中生成静态 IP 的方法。

谢谢。

我会根据你们的每个要求推荐一项服务:

  1. 您想 运行 一个 Docker 容器:使用 FARGATE 的 ECS 是正确的解决方案
  2. 您想要一个一致的地址:使用集成到 ECS 中的服务负载平衡。 [1] 如果在您的场景中 运行 负载均衡器的价格太高,您还可以使用服务发现实现一致的寻址。 [2]
  3. 您需要 SSL:AWS Elastic Load Balancing 与 AWS Certificate Manager (ACM) 集成,允许您创建 HTTPS 侦听器。 [3]
  4. 您想使用您的主机名:使用 AWS Route53 和应用程序负载均衡器。负载均衡器自动接收 aws 的主机名,然后您可以将自定义 dns 指向该条目。 [4]

所以我的建议是:

  • 创建一个 ECS 服务,将您的 docker 容器作为 FARGATE 任务启动。
  • 在 AWS Certificate Manager 中为您的 HTTPS 侦听器创建证书。 ACM 管理您的证书并在它们即将到期时向您发送电子邮件。 [5]
  • 将服务负载平衡与应用程序负载平衡器结合使用,自动将任何新创建的 ECS 任务注册到目标组。配置负载均衡器以侦听 HTTPS 侦听器上的传入流量,并将其路由到将您的 ECS 任务注册为目标的目标组。

参考资料

[1] https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html
[2] https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-discovery.html
[3] https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-create-https-ssl-load-balancer.html
[4] https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/using-domain-names-with-elb.html
[5] https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html