【问题标题】:AWS API Gateway + Elastic Beanstalk and MicroservicesAWS API 网关 + Elastic Beanstalk 和微服务
【发布时间】:2019-02-26 19:05:57
【问题描述】:

我要在 AWS 上构建微服务架构,我想请你澄清我的疑惑。

我目前的一般概念

我想使用 API Gateway,它公开了在 Elastic Beanstalk 中运行的微服务 API。我想将 Elastic Beanstalk 放置在 VPC 中,而无需从 Internet 直接访问其实例。

问题和疑问:

  1. Elastic Beanstalk 在应用程序创建时获取子域。这个子域应该由 API Gateway 使用,集成类型:AWS 服务,在操作配置中 - 我说的对吗?
  2. 单个微服务代表什么? Elastic Beanstalk 的应用程序是特定的可扩展微服务吗?
  3. 微服务应该如何相互通信?我将在某些任务中使用 SQS(简单队列服务)。但在其他情况下,两个微服务通过 API 网关而不是直接进行通信会更好吗?对吗?
  4. 测试环境:我应该在测试环境(或暂存环境)中使用什么结构?我考虑使用另一个 Elastic Beanstalk 和其他 Amazon 服务创建单独的 VPC。
  5. 测试环境和API网关:我应该如何设置API网关?如果请求具有特定的子域,它应该允许客户端访问测试环境中的微服务,例如:test.mydomain.com/hello_world/say_hello。我不确定如何在 CI/CD 中使用 API Gateway 使其快速简单,无需手动将一些配置从测试阶段复制到生产阶段。 (我不期待任何复杂的解决方案,只是一些关于我可以使用哪些组件、部件、概念的提示。更多细节我会自己找到)。
  6. 您有使用 Codep Deploy 和/或 Jenkins 将应用程序部署到 Elastic Beanstalk 的经验吗?我很感兴趣哪种方式会更好:Jenkins、AWS Code Deploy 或 Jenkins+CodeDeploy。

【问题讨论】:

  • 一般来说,当人们提到微服务时,他们指的是 AWS Lambda 或 Azure Functions。对于 Lambda,可以直接从 API 网关外部调用函数,然后执行 SQS 任务或直接启动其他 lambda 函数。此外,除非您将 VPC 连接到一些本地基础设施并让 Lambda 函数访问这些资产,否则我认为不需要 VPC。
  • 我认为您将“微服务”与“无服务器”混淆了。

标签: amazon-web-services amazon-elastic-beanstalk microservices aws-api-gateway


【解决方案1】:

我会回答不是基于意见的观点:

  1. Elastic Beanstalk 在应用程序创建时获取子域。这个 子域应由 API Gateway 使用,集成类型:AWS 服务,实际配置 - 我说的对吗?

不,AWS 服务集成仅适用于您实际调用 Elastic Beanstalk 服务。您将调用自己的 beanstalk instance,以便使用 HTTP 集成。

  1. 单个微服务代表什么? Elastic Beanstalk 的应用程序是特定的可扩展微服务?

这取决于您,但正如 cmets 中所述,许多客户选择通过 Lambda 函数而不是 beanstalk 应用程序来执行此操作。使用 Lambda 的好处是您无需管理 beanstalk 应用程序的扩展。

  1. 测试环境:我应该在测试环境中使用什么结构(或 登台环境)?我考虑与另一个创建单独的 VPC Elastic Beanstalk 和其他 Amazon 服务。

请注意,API Gateway 目前无法联系您 VPC 中的资源。任何 beanstalk 实例都需要可公开访问。

  1. 测试环境和API网关:我应该如何设置API网关?如果请求具有特定的子域,它应该允许客户端访问测试环境中的微服务,例如:test.mydomain.com/hello_world/say_hello。我不确定如何在 CI/CD 中使用 API Gateway 使其快速简单,无需手动将一些配置从测试阶段复制到生产阶段。 (我不期待任何复杂的解决方案,只是一些关于我可以使用哪些组件、部件、概念的提示。更多细节我会自己找到)。

你应该看看stage variables。这将允许您使用存储在这些变量中的 dev/test/prod 之间的差异的基本配置。

【讨论】:

  • 谢谢!我想使用 Docker,但 Lambda 不直接支持它——我需要将它与 ECS 结合起来。多容器配置中的 Beanstalk 在 ECS 之上工作,所以我认为 Beanstalk 对我来说是更好的解决方案。
  • AWS 还是不直接支持 API 网关后面的 vpc 吗?通过 lambda 只会增加更多复杂性,并且每个服务都必须再次关心身份验证。
  • @gabel 它仍然不受支持,但它是要求最高的功能之一,我们正在努力在未来支持这些用例。
  • @Kinney thx 回复。我猜 lambda 或客户端证书是两种解决方法。但两者都要求我通过 HTTPs 运行服务..
【解决方案2】:

API Gateway 现在支持与私有 VPC 的集成,因此我希望您可以将 ELB 部署在私有 VPC 中,并使用 .ebextension 将其与 API Gateway 放在前面

来源:https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-api-gateway-supports-endpoint-integrations-with-private-vpcs/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 2020-07-24
    • 2018-06-13
    • 2018-08-14
    • 2017-01-17
    • 2016-03-07
    • 2018-11-01
    • 2018-06-30
    相关资源
    最近更新 更多