无服务器:部署错误 S3 存储桶已存在于堆栈中

gok*_*ack 5 amazon-s3 amazon-web-services aws-cloudformation serverless-framework serverless

我正在尝试部署一个 serverless 项目,该项目在 serverless.yml 文件中具有 s3 存储桶创建 cloudformation,但问题是当我尝试部署时,它说 s3 存储桶已经存在并且部署失败。

我知道 s3 存储桶名称应该是全局唯一的,而且我非常确定它是我正在使用的唯一名称,即使更改为其他名称,它仍然表示相同。

它说存在 s3 存储桶的 cloudformation 堆栈实际上是新创建的堆栈,不确定如何解决此问题。谁能帮我解决这个问题并告诉我如何解决部署问题和问题的原因:)。

提前致谢。

gok*_*ack 14

我遇到的问题是,对于其中一个 lambda,我将上述存储桶作为event source,因此当将某个存储桶添加为事件源时,它实际上也会创建该存储桶,因此当它运行实际创建相关的 cloudformation 时,它会说该存储桶已经存在。

因此,我通过仅保留事件源并删除了该存储桶的实际声明来修复它。

  • 经过一小时的绞尽脑汁,我得出了同样的结论。这是一个令人讨厌的小警告。 (2认同)
  • 我花了一整天的时间寻找它。对我来说,这更像是一个错误,框架应该发出警告或抛出错误,非常感谢! (2认同)

Joe*_*ene 10

如果您添加existing: true到文件中的 S3 配置,serverless.yml它不会尝试创建如下所示的 S3 存储桶:-

funcName:
    handler: handler
    events:
        -   s3:
                bucket: 'my-bucket-name'
                events: s3:ObjectCreated:*
                existing: true
                rules:
                    -   suffix: .pdf
                    -   prefix: documents
Run Code Online (Sandbox Code Playgroud)


小智 5

任何涉及 CloudFormation(或任何其他代码中的基础设施)的事情都很麻烦,并且错误消息可能会产生误导,这意味着有很多事情都可能导致此问题(请参阅 GitHub 上的问题,例如这个)。

但根据我的经验,此类问题的最常见原因不是预先存在的存储桶,而是 AWS 凭证、权限或区域的问题,这些问题会提供误导性的错误消息。要解决这些问题,或者至少排除它们:

  1. 确保您的serveless.yml设置为已部署堆栈的区域。示例:
custom:
  stage: dev
  region: us-east-2
Run Code Online (Sandbox Code Playgroud)
  1. 例如,~/.aws/credentials通过在将用于部署的 shell 中显式设置您的凭据,覆盖任何潜在凭据。无服务器文档中的示例:
custom:
  stage: dev
  region: us-east-2
Run Code Online (Sandbox Code Playgroud)
  1. 确保这些 AWS 凭证具有所需的角色和权限

但是,正如我提到的,CloudFormation 很挑剔。可能还有其他问题需要解决,但请先尝试这些问题。你可能会尝试它们,但仍然会用头撞墙,但它更有可能是正确的墙。希望这可以帮助。