【问题标题】:Two S3 Buckets are creating when Deploying using serverless framework使用无服务器框架部署时创建了两个 S3 存储桶
【发布时间】:2022-02-05 20:09:31
【问题描述】:

我正在尝试使用无服务器框架创建 S3 存储桶。但是当我部署时,它会创建两个存储桶,一个是我在severless.yml 文件中提到的名称,另一个是另一个存储桶。

serverless.yml

service: aws-file-upload-tos3

provider:
  name: aws
  runtime: nodejs12.x
  stage: dev
  region: us-east-2
  lambdaHashingVersion: 20201221

custom:
  fileUploadBucketName: ${self:service}-${self:provider.stage}-bucket

resources:
  Resources:
    FileBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:custom.fileUploadBucketName}
        AccessControl: PublicRead

创建的桶是

为什么要像这样创建两个桶

【问题讨论】:

    标签: amazon-web-services amazon-s3 serverless-framework


    【解决方案1】:

    默认情况下,无服务器框架会使用生成的名称(如 <service name>-serverlessdeploymentbuck-1x6jug5lzfnl7)创建一个存储桶来存储服务的堆栈状态。

    无服务器应用程序的每个后续版本都通过 sls 捆绑并上传到部署存储桶,然后从那里进行部署。

    如果您使用serverless-deployment-bucket 插件,我认为您可以控制 sls 如何执行此操作。

    【讨论】:

    • 正在尝试使用 preSignedURL 将 xlxs 或 csv 文件上传到 S3。但是将文件上传到 signedURL 时访问被拒绝的原因可能是 CORS,所以如果我想设置 CORS 和存储桶策略,我需要将它设置为两个存储桶
    • 我认为您是在说您在浏览器中运行的应用程序将文件上传到您的 S3 存储桶之一,可能不是自动生成的部署存储桶。在您的应用将文件上传到的存储桶上设置 CORS 配置(我假设那是 FileBucket)。
    【解决方案2】:

    默认情况下,无服务器框架会在您的机器上创建许多东西,以便部署您在 serverles.yml 中配置的内容。然后,它需要利用 AWS 内部名为 CloudFormation 的服务来实际创建您配置的资源,例如您的 S3 存储桶。执行此操作的最佳方法是将其在您的计算机上创建的内容上传到 AWS,以确保部署继续进行而不会中断或出现问题,而最好的地方是 S3。

    因此,无服务器框架将始终(默认情况下)创建自己的 S3 存储桶,该存储桶与您配置为存储它在 AWS 账户上生成的文件的位置完全无关,然后将 CloudFormation 指向它以构建您配置的东西建立起来。

    虽然您对此部署存储桶有一定的控制权,但始终需要一个。而且和你配置的bucket完全无关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 2020-12-14
      • 2020-11-29
      • 2019-10-03
      • 1970-01-01
      • 2021-09-15
      • 2020-03-23
      相关资源
      最近更新 更多