0

我正在使用AWS Code star并使用Express Web服务模板。代码明星创建Lambda并创建API网关API。该api的作品,它返回我想要的。我试图通过API网关启用CORS,AWS Code Star Express API启用CORS和集成响应

API网关 - > API - >资源 - >操作 - >启用CORS

由于未为代理生成集成响应,因此无法在选项上设置CORS。这里是图像。 enter image description here

enter image description here

我想我必须通过YAML配置这个生成的选项合并响应和GET。

这里是我的YAML

AWSTemplateFormatVersion: 2010-09-09 
Transform: 
- AWS::Serverless-2016-10-31 
- AWS::CodeStar 

Parameters: 
    ProjectId: 
    Type: String 
    Description: AWS CodeStar projectID used to associate new resources to team members 

Resources: 
    HelloWorld: 
    Type: AWS::Serverless::Function 
    Properties: 
     Handler: index.handler 
     Runtime: nodejs4.3 
     Role: 
     Fn::ImportValue: 
      !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']] 
     Events: 
     GetEvent: 
      Type: Api 
      Properties: 
      Path:/
      Method: get 
    GetById: 
    Type: AWS::Serverless::Function 
    Properties: 
     Handler: index.handler 
     Runtime: nodejs4.3 
     Role: 
     Fn::ImportValue: 
      !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']] 
     Events: 
     GetEvent: 
      Type: Api 
      Properties: 
      Path: /api/getById 
      Method: get 

这是我的LAMBDA处理程序。

'use strict'; 

const awsServerlessExpress = require('aws-serverless-express') 
const app = require('./app') 
const server = awsServerlessExpress.createServer(app) 

exports.handler = (event, context) => awsServerlessExpress.proxy(server, event, context); 

如果有人能帮助我如何调整CloudFormation模板,我将不胜感激。

回答

0

你不需要改变你的CloudFormation模板添加的CORS头。如果您使用无服务器有一个选项,以使CORS与“CORS:真正的”象下面这样:

functions: 
    suggest: 
    handler: shopping-service.suggestWardrobe 
    timeout: 20 
    memorySize: 256 
    name: demo-shopping-service 
    description: Provides wardrobe suggestions based on a given Location 

    events: 
    - http: 
     path: suggest 
     method: get 
     cors: true 

但是,这仅适用于API端点,而不是到API拉姆达代理。

您必须在lambda回调中显式设置标题才能使CORS正常工作。

let payload = { 
    headers: {"Access-Control-Allow-Origin": "*"} 
}; 
callback(null, payload); 

你也必须返回一个有效的StatusCode和身体标题一起,或API将无法改变你的拉姆达响应API响应。