В AWS Cloudformation есть специальные ресурсы, которые не могут быть обновлены напрямую. Вместо этого они заменяются командой aws cloudformation update-stack
. Это прекрасно работает, если вы не хотите сохранять эти ресурсы после обновления.
В моем примере я хочу сохранить все обновленные версии ресурсов AWS::AutoScaling::LaunchConfiguration
для ручного переключения LaunchConfigurations в AutoScalingGroup (для целей тестирования или аварийного отката). Я должен сделать это, потому что пользователи веб-интерфейса не могут использовать Cloudformation, и при этом они не уполномочены сделать это.
Итак, я создал шаблон, который создает / обновляет ресурс LaunchConfiguration, устанавливая пользовательский LaunchConfigurationName
с включением текущей даты / времени.
Это работает хорошо, но:
после состояния UPDATE_COMPLETE_CLEANUP_IN_PROGRESS
старая версия ресурса AWS::AutoScaling::LaunchConfiguration
всегда удаляется. Чтобы избежать этого, я попытался настроить политику набора стека:
{
"Statement" : [
{
"Effect" : "Allow",
"Action" : "Update:*",
"Principal": "*",
"Resource" : "*"
},
{
"Effect" : "Deny",
"Action" : "Update:Delete",
"Principal" : "*",
"Resource" : "*",
"Condition" : {
"StringEquals" : {
"ResourceType" : ["AWS::AutoScaling::LaunchConfiguration"]
}
}
}
]
}
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html
Update:Delete
Specifies update actions during which resources are removed.
Updates that completely remove resources from a stack template require this action.
результат: ресурс по-прежнему удаляется после обновления AutoScalingGroup (состояние UPDATE_COMPLETE_CLEANUP_IN_PROGRESS
).
У вас есть идея, как сохранить старые версии?