0

J'utilise AWS Code star et j'utilise le modèle de service Web Express. Code star crée Lambda et crée API API Gateway. L'api fonctionne, ça rend ce que je veux. J'essaie d'activer CORS, via la passerelle API,API AWS Code Star Express Activer la réponse CORS et l'intégration

API GateWay -> API -> resouce -> Actions -> Activer CORS.

Il échoue lors de la définition des options CORS sur les options car la réponse d'intégration n'est pas générée pour le proxy. Voici les images. enter image description here

enter image description here

Je pense que je dois configurer cela par YAML pour générer une réponse d'intégration sur les options et GET.

Voici mon 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 

Voici mon Lambda Handler.

'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); 

Je serais reconnaissant si quelqu'un peut m'aider comment puis-je ajuster le modèle CloudFormation.

Répondre

0

Vous n'avez pas besoin de changer votre modèle de CloudFormation. Si vous utilisez Serverless a une option pour activer CORS avec « CORS: true » comme ci-dessous:

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 

ne vaut toutefois que pour le point final de l'API et non à l'API proxy lambda.

Vous devez définir explicitement l'en-tête dans le rappel lambda pour que CORS fonctionne.

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

Vous devez aussi retourner une statusCode valide et le corps ainsi que les en-têtes, ou l'API échouera pour transformer votre réponse lambda à une réponse de l'API.