如何配置无服务器 S3 存储桶资源以使用 CORS AllowOrigin 设置为其函数的 http 端点

How to configure a Serverless S3 bucket resource to use a CORS AllowOrigin set to the http endpoint of its function

我正在使用 Serverless 创建一个提供静态内容的 Web 应用程序,例如来自 S3 存储桶的网络字体。 S3 存储桶在我的 serverless.yml 文件中配置为资源。它的 CORS 配置有一个 AllowOrigin 设置为通配符。

我想将其更改为具有 AllowOrigin 以及无服务器创建的服务的 http 端点,例如31alib51b6.execute-api.eu-west-1.amazonaws.com.

我想知道是否可以在 serverless.yml 文件本身中进行配置。

我的例子serverless.yml文件:

service: example-service

provider:
  name: aws
  runtime: nodejs4.3
  region: eu-west-1

functions:
  web:
    handler: handler.handler
    name: ${self:service}-${self:provider.stage}
    description: ${self:service} web application - ${self:provider.stage}
    events:
      - http:
        path: web
        method: get
      - http:
        path: web/{proxy+}
        method: get

resources:
  Resources:
    S3Assets:
      Type: AWS::S3::Bucket
      Properties: 
        BucketName: ${self:service}-${self:provider.stage}-assets
        CorsConfiguration:
          CorsRules:
            - AllowedMethods:
                - GET
                - HEAD
              AllowedOrigins:
                - "*"

您可以使用以下语句定义 AllowedOrigin:

    CorsConfiguration:
      CorsRules:
        - AllowedMethods:
            - GET
            - HEAD
          AllowedOrigins:
            - Fn::Join:
              - ""
              - - "https://"
                - Ref: ApiGatewayRestApi
                - ".execute-api.eu-west-1.amazonaws.com"

"Ref: ApiGatewayRestApi"引用生成的API.

的内部名称