Ошибка без сервера, CloudFormation не может обновить стек, если ресурс с настраиваемым именем требует замены.

У меня следующая ошибка.

Бессерверная: операция не удалась!

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, чтобы начать развертывание заново, тем временем моя база данных очищается от всего данные ... должен быть как-то лучший способ.


comment
ваше решение было хорошим для меня ... этап был на этапе разработки, и потерянные данные не были проблемой в моем случае. Благодарность!   -  person kord    schedule 27.01.2018


Ответы (2)


Рекомендуемое AWS решение - переименовать: https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-custom-name/

person Jon Smirl    schedule 30.11.2017
comment
Не могли бы вы объяснить причину проблемы? Я не мог понять объяснение, упомянутое на странице AWS, которую вы предоставили. - person Mohammed Noureldin; 27.02.2021

Я обнаружил, что мне нужно вставить некоторые переменные, чтобы заставить его работать.

Переменная среды: 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();

person Alex K    schedule 10.08.2018
comment
В вашем случае переменные всегда одинаковы? Что произойдет, если вы измените переменные? - person Joseph Astrahan; 10.08.2018
comment
В итоге мне пришлось добавить переменную, которая меняется каждый раз BUILD_NUMBER. Обновил свой ответ. Однако я действительно решил перейти на MySQL вместо Dynamo для того, над чем я работаю. - person Alex K; 12.08.2018
comment
Забавно, что вы упомянули, что я также переключился на MySQL. У меня есть другие сообщения о том, как я автоматизировал это с помощью бессерверного - person Joseph Astrahan; 12.08.2018
comment
Хороший. Да, я обнаружил, что «Динамо» слишком ограничено. Я создаю SaaS и привык к тому, что могу легко запрашивать разные поля, создавать индексы и тому подобное. - person Alex K; 15.08.2018
comment
Это не решение, я имею в виду, что это так, но не совсем, это в основном удаляет вашу существующую таблицу, и вы теряете свои данные, если я правильно понимаю - person Ali; 07.01.2021