Por exemplo, instâncias do EC2 com backup de loja, um truque é adicionar um comentário ao script de dados do usuário contendo um número de versão, data ou similar e, em seguida, alterá-lo sempre que desejar que a instância seja recriada:
{
"Resources" : {
"MyEC2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
// ... other properties ...
"UserData": {
"Fn::Base64" : {
"Fn::Join" : [ ":", [
"#!/bin/bash\n",
"# Version: 1.0\n",
// ... rest of user data ...
]]}
}
}
}
}
Qualquer alteração em UserData
fará com que a instância seja substituída (ou seja, regenerada). O comportamento do script de dados do usuário deve ser o mesmo, no entanto, já que a única modificação é um comentário. Observe que isso não funciona para instâncias apoiadas pelo EBS.
Para o RDS, você pode fazer um instantâneo de banco de dados da instância atual do RDS, em seguida, modifique seu modelo para usar esse instantâneo com DBSnapshotIdentifier
:
{
"Resources" : {
"MyDB" : {
"Type" : "AWS::RDS::DBInstance",
"Properties" : {
// ... other properties ...
"DBSnapshotIdentifier": "<db snapshot ID>"
}
}
}
Sempre que DBSnapshotIdentifier
for alterado, a instância do banco de dados será substituída. O uso de instantâneos também permitirá que você mantenha os dados de quando a captura instantânea foi feita. (Se você quiser limpar os dados, poderá criar um instantâneo vazio e passá-lo como entrada. Ou excluir e recriar toda a pilha do CloudFormation.)
Uma abordagem mais genérica é alterar o nome lógico do recurso. De Modificando um modelo de pilha no CloudFormation docs:
For most resources, changing the logical name of a resource is equivalent to deleting that resource and replacing it with a new one. Any other resources that depend on the renamed resource also need to be updated and might cause them to be replaced. Other resources require you to update a property (not just the logical name) in order to trigger an update.