无服务器:部署错误 S3 Bucket 已存在于堆栈中
Serverless: Deplyment error S3 Bucket already exists in stack
我正在尝试部署一个无服务器项目,该项目在 serverless.yml 文件中创建了 s3 存储桶创建 cloudformation,但问题是当我尝试部署时,它说 s3 存储桶已经存在并且部署失败。
我知道 s3 存储桶名称应该是全局唯一的,而且我非常确定它是我使用的唯一名称,即使更改为其他名称,它仍然表示相同。
它所说的 s3 存储桶存在的 cloudformation 堆栈实际上是新创建的堆栈,不知道如何解决这个问题。谁能帮我解决这个问题并告诉我如何解决部署问题和问题的原因:)。
提前致谢。
任何涉及 CloudFormation(或任何其他代码中的基础设施)的东西都是繁琐的,错误消息可能会误导人,这意味着有很多事情会导致这个问题(参见 GitHub 上的问题,例如this one).
但根据我的经验,此类问题的最常见原因是不是预先存在的存储桶,而是 AWS 凭据、权限或区域的问题误导性的错误信息。要解决这些问题,或者至少排除它们:
- 确保您的
serveless.yml
设置为您已经部署堆栈的区域。示例:
custom:
stage: dev
region: us-east-2
- 通过在您将用于部署的 shell 中明确设置您的凭据,覆盖来自
~/.aws/credentials
的任何潜在凭据。来自 Serverless docs 的示例:
export AWS_ACCESS_KEY_ID=<your access key here>
export AWS_SECRET_ACCESS_KEY=<your access secret here.
- 确保这些 AWS 凭据具有 the roles and permissions they need.
但是,正如我提到的,CloudFormation 很挑剔。可能还有其他问题需要解决,但请先尝试这些问题。您可以尝试使用它们,但仍然会用头撞墙,但更可能是 right 墙。希望这会有所帮助。
我遇到的问题是,对于其中一个 lambda,我将上述存储桶作为 event source
,因此当将某个存储桶添加为事件源时 它实际上创建了该存储桶同样,因此当它运行与实际创建相关的 cloudformation 时,它表示存储桶已经存在。
所以我通过仅保留事件源并删除该存储桶的实际声明来修复它。
如果您将 existing: true
添加到 serverless.yml
文件中的 S3 配置,它不会像下面那样尝试创建 S3 存储桶:-
funcName:
handler: handler
events:
- s3:
bucket: 'my-bucket-name'
events: s3:ObjectCreated:*
existing: true
rules:
- suffix: .pdf
- prefix: documents
我正在尝试部署一个无服务器项目,该项目在 serverless.yml 文件中创建了 s3 存储桶创建 cloudformation,但问题是当我尝试部署时,它说 s3 存储桶已经存在并且部署失败。
我知道 s3 存储桶名称应该是全局唯一的,而且我非常确定它是我使用的唯一名称,即使更改为其他名称,它仍然表示相同。
它所说的 s3 存储桶存在的 cloudformation 堆栈实际上是新创建的堆栈,不知道如何解决这个问题。谁能帮我解决这个问题并告诉我如何解决部署问题和问题的原因:)。
提前致谢。
任何涉及 CloudFormation(或任何其他代码中的基础设施)的东西都是繁琐的,错误消息可能会误导人,这意味着有很多事情会导致这个问题(参见 GitHub 上的问题,例如this one).
但根据我的经验,此类问题的最常见原因是不是预先存在的存储桶,而是 AWS 凭据、权限或区域的问题误导性的错误信息。要解决这些问题,或者至少排除它们:
- 确保您的
serveless.yml
设置为您已经部署堆栈的区域。示例:
custom:
stage: dev
region: us-east-2
- 通过在您将用于部署的 shell 中明确设置您的凭据,覆盖来自
~/.aws/credentials
的任何潜在凭据。来自 Serverless docs 的示例:
export AWS_ACCESS_KEY_ID=<your access key here>
export AWS_SECRET_ACCESS_KEY=<your access secret here.
- 确保这些 AWS 凭据具有 the roles and permissions they need.
但是,正如我提到的,CloudFormation 很挑剔。可能还有其他问题需要解决,但请先尝试这些问题。您可以尝试使用它们,但仍然会用头撞墙,但更可能是 right 墙。希望这会有所帮助。
我遇到的问题是,对于其中一个 lambda,我将上述存储桶作为 event source
,因此当将某个存储桶添加为事件源时 它实际上创建了该存储桶同样,因此当它运行与实际创建相关的 cloudformation 时,它表示存储桶已经存在。
所以我通过仅保留事件源并删除该存储桶的实际声明来修复它。
如果您将 existing: true
添加到 serverless.yml
文件中的 S3 配置,它不会像下面那样尝试创建 S3 存储桶:-
funcName:
handler: handler
events:
- s3:
bucket: 'my-bucket-name'
events: s3:ObjectCreated:*
existing: true
rules:
- suffix: .pdf
- prefix: documents