通过AWS CLI启用CORS

时间:2017-06-07 11:15:42

标签: amazon-web-services aws-api-gateway aws-cli

我们有一个Angular2应用程序,它托管在S3 Bucket上,并将调用发送到API网关后面的后端。

如果我们在API网关上自己启用CORS,这非常有效,但是如果我们在后端更改某些内容并使用我们的api_deploy.sh skript进行部署,它通常会重置一些CORS配置。

aws apigateway create-deployment --rest-api-id XXXXXX --stage-name $1 --description "$2"

有没有一种解决方案,我们没有必要通过自己的evrytime改变它?我想亚马逊CLI可以提供帮助,但到目前为止似乎没有任何工作。

1 个答案:

答案 0 :(得分:2)

您可以使用CloudFormation / SAM来部署API网关。

在端点上启用CORS后,请尝试以下操作:

  1. 使用API​​网关扩展程序将您的API导出为Swagger文件(例如swagger-stage.yaml),
  2. 创建一个指向本地驱动器上的招摇文件的模板文件,例如: template.yaml

    AWSTemplateFormatVersion: '2010-09-09'
    Transform: AWS::Serverless-2016-10-31
    Description: API deployment
    Resources:
      ApiGatewayApi:
        Type: AWS::Serverless::Api
        Properties:
          DefinitionUri: ./swagger-stage.yaml
          StageName: Staging
    Outputs:
      ApiUrl:
        Description: URL of the API endpoint
        Value: !Join
          - ''
          - - https://
            - !Ref ApiGatewayApi
            - '.execute-api.'
            - !Ref 'AWS::Region'
            - '.amazonaws.com/staging'
    
  3. 使用一些简单的命令将您的堆栈部署到AWS CloudFormation,例如deploy.sh

    #!/bin/bash
    aws s3 mb --region eu-west-1 s3://cloudformation-uploads # only needed if bucket does not exist yet
    aws cloudformation package --template-file template.yaml --s3-bucket cloudformation-uploads --output-template-file template.pkg.yaml
    aws cloudformation deploy --template-file template.pkg.yaml --stack-name api-deploy-stack