Включить CORS для шлюза API в шаблоне Cloudformation

Я создаю шаблон облачной статистики AWS для своей среды, и я не могу найти способ включить метод CORS для API-шлюза.

Я могу настроить его с помощью консоли AWS (вот официальный документ), но как я могу это сделать в шаблоне Cloudformation?

Ответ 1

После некоторых проб и ошибок я обнаружил, что следующий фрагмент шаблона CloudFormation будет производить эквивалентный метод OPTIONS по сравнению с мастером консоли 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

* Примечание 1. Это пример использования значений по умолчанию для POST. Очевидно, вам нужно обновить Access-Control-Allow-Methods, чтобы включить нужные значения.

* Примечание 2: Премия команды AWS CloudFormation за недавнюю поддержку YAML. Если вам нужно конвертировать в/из YAML/JSON, я нашел этот сайт удобным: http://www.json2yaml.com/

Ответ 2

Поддержка API Gateway для автоматической конфигурации CORS в настоящее время работает только через консоль API Gateway. Вы можете настроить CORS самостоятельно при импорте API из swagger или при определении API через CloudFormation, но вы должны указать все параметры для настройки метода OPTIONS, а также добавить специальные заголовки CORS к вашим другим методам.

Эта страница показывает, как настроить CORS при импорте swagger. Настройка CORS через CloudFormation концептуально аналогична, но использует синтаксис CloudFormation, а не синтаксис swagger.

Ответ 3

это только метод создания опции, все еще есть работа, которую нужно выполнить для ответа GET, POST и т.д., я создал завершенную облачную информацию "Здравствуй, мир!"

https://github.com/seraphjiang/aws-cors-cloudformation/tree/master

Ответ 4

Попробуй это:

  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