Недавно я использовал генератор AWS IaC для импорта существующих ресурсов AWS в стек CFN. В настоящее время я пытаюсь использовать «cdkmigration», чтобы иметь возможность использовать CDK для управления уже существующим стеком.
Я успешно создал проект cdk, загрузил свою учетную запись, и когда я запускаю «cdk diff», я получаю вывод, указывающий, что мало что должно измениться. Однако в нем упоминается, что «не удалось создать набор изменений, различия будут основаны на различиях в шаблонах (запустите еще раз с -v, чтобы увидеть причину)»
Когда я запускаю «cdk Deploy» (или запускаю «cdk diff -v»), я получаю следующий вывод об ошибке:
MyStackName failed: Error [ValidationError]: Resources [SomeMemoryDbParameterGroup, (...)] passed in ResourceToImport are already in a stack and cannot be imported.
В настоящее время я подозреваю, что это каким-то образом связано с именованием ресурсов. Продолжая работу с приведенным выше примером ресурса, я вижу в своем коде cdk следующее:
const memDbParamGroup = new memorydb.CfnParameterGroup(this, 'SomeMemoryDbParameterGroup', {
parameterGroupName: 'pgName',
family: 'family',
description: 'Description goes here',
});
memDbParamGroup.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.RETAIN;
memDbParamGroup.cfnOptions.updateReplacePolicy = cdk.CfnDeletionPolicy.RETAIN;
И я вижу следующее в сгенерированном файле шаблона в каталоге «cdk.out»:
"SomeMemoryDbParameterGroup": {
"Type": "AWS::MemoryDB::ParameterGroup",
"Properties": {
"Description": "Description goes here",
"Family": "family",
"ParameterGroupName": "pgName"
},
"UpdateReplacePolicy": "Retain",
"DeletionPolicy": "Retain",
"Metadata": {
"aws:cdk:path": "MyStackName/SomeMemoryDbParameterGroup"
}
}
И следующее в шаблоне для моего существующего стека:
SomeMemoryDbParameterGroup:
Type: "AWS::MemoryDB::ParameterGroup"
Properties:
Description: "Description goes here"
Family: "family"
ParameterGroupName: "pgName"
UpdateReplacePolicy: "Retain"
DeletionPolicy: "Retain"
Я надеюсь, что смогу развернуть свой код cdk и управлять этими ресурсами в cdk в будущем БЕЗ их удаления и повторного создания. Я нашел несколько решений, которые, казалось бы, заставят развертывание работать, но все они, похоже, предполагают удаление и воссоздание ресурсов (и, таким образом, потерю данных о состоянии).
Обновление для всех, кто найдет это позже: изначально я выполнил миграцию с помощью --from-path после загрузки файла шаблона для моего существующего стека. Кажется, у него правильное имя стека, но по какой-то причине он все еще пытается создать новый стек.
Я решил проблему, вернувшись и повторно мигрировав с помощью --from-stack, который работал отлично.