我在 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
我正在尝试为负载均衡器设置 ACL,但Associated AWS resources
在创建 Web ACL 时它没有显示在该部分中。
是Resource Type
,Regional resources
区域与我的(网络)负载均衡器 (us-west-2) 相同。
注意:我拥有管理员访问权限,因此这不是权限问题,至少对于我的 IAM 用户而言不是
acl amazon-web-services amazon-elb amazon-waf aws-application-load-balancer
我一直在尝试弄清楚如何使用 Terraform 创建具有自定义名称的应用程序负载均衡器。到目前为止我有这个:
\nresource "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
在 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
我正在 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 …
aws-application-load-balancer ×5
terraform ×2
acl ×1
amazon-ecs ×1
amazon-elb ×1
amazon-waf ×1
fastapi ×1
python ×1