web-dev-qa-db-ja.com

CloudformationテンプレートでAPI GatewayのCORSを有効にします

自分の環境用にAWS Cloudformationテンプレートを作成していますが、API GatewayメソッドでCORSを有効にする方法が見つかりません。

AWSコンソールを使用して設定できます( こちらは公式ドキュメントです )が、Cloudformationテンプレートでどのように設定できますか?

19
dds

試行錯誤の後、次のCloudFormationテンプレートスニペットは、CORSコンソールウィザードと比較した場合に同等のOPTIONSメソッドを生成することがわかりました。

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:最近YAMLサポートを導入したAWS CloudFormationチームへの称賛。 YAML/JSONへ/から変換する必要がある場合は、このサイトが便利であることがわかりました。 http://www.json2yaml.com/

42
dannymac

現在、自動CORS構成のAPI Gatewayサポートは、API Gatewayコンソールを介してのみ機能します。 swaggerからAPIをインポートするとき、またはCloudFormationを介してAPIを定義するときは、CORSを自分で設定できますが、OPTIONSメソッドを設定し、他のメソッドにCORS固有のヘッダーを追加するためのすべてのパラメーターを指定する必要があります。

このページ は、swaggerをインポートするときにCORSを設定する方法を示しています。 CloudFormationを介したCORSのセットアップは概念的には似ていますが、スワガー構文ではなくCloudFormation構文を使用します。

2
MikeD at AWS

それはオプションメソッドを作成するだけで、GET、POSTなどのメソッド応答で行う必要がある作業がまだあります、私は完成したhello world cloudformationを作成しました

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

1
Huan Jiang

これを試して:

  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
0
Anoop