Pode haver casos em que a configuração de um recurso tenha se desviado da configuração pretendida e você queira aceitar a nova configuração como a configuração pretendida. Na maioria dos casos, você resolveria os resultados do desvio atualizando a definição de recurso no modelo de pilha com uma nova configuração e, depois, executaria uma atualização de pilha. No entanto, se a nova configuração atualizar uma propriedade de recurso que exija substituição, o recurso será recriado durante a atualização da pilha. Se desejar reter o recurso existente, você poderá usar a importação de recursos para atualizar o recurso e resolver os resultados de desvio sem substituí-lo.
Resolver o desvio de um recurso por meio de uma operação de importação consiste nas seguintes etapas básicas:
-
Adicione um atributo DeletionPolicy, definido como Retain, ao recurso. Isso garante que o recurso existente seja retido em vez de excluído quando ele é removido da pilha.
-
Remova o recurso do modelo e execute uma operação de atualização de pilha. Isso remove o recurso da pilha, mas não o exclui.
-
Descreva o estado real do recurso no modelo de pilha e, depois, importe o recurso existente de volta para a pilha. Isso adiciona o recurso de volta à pilha e resolve as diferenças de propriedade que estavam causando os resultados de desvio.
Para obter mais informações sobre importação de recursos, consulte Importe recursos da AWS para uma pilha do CloudFormation com uma importação de recursos. Para obter uma lista recursos que oferecem suporte à importação, consulte Suporte a tipos de recursos.
Neste exemplo, usamos o seguinte modelo, chamado templateToImport.json
.
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Import test",
"Resources": {
"ServiceTable":{
"Type":"AWS::DynamoDB::Table",
"Properties":{
"TableName":"Service",
"AttributeDefinitions":[
{
"AttributeName":"key",
"AttributeType":"S"
}
],
"KeySchema":[
{
"AttributeName":"key",
"KeyType":"HASH"
}
],
"BillingMode": "PROVISIONED",
"ProvisionedThroughput":{
"ReadCapacityUnits":5,
"WriteCapacityUnits":1
}
}
},
"GamesTable": {
"Type": "AWS::DynamoDB::Table",
"Properties": {
"TableName": "Games",
"AttributeDefinitions": [
{
"AttributeName": "key",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "key",
"KeyType": "HASH"
}
],
"BillingMode": "PROVISIONED",
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 1
}
}
}
}
}
Neste exemplo, vamos supor que um usuário alterou um recurso fora do CloudFormation. Depois de executar a detecção de desvios, descobrimos que GamesTable
foi modificado BillingMode
para PAY_PER_REQUEST
. Para obter mais informações sobre a detecção de desvios, consulte Detectar alterações de configuração não gerenciadas em pilhas e recursos com detecção de desvios.

Nossa pilha agora está desatualizada, nossos recursos estão ativos, mas queremos preservar a configuração de recursos pretendida. Podemos fazer isso resolvendo o desvio com uma operação de importação, sem interromper os serviços.
Resolver desvio com uma operação de importação usando o console do CloudFormation
Etapa 1. Atualizar pilha com a política de exclusão Retain
Para atualizar a pilha usando um atributo DeletionPolicy
com a opção Retain
Faça login no AWS Management Console e abra o console AWS CloudFormation em https://console.aws.amazon.com/cloudformation
. -
Na página Pilhas escolha a pilha com desvio.
-
Escolha Atualizar, e, depois, selecione Substituir modelo atual no painel de detalhes da pilha.
-
Na página Especificar modelo forneça o modelo atualizado que contém o atributo
DeletionPolicy
com a opçãoRetain
usando um dos seguintes métodos:-
Escolha Amazon S3 URL (URL do Amazon S3) e especifique o URL do modelo na caixa de texto.
-
Escolha Upload a template file (Fazer upload de um arquivo de modelo) e procure o arquivo de modelo.
Em seguida, escolha Próximo.
-
-
Revise a página Especificar detalhes da pilha e escolha Próximo.
-
Revise a página Configurar opções de pilha e escolha Próximo.
-
Na página Revisar
nome da pilha
, escolha Atualizar pilha.
Resultados: na página Eventos da sua pilha, o status é UPDATE_COMPLETE
.
Para resolver o desvio com uma operação de importação, sem interromper os serviços, especifique uma Retain
DeletionPolicy para os recursos que você deseja remover da pilha. Neste exemplo, adicionamos um atributo DeletionPolicy definido como Retain
, ao recurso GamesTable
.
"GamesTable": {
"Type": "AWS::DynamoDB::Table",
"DeletionPolicy": "Retain",
"Properties": {
"TableName": "Games",
Etapa 2. Remover recursos com desvio, parâmetros relacionados e saídas
Como remover recursos com desvio, parâmetros relacionados e saídas
-
Escolha Atualizar, e, depois, selecione Substituir modelo atual no painel de detalhes da pilha.
-
Na página Especificar modelo, forneça ao modelo atualizado seus recursos, parâmetros relacionados e saídas removidas do modelo de pilha usando um dos seguintes métodos:
-
Escolha Amazon S3 URL (URL do Amazon S3) e especifique o URL do modelo na caixa de texto.
-
Escolha Upload a template file (Fazer upload de um arquivo de modelo) e procure o arquivo de modelo.
Em seguida, escolha Próximo.
-
-
Revise a página Especificar detalhes da pilha e escolha Próximo.
-
Revise a página Configurar opções de pilha e escolha Próximo.
-
Na página Revisar
nome da pilha
, escolha Atualizar pilha.
Resultados: o ID Lógico GamesTable
tem o status DELETE_SKIPPED
na página Eventos da sua pilha.
Aguarde até que o CloudFormation conclua a operação de atualização da pilha. Após a conclusão da operação de atualização da pilha, remova o recurso, os parâmetros relacionados e as saídas do modelo de pilha. Depois, importe o modelo atualizado. Depois de concluir essas ações, o modelo demonstrativo agora se parece com o seguinte.
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Import test",
"Resources": {
"ServiceTable":{
"Type":"AWS::DynamoDB::Table",
"Properties":{
"TableName":"Service",
"AttributeDefinitions":[
{
"AttributeName":"key",
"AttributeType":"S"
}
],
"KeySchema":[
{
"AttributeName":"key",
"KeyType":"HASH"
}
],
"BillingMode": "PROVISIONED",
"ProvisionedThroughput":{
"ReadCapacityUnits":5,
"WriteCapacityUnits":1
}
}
}
}
}
Etapa 3. Atualizar modelo para corresponder ao estado ativo dos seus recursos
Como atualizar o modelo para corresponder ao estado ativo dos recursos
-
Para importar o modelo atualizado, escolha Ações da pilha e, depois, escolha Importar recursos para a pilha.
-
Leia a página Visão geral da importação para obter uma lista de itens a serem fornecidos durante esta operação, e, depois, escolha Próximo.
-
Na páginaEspecificar modelo, forneça o modelo atualizado usando um dos seguintes métodos:
-
Escolha Amazon S3 URL (URL do Amazon S3) e especifique o URL do modelo na caixa de texto.
-
Escolha Upload a template file (Fazer upload de um arquivo de modelo) e procure o arquivo de modelo.
Em seguida, escolha Próximo.
-
-
Na página Identify resources (Identificar recursos), identifique todos os recursos de destino. Para ter mais informações, consulte Identificadores de recursos.
-
Em Identifier property (Propriedade do identificador), escolha o tipo de identificador do recurso. Por exemplo, a propriedade
TableName
identifica o recursoAWS::DynamoDB::Table
. -
Em Valor do identificador, digite o valor real da propriedade. No modelo demonstrativo, o
TableName
para o recursoGamesTable
éGames
. -
Escolha Próximo.
-
-
Revise a página Especificar detalhes da pilha e escolha Próximo.
-
Na página Visão geral da importação, revise os recursos que estão sendo importados e escolha Importar recursos. Isso importará o tipo de recurso
AWS::DynamoDB::Table
de volta para sua pilha.
Resultados: neste exemplo, resolvemos o desvio de recursos com uma operação de importação, sem interromper os serviços. É possível verificar o andamento de uma ação de importação no console do CloudFormation na guia Eventos. Os recursos importados terão o status IMPORT_COMPLETE
seguido pelo status CREATE_COMPLETE
com Importação de recursos concluída como o motivo do status.
Aguarde até que o CloudFormation conclua a operação de atualização da pilha. Depois que a operação de atualização da pilha for concluída, atualize seu modelo para corresponder ao estado real e com desvio de seus recursos. Por exemplo, o BillingMode
será definido como PAY_PER_REQUEST
e ReadCapacityUnits
e WriteCapacityUnits
serão definidos como 0
.
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Import test",
"Resources": {
"ServiceTable":{
"Type":"AWS::DynamoDB::Table",
"Properties":{
"TableName":"Service",
"AttributeDefinitions":[
{
"AttributeName":"key",
"AttributeType":"S"
}
],
"KeySchema":[
{
"AttributeName":"key",
"KeyType":"HASH"
}
],
"BillingMode": "PROVISIONED",
"ProvisionedThroughput":{
"ReadCapacityUnits":5,
"WriteCapacityUnits":1
}
}
},
"GamesTable": {
"Type": "AWS::DynamoDB::Table",
"DeletionPolicy": "Retain",
"Properties": {
"TableName": "Games",
"AttributeDefinitions": [
{
"AttributeName": "key",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "key",
"KeyType": "HASH"
}
],
"BillingMode": "PAY_PER_REQUEST",
"ProvisionedThroughput": {
"ReadCapacityUnits": 0,
"WriteCapacityUnits": 0
}
}
}
}
}