AWS Lambda API 被 CORS 策略阻止

问题描述 投票:0回答:1

我在 AWS Lambda 中有一个 API,当我尝试调用它时,我收到与 CORS 策略相关的错误,尽管我认为我正确配置了 CORS。

我在 AWS Lambda 中有一个用 Python 编写的 API,我使用无服务器框架部署了该 API。尽管当我从前端获取 API 时,它会出现与 CORS 配置相关的错误。

“从源 'http://localhost:8080' 获取 'https://0vdu10a3e6.execute-api.eu-west-1.amazonaws.com/dev/init' 的访问已被 CORS 策略阻止:请求预检响应中的 Access-Control-Allow-Headers 不允许标头字段 access-control-allow-origin。”

尝试了一些修复后,我得到了这个,但我仍然收到错误

def init(event, context):
       # removed most of the code
           return {
                "statusCode": 200,
                "headers": {
                    "Access-Control-Allow-Origin": "http://localhost:8080",
                    "Access-Control-Allow-Credentials": True,
                    "Access-Control-Allow-Headers": "Origin, Content-Type, Credentials",
                    "Access-Control-Allow-Methods": "POST, GET",
                    'Content-Type': "application/json"
                },
                "body": json.dumps(response)
            }

这是我的 Dockerfile:

FROM public.ecr.aws/lambda/python:3.11.2023.09.12.11

WORKDIR /app

COPY Models/best.pt /app
COPY AcharyaMeasuringPrototype.py /app
COPY Utlis.py /app
COPY requirements.txt /app

RUN pip install --upgrade pip

RUN pip cache purge
RUN pip install 'ultralytics[yolo]~=8.0.147'
RUN pip install -r requirements.txt

EXPOSE 3000

CMD [ "AcharyaMeasuringPrototype.init" ]

这是我的 serverless.yaml:

service: acharya-ml
provider:
  name: aws
  runtime: python3.8
  stage: dev
  region: eu-west-1
  iam:
    role:
      statements:
        - Effect: "Allow"
          Action:
            - "ecr:InitiateLayerUpload"
            - "ecr:SetRepositoryPolicy"
            - "ecr:GetRepositoryPolicy"
          Resource:
            !Join 
              - ':'
              - - 'arn:aws:ecr'
                - Ref: AWS::Region
                - Ref: AWS::AccountId
                - 'repository/*'
plugins:
# - serverless-python-requirements
  - serverless-offline

custom:
  pythonRequirements:
    dockerizePip: true

functions:
  main:
    image: 550512796301.dkr.ecr.eu-west-1.amazonaws.com/acharya-prototype-ml:latest
    timeout: 30
    events:
      - http: 
          path: /init 
          method: POST

这就是我获取的方式:

const res = await fetch("https://hinjggqsg4.execute-api.eu-west-1.amazonaws.com/dev/init", {
        method: "POST",
        headers: {
          'Content-Type': 'application/json'
        },
      });

我也没有登录 Lambda。 如果有人可以帮助我,我将不胜感激。谢谢您的宝贵时间。

python docker aws-lambda cors serverless-framework
1个回答
0
投票

错误消息提到“预检”。 这通常与 HTTP OPTION 方法相关联。 尝试返回:

def init(event, context):
       # removed most of the code
           return {
                "statusCode": 200,
                "headers": {
                    "Access-Control-Allow-Origin": "http://localhost:8080",
                    "Access-Control-Allow-Credentials": True,
                    "Access-Control-Allow-Headers": "Origin, Content-Type, Credentials",
                    "Access-Control-Allow-Methods": "POST, GET, OPTION",
                    'Content-Type': "application/json"
                },
                "body": json.dumps(response)
            }
© www.soinside.com 2019 - 2024. All rights reserved.