AWS Amplify: как воссоздать удаленные вручную стеки CloudFormation

#amazon-cloudformation #aws-amplify

#aws-cloudformation #aws-amplify

Вопрос:

После этого семинара я создал пример приложения Amplify. После этого я вручную удалил стеки CloudFormation (из выбранного в консоли AWS корневого стека и выполнил действие удаления стека), надеясь, что смогу восстановить их с помощью amplify push . К сожалению, amplify не сообщает об изменениях и не перестраивает стеки. Есть ли способ заставить amplify предоставить ресурсы?

Комментарии:

1. Вы удалили ресурсы (например, таблицу базы данных и т.д.) Или что-то изменили в файлах стека? Вы можете детально проработать удаление стеков CloudFormation .

2. Спасибо за предложение, я отредактировал свой вопрос. Я удалил корневой стек с консоли. Насколько я могу видеть, все ресурсы (таблицы DynamoDB, ElasticSearch и т.д.) ушли за пределы сегментов S3, Которые все еще присутствуют.

3. Ваш случай похож на проблему здесь: github.com/aws-amplify/amplify-cli/issues/549 . Если вы согласны, вам может понадобиться amplify init скопировать первый из них amplify/#current-cloud-backend во вновь созданный backend файл.

4. Спасибо, что указали мне на проблему на github. Действительно, похоже на ту же проблему. К сожалению, предложенное решение не работает. Также немного неясно, в каком проекте мне следует попробовать amplify push . Независимо от этого, он выдает ошибку в старом проекте и не обнаруживает изменений в новом. Я попытаюсь более подробно разъяснить тему, которую вы предложили. Еще раз спасибо!

Ответ №1:

cli amplify проверяет разницу между amplify/#current-cloud-backend и amplify/backend папкой внутри вашего проекта. Он не проверяет, что в данный момент развернуто в облаке.

Поскольку вы удалили корневой стек, даже если в push были внесены какие-либо изменения, это приведет к сбою, поскольку стек отсутствует. Чтобы исправить эту ошибку, вы можете запустить amplify init и и, когда вас попросят, Do you want to use an existing environment? выбрать No . Это воссоздаст корневой стек и позволит вам внести изменения.

PS: Поддержка нескольких сред доступна в cli amplify версии 1 и выше. Если его команда предварительного v1 инициализации не сработает

Комментарии:

1. Спасибо за ваш пост. Я понимаю, что мне нужно запустить amplify init внутри папки приложения. На вопрос, должен ли я указать то же имя среды или что-то другое? Я использую версию 1.1.7, так что все должно быть в порядке.

2. При желании вы могли бы указать то же имя. Требуемое имя среды используется только с в файле projects amplify/team-provider-info.json . Убедитесь, что вы удалили <proj-root>/amplify папку перед запуском init

3. Еще раз спасибо, Яти. Я удалил /amplify папку, которая содержала #current-cloud-backend и backend папки. Затем внутри корневого каталога моего приложения я запустил, amplify init и это успешно воссоздало /amplify папку, которую я ранее удалил. Он также создал корневой стек. К сожалению, после запуска amplify init я получаю No changes detected сообщение. Я думаю, что откажусь от дальнейших попыток спасти этот проект. Еще раз большое спасибо за ваш вклад!

Ответ №2:

Похоже, что Amplify хранит информацию о том, что размещено в AWS, в amplify/team-provider-info.json . Внутри этого файла должен быть объект JSON с ключами, соответствующими именам вашей среды. Если вы оставите запись имени своей среды в этом файле и запустите amplify init , если вы используете то же имя среды, вы, скорее всего, увидите сбой.

Удалив среду, соответствующую той, которую вы удалили в AWS, amplify забудет о стеке CloudFormation этой среды. Теперь вы можете amplify init запустить их снова и успешно использовать то же имя среды.

Ответ №3:

Если вы удалите функцию или API, от которых зависят другие ресурсы, это может привести к сбою push. Итак, что я обычно делаю, это воссоздаю ту же функцию или API и запускаю ее снова. Это предварительный хак, который я использую, но я думаю, что мог бы быть лучший.

Ответ №4:

После многих исследований я нашел решение

Если вы удалили серверную часть вручную. вы можете создать их заново с помощью этой команды

amplify init --appId YOUR_APP_ID

Если у вас есть доступ к консоли AWS и вы можете видеть поле App ARN (в общих настройках), вы можете найти идентификатор приложения:

 arn:aws:amplify:eu-west-1:xxxxxxxxxx/APPID
  

Перед инициализацией необходимо удалить стеки

После этого просто запустите поток инициализации amplify, после этого он создаст серверную часть и все начнет сначала

И если вы хотите удалить это приложение, которое вы можете вызвать amplify delete в командной строке, оно будет удалено из облака и локально