【问题标题】:Serverless Error, CloudFormation cannot update a stack when a custom-named resource requires replacing无服务器错误,当自定义命名资源需要替换时,CloudFormation 无法更新堆栈
【发布时间】:2018-05-14 00:48:28
【问题描述】:

我有以下错误。

无服务器:操作失败!

Serverless Error ---------------------------------------
An error occurred: phoneNumberTable - CloudFormation cannot update a stack when a custom-named resource requires replacing. Rename mysite-api-phonenumber-dev and update the stack again…

我尝试删除数据库以查看是否可以重新创建它,但它仍然给出相同的错误并且没有重新创建数据库? 我在这里做什么?

我最近在我的 serverless.yml 文件中为资源更改了以下内容。

phoneNumberTable: #This table is used to track phone numbers used in the system
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: ${self:custom.phoneNumberTable}
        AttributeDefinitions: #UserID in this case will be created once and constantly updated as it changes with status regarding the user.
          - AttributeName: phoneNumber
            AttributeType: S
        KeySchema:
          - AttributeName: phoneNumber
            KeyType: HASH
        ProvisionedThroughput:
            ReadCapacityUnits: ${self:custom.dynamoDbCapacityUnits.${self:custom.pstage}}
            WriteCapacityUnits: ${self:custom.dynamoDbCapacityUnits.${self:custom.pstage}}

我在复制和粘贴时不小心使用 userId 创建了它,因此我将其更改为 phoneNumber 作为哈希键,但现在不会反映更改!

编辑::

我找到了解决方案,但很糟糕。如果我执行 sls remove --stage dev 它将删除我的阶段的所有内容,但实际上所有内容......然后我必须执行 sls deploy --stage dev 重新开始部署,同时我的数据库被清除所有数据...必须有更好的方法。

【问题讨论】:

  • 您的解决方案对我有好处...阶段是“开发”,在我的情况下丢失的数据不是问题。谢谢!

标签: amazon-web-services amazon-dynamodb amazon-cloudformation serverless-framework serverless


【解决方案1】:

【讨论】:

  • 您能解释一下问题的原因吗?我无法理解您提供的 AWS 页面中提到的解释。
【解决方案2】:

我发现我需要插入一些变量才能使其工作。

环境变量: USERS_TABLE: "users-${opt:stage, self:provider.stage}-${self:provider.environment.BUILD_NUMBER}"

表名: TableName: ${self:provider.environment.USERS_TABLE}

在我的代码中: const existingUser = await dynamoDb.get({ TableName: process.env.USERS_TABLE, Key: { email, }, }).promise();

【讨论】:

  • 变量在你的情况下总是相同的吗?如果更改变量会发生什么?
  • 我最终不得不添加一个变量,该变量每次都会更改 BUILD_NUMBER。更新了我的答案。然而,我实际上决定改用 MySQL 而不是 Dynamo 来完成我的工作。
  • 有趣的是你提到我确实也切换到了 MySQL 我还有其他一些关于如何使用无服务器实现自动化的帖子
  • 不错。是的,我发现 Dynamo 太有限了。我正在构建一个 SaaS,我已经习惯了能够轻松地查询不同的字段并创建索引和类似的东西。
  • 这不是一个解决方案,我的意思是但不是真的,这基本上会删除您现有的表并且您会丢失您的数据,如果我理解正确的话
猜你喜欢
  • 2019-11-17
  • 2016-03-23
  • 2016-06-09
  • 2021-03-09
  • 2017-05-05
  • 2021-05-24
  • 2019-04-17
  • 1970-01-01
  • 2021-07-06
相关资源
最近更新 更多