Je crée un modèle AWS Cloudformation pour mon environnement et je ne trouve pas de moyen d'activer la méthode CORS for API Gateway.
Je peux le configurer à l'aide de la console AWS ( voici le document officiel ), mais comment puis-je le faire dans le modèle Cloudformation?
Après quelques essais et erreurs, j'ai constaté que l'extrait de modèle CloudFormation suivant produirait une méthode OPTIONS équivalente par rapport à l'assistant de la console CORS:
OptionsMethod:
Type: AWS::ApiGateway::Method
Properties:
AuthorizationType: NONE
RestApiId:
Ref: MyApi
ResourceId:
Ref: MyResourceOnWhichToEnableCORS
HttpMethod: OPTIONS
Integration:
IntegrationResponses:
- StatusCode: 200
ResponseParameters:
method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
method.response.header.Access-Control-Allow-Methods: "'POST,OPTIONS'"
method.response.header.Access-Control-Allow-Origin: "'*'"
ResponseTemplates:
application/json: ''
PassthroughBehavior: WHEN_NO_MATCH
RequestTemplates:
application/json: '{"statusCode": 200}'
Type: MOCK
MethodResponses:
- StatusCode: 200
ResponseModels:
application/json: 'Empty'
ResponseParameters:
method.response.header.Access-Control-Allow-Headers: false
method.response.header.Access-Control-Allow-Methods: false
method.response.header.Access-Control-Allow-Origin: false
* Note 1: Ceci est un exemple de prise de valeurs par défaut pour un POST. De toute évidence, vous devrez mettre à jour Access-Control-Allow-Methods
pour inclure les valeurs dont vous avez besoin.
* Remarque 2: félicitations à l'équipe AWS CloudFormation pour avoir récemment introduit la prise en charge de YAML. Si vous avez besoin de convertir en/de YAML/JSON, j'ai trouvé ce site pratique: http://www.json2yaml.com/
La prise en charge de la passerelle API pour la configuration CORS automatique ne fonctionne actuellement que via la console API Gateway. Vous pouvez toujours configurer CORS vous-même lors de l'importation d'une API à partir de swagger ou lors de la définition d'une API via CloudFormation, mais vous devez spécifier tous les paramètres pour configurer la méthode OPTIONS et ajouter les en-têtes spécifiques à CORS à vos autres méthodes.
Cette page montre comment configurer CORS lors de l'importation de swagger. Configurer CORS via CloudFormation est conceptuellement similaire, mais utilise la syntaxe CloudFormation plutôt que la syntaxe swagger.
il ne reste que la méthode d’option de création, il reste encore du travail à faire sur les réponses GET, POST, etc.
https://github.com/seraphjiang/aws-cors-cloudformation/tree/master
Essaye ça:
OPTIONS:
Type: AWS::ApiGateway::Method
Properties: ApiKeyRequired: false
RestApiId: !Ref YourAPI
ResourceId: !Ref YourResourceName
HttpMethod: OPTIONS
AuthorizationType: NONE
Integration:
Type: MOCK
IntegrationResponses:
- StatusCode: 200
ResponseParameters:
method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
method.response.header.Access-Control-Allow-Methods: "'GET,OPTIONS'"
method.response.header.Access-Control-Allow-Origin: "'*'"
ResponseTemplates:
application/json: ''
PassthroughBehavior: WHEN_NO_MATCH
RequestTemplates:
application/json: '{"statusCode": 200}'
Type: MOCK
MethodResponses:
- StatusCode: 200
ResponseModels:
application/json: 'Empty'
ResponseParameters:
method.response.header.Access-Control-Allow-Headers: false
method.response.header.Access-Control-Allow-Methods: false
method.response.header.Access-Control-Allow-Origin: false