reactjs 前端(ecs fargate)无法通过私有子网中的负载均衡器向后端(fargate)发送正常请求

cbwuti44  于 2023-02-08  发布在  React
关注(0)|答案(1)|浏览(120)

我正在用地形构建aws云。有一个问题没有解决,所以我留下了这样一个问题。
目前,前端(React)和后端(fastapi)是ecs fargate,每个分别在专用子网上创建一个群集。来自Internet网关的流量被设计为通过负载平衡器进入前端,然后,通过私有子网中的负载平衡器将流量分配回后端。因此我将负载平衡器的域应用于前端主机,并且在前端ecs任务的环境变量中指定了负载均衡器但是前端向后端发送正常请求失败,出现405错误。以下是 * Terraform中的前端ecs任务定义。

resource "aws_ecs_task_definition" "react" {
  family                   = "react"
  network_mode             = "awsvpc"
  requires_compatibilities = ["FARGATE"]
  cpu                      = 1024
  memory                   = 4096
  execution_role_arn       = "${aws_iam_role.ecsTaskExecutionRole.arn}"
  task_role_arn            = "${aws_iam_role.ecs_execution_role.arn}"
  container_definitions = <<DEFINITION
[
  {
    "image": "<image pulled from ecs>",
    "cpu": 1024,
    "memory": 4096,
    "name": "react",
    "networkMode": "awsvpc",
    "essential": true,
    "portMappings": [
      {
        "containerPort": 80,
        "hostPort": 80
      }
    ],
    "environment": [
    {
        "name": "REACT_APP_HOST",
        "value": ${jsonencode(local.domain)}
    }
    ]
  }
]
DEFINITION
}
  • local. domain * 是这样指定的。
locals {
  domain = "${var.var_http}${aws_lb.fastapi.dns_name}"  
}
    • 我试着**

我把负载均衡器的域连接到本地前端时,已经确认工作正常,在设置react的域时,我认为react可能没有读取负载均衡器的域,所以我在ecr中用react上传的docker文件中安装了env-cmd为npm,脚本安装为"build": "env-cmd -f.I tried to modify to env react-scripts build",但是docker文件出现错误。
谢谢你的阅读!

xlpyo6sf

xlpyo6sf1#

React是一个网页浏览器javascript框架。React在浏览器中运行。你的前端Fargate服务器除了向网页浏览器提供静态文件外什么也不做。代码在每个用户的网页浏览器中运行。对后端的API请求不是来自前端Fargate服务器,而是来自每个用户的笔记本电脑/台式电脑。为了让代码在人们的网页浏览器中运行,要访问后端API,API必须在Internet上公开可用。

相关问题