将多个服务部署到 Elastic Beanstalk - 使用静态文件和 Python Flask 的示例

时间:2021-04-11 12:01:07

标签: amazon-web-services amazon-elastic-beanstalk

背景

Elastic beanstalk 可以配置为通过应用程序负载均衡器配置为多个不同的进程提供服务。

在这个例子中,我们假设我们正在配置一个静态文件服务器和一个 Flask api 端点。

下图,我们可以创建两个进程,一个api,指向2000端口,默认进程通过80端口。

在 ALB 中添加规则,意味着我们可以根据路径前缀将传入侦听器路由到特定进程。在此示例中,任何以 /api/* 开头的内容都将转发到 api 应用程序,而其余流量则通过默认服务。

问题

这一切都很好,我们现在有了一个可以托管多个服务的弹性 beanstalk 环境。然而,不清楚的是,人们实际上如何针对特定流程进行部署?

在单进程场景​​中,您只需在应用了 eb deploy 的目录上输入 eb init 即可。现在,如何使用 eb deploy 部署多个进程,特别是如何在此示例中针对“api”进程或“默认”进程进行部署?

ALB Configuration

1 个答案:

答案 0 :(得分:0)

问题仍然是如何将部署部署到目标进程,但有 一个选项,用于专门处理静态文件,不涉及根据问题调整 ALB。

  1. 在您的根目录中创建一个名为 .ebextensions 的文件夹
  2. 在其中创建一个文件 anything.config - 我们将其命名为 python.config 并添加以下代码
option_settings:
    aws:elasticbeanstalk:environment:proxy:staticfiles:
      /html: html

/html: html 的语法将传入的 url 路径映射到本地路径上的路径,您 eb deploy 来自(与 .ebextensions 相同级别) - 在这种情况下,url 路径 { {1}} 与服务器上的物理文件夹名称相同,但不一定如此。

重要提示:不要添加尾部斜杠,例如/html 将不起作用

Nginx 后台配置

默认情况下,elastic beanstalk 使用 NGinx,一个代理服务器,允许您配置如何将 url 前缀映射到驱动器上的位置。

通过在 /html/: html/ 中创建上述设置,将为位于运行您的应用程序的 ec2 实例内的应用程序前面的 nginx 服务器创建一个新的配置值。

您可以通过登录到您的实例并导航到下面的 nginx 暂存区配置来亲自查看此操作: .ebextensions

您将在其中看到以下文件:

/var/proxy/staging/nginx/conf.d/elasticbeanstalk/

此设置负责创建具有以下内容的 00_application.conf 01_static.conf healthd.conf 文件,将任何 html 请求别名到部署在 01_static.conf 下的同名文件夹

/var/app/current/

要在不需要 location /html { alias /var/app/current/html; access_log off; } 周期的情况下快速测试 nginx 配置更改,您可以从位于以下位置的最终位置调整配置 eb deploy

然后做一个

/etc/nginx/conf.d/elasticbeanstalk/01_static.conf

我就是这样发现的,结尾的斜杠在我的案例中引起了问题。