标签: aws-application-load-balancer

在 AWS ECS 上设置 Rails 6 的正确方法

我在 AWS ECS 上部署了 Rails 6(与 Puma 一起运行)。有一个 ECS 服务和一个 ECS 任务,该任务启动托管我的应用程序的 EC2 实例。我还使用我的 ECS 服务创建了一个应用程序负载均衡器。我向负载均衡器添加了一个 HTTPS 侦听器。我的侦听器指向专门通过HTTP协议接受流量的目标组。

我对请求流程的理解:

HTTPS request from internet:
  --> hits AWS load balancer 
    --> hits HTTPS listener
      --> passes traffic using HTTP to Target Group
        --> request finally reaches Rails app on Target Group EC2 targets *over HTTP*
Run Code Online (Sandbox Code Playgroud)

这是一个有效的设置吗?我读了这个StackOverflow 答案,我的解释是,我们只需要 HTTPS 作为我们的负载均衡器,而不是 Puma,因此也不需要目标组。

我还通过 HTTP 为我的目标组设置了运行状况检查,该目标组期望 301 状态代码响应作为健康目标(因为我config.force_ssl在 Rails 配置中已启用)。问题是,为什么来自负载均衡器的流量没有被重定向?为什么健康检查的流量会被重定向?他们不是都针对同一个目标群体吗?为什么一个请求的结果是 200,而另一个请求的结果是 301?

我画了一张图来尝试捕捉我的问题/困惑/当前的理解:

在此输入图像描述

这是我的负载均衡器和目标组设置:

在此输入图像描述

在此输入图像描述

不确定这是 AWS 问题还是 Puma 问题或其他问题。采纳所有想法!谢谢你!!

ruby-on-rails amazon-web-services amazon-ecs aws-application-load-balancer

1
推荐指数
1
解决办法
817
查看次数

设置 AWS WAF ACL 时未找到资源

我正在尝试为负载均衡器设置 ACL,但Associated AWS resources在创建 Web ACL 时它没有显示在该部分中。

创建 ACL 仪表板

Resource TypeRegional resources区域与我的(网络)负载均衡器 (us-west-2) 相同。

这是负载均衡器配置: 在此输入图像描述

注意:我拥有管理员访问权限,因此这不是权限问题,至少对于我的 IAM 用户而言不是

acl amazon-web-services amazon-elb amazon-waf aws-application-load-balancer

1
推荐指数
1
解决办法
461
查看次数

如何在 AWS 中使用 Terraform 为应用程序负载均衡器创建自定义域

我一直在尝试弄清楚如何使用 Terraform 创建具有自定义名称的应用程序负载均衡器。到目前为止我有这个:

\n
resource "aws_alb" "application_load_balancer" {\n  name               = "${var.brand}-be-${var.environment_name}-load-balancer"\n  tags               = local.tags\n  load_balancer_type = "application"\n  subnets            = data.aws_subnets.public_subnets.ids\n\n  # security group\n  security_groups    = [aws_security_group.sg_load_balancer.id]\n}\n\n# Hosted Zone for new-dev.foocorp.com\nresource "aws_route53_zone" "zone_dev" {\n  name    = "new-dev.foocorp.com"\n  comment = "Hosted Zone for new-dev.foocorp.com"\n  records = [ aws_alb.application_load_balancer.dns_name ]\n\n  tags = merge(local.tags, {\n    Name = "new-dev.foocorp.com"\n  })\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但是,我得到:

\n
\xe2\x95\xb7\n\xe2\x94\x82 Error: Unsupported argument\n\xe2\x94\x82 \n\xe2\x94\x82   on main.tf line 323, in resource "aws_route53_zone" "zone_dev":\n\xe2\x94\x82  323:   records = [ aws_alb.application_load_balancer.dns_name ]\n\xe2\x94\x82 \n\xe2\x94\x82 An argument …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform terraform-provider-aws aws-application-load-balancer

1
推荐指数
1
解决办法
930
查看次数

ElasticBeanstalk 在与 Terraform 共享的 ALB 中使用 HTTPS:443 而不是 HTTP:80 创建默认侦听器规则

在 terraform 中创建具有共享负载均衡的 ElasticBeanstalk 环境时,是否可以将默认侦听器规则设置为使用 HTTPS:443 侦听器而不是 HTTP:80 侦听器?

我的 ALB 将端口 80 作为侦听器,将流量从 http 重定向到 https。现在,当 beanstalk 创建环境时,它会在 HTTP:80 侦听器中创建侦听器规则,但我不希望它这样做。在控制台中,我可以创建一个具有共享 ALB 的环境,并选择默认侦听器端口为 443(HTTPS),并将在 443 侦听器中创建默认规则,这正是我想要发生的情况。

我正在使用 terraform 构建此项目,并且在 ElasticBeanstalk常规选项的常规选项中,我没有看到将默认侦听器规则设置为使用 HTTPS:443 作为 elbv2 设置的选项。

amazon-web-services amazon-elastic-beanstalk terraform aws-application-load-balancer

0
推荐指数
1
解决办法
2085
查看次数

ALB 后面的 Fast API 中的根路径

我正在 AWS ALB 后面部署一个快速 API 应用程序,侦听器规则路径模式/api/v1/指向快速 API。我的应用程序看起来像这样

from typing import Union
import os
import mysql.connector
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    print("Root path hit")
    return {"App": "Fargate"}


@app.get("/api/v1/")
def read_apiv1():
    print("Root path hit")
    return {"App": "Path Fargate API v1"}

Run Code Online (Sandbox Code Playgroud)

我使用 docker 在 ECS 中部署了应用程序,我的 docker run 命令是

CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80", "--root-path", "/api/v1"]
Run Code Online (Sandbox Code Playgroud)

现在,当我点击后缀为 的 AWS ALB dns 时,我会看到抛出响应的/api/v1/端点。但是,根据快速 API 的文档,它应该使用./api/v1{"App": "Path Fargate API …

python reverse-proxy aws-application-load-balancer fastapi

0
推荐指数
1
解决办法
3017
查看次数