Criar uma pilha com recursos existentes - AWS CloudFormation

Criar uma pilha com recursos existentes

Durante esta operação de importação, você precisará fornecer o seguinte.

  • Um modelo que descreve os recursos que estarão na nova pilha e as configurações do recurso. Todos os recursos no modelo devem ter um atributo DeletionPolicy.

  • Um identificador exclusivo para cada recurso de destino. Consulte o console de serviço apropriado para obter identificadores exclusivos.

Neste passo a passo, fornecemos o modelo de exemplo a seguir, chamadoTemplateToImport.json. ServiceTableeGamesTable são os destinos da importação.

{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Import test", "Resources": { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "DeletionPolicy": "Retain", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "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" } ], "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 1 } } } } }

Crie uma pilha a partir de recursos existentes usando oAWS Management Console

  1. Faça login no AWS Management Console e abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation.

  2. Na página Stacks (Pilhas), escolha Create stack (Criar pilha) e With existing resources (import resources) (Com recursos existentes (importar recursos)).

    
                            A opção Criar pilha com recursos existentes no console.
  3. Leia a página Import overview (Visão geral da importação) para obter uma lista de itens que você deve fornecer durante esta operação. Em seguida, selecione Next (Próximo).

  4. Na página Specify template (Especificar modelo), forneça o modelo usando um dos métodos a seguir e escolha Next (Próximo).

    • 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.

  5. Na página Identify resources (Identificar recursos), identifique todos os recursos de destino.

    1. Em Identifier property (Propriedade do identificador), escolha o tipo de identificador do recurso. Por exemplo, o recurso AWS::DynamoDB::Table pode ser identificado usando a propriedade TableName.

    2. Em Identifier value (Valor do identificador), digite o valor real da propriedade. Por exemplo, o TableName para o recurso GamesTable no modelo de exemplo é Games.

      
                                    A página Identificar recursos no console.
    3. Escolha Next (Próximo).

  6. Na página Specify stack details (Especificar detalhes da pilha), modifique os parâmetros e escolha Next (Próximo). Isso cria automaticamente um conjunto de alterações.

    Importante

    A operação de importação falhará se você modificar os parâmetros existentes que iniciam uma operação de criação, atualização ou exclusão.

  7. Na página Review stack-name (Revisar stack-name), confirme se os recursos corretos estão sendo importados e escolha Import resources (Importar recursos). Isso executa automaticamente o conjunto de alterações criado na última etapa.

    O painel Events (Eventos) da página Stack details (Detalhes da pilha) da nova pilha é exibido.

    
                            A guia Eventos no console.
  8. (Opcional) Execute a detecção de desvios na pilha para garantir que o modelo e a configuração real dos recursos importados sejam correspondentes. Para obter mais informações sobre como detectar um desvio, consulte Detectar desvios em uma pilha inteira do CloudFormation.

  9. (Opcional) Se os recursos importados não corresponderem às configurações de modelo esperadas, corrija as configurações do modelo ou atualize diretamente os recursos. Nesta demonstração, corrigimos as configurações do modelo para corresponder às configurações reais.

    1. Reverter a operação de importação para os recursos afetados.

    2. Adicione os destinos de importação ao modelo novamente, garantindo que as configurações do modelo correspondam às configurações atuais.

    3. Repita as etapas 2 – 8 usando o modelo modificado para importar os recursos novamente.

Criar uma pilha com recursos existentes usando a AWS CLI

  1. Abra a AWS CLI.

  2. Como alternativa, execute GetTemplateSummary para saber quais propriedades identificam cada tipo de recurso no modelo. Por exemplo, o recurso AWS::DynamoDB::Table pode ser identificado usando a propriedade TableName. Para o recurso GamesTable no modelo de exemplo, o valor de TableName é Games.

    > aws cloudformation get-template-summary --template-url https://DOC-EXAMPLE-BUCKET.s3.us-west-2.amazonaws.com/TemplateToImport.json
  3. Componha uma lista dos recursos de destino do modelo e os respectivos identificadores exclusivos no formato a seguir.

    [{\"ResourceType\":\"AWS::DynamoDB::Table\",\"LogicalResourceId\":\"GamesTable\",\"ResourceIdentifier\":{\"TableName\":\"Games\"}}]
  4. Crie um conjunto de alterações do tipoIMPORT com os parâmetros a seguir. --resources-to-importnão oferece suporte a YAML em linha.

    > aws cloudformation create-change-set --stack-name TargetStack --change-set-name ImportChangeSet --change-set-type IMPORT --resources-to-import "[{\"ResourceType\":\"AWS::DynamoDB::Table\",\"LogicalResourceId\":\"GamesTable\",\"ResourceIdentifier\":{\"TableName\":\"Games\"}},{\"ResourceType\":\"AWS::DynamoDB::Table\",\"LogicalResourceId\":\"ServiceTable\",\"ResourceIdentifier\":{\"TableName\":\"Service\"}}]" --template-url https://DOC-EXAMPLE-BUCKET.s3.us-west-2.amazonaws.com/TemplateToImport.json

    A AWS CLI também oferece suporte a arquivos de texto como entrada para o parâmetro --resources-to-import, conforme exibido no exemplo a seguir.

    --resources-to-import file://ResourcesToImport.txt

    Neste passo a passo,file://ResourcesToImport.txt tem o conteúdo a seguir.

    [ { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"GamesTable", "ResourceIdentifier": { "TableName":"Games" } }, { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"ServiceTable", "ResourceIdentifier": { "TableName":"Service" } } ]
  5. Revise o conjunto de alterações para garantir que os recursos corretos sejam importados.

    > aws cloudformation describe-change-set --change-set-name ImportChangeSet --stack-name TargetStack
  6. Execute o conjunto de alterações para importar os recursos. Após a conclusão bem-sucedida da operação (IMPORT_COMPLETE), os recursos são importados com êxito.

    > aws cloudformation execute-change-set --change-set-name ImportChangeSet --stack-name TargetStack
  7. (Opcional) Execute a detecção de desvios na pilha IMPORT_COMPLETE para garantir que o modelo e a configuração real dos recursos importados sejam correspondentes. Para saber mais sobre a detecção de desvios, consulte Detectar desvios em uma pilha inteira do CloudFormation.

    > aws cloudformation detect-stack-drift --stack-name TargetStack { "Stack-Drift-Detection-Id" : "624af370-311a-11e8-b6b7-500cexample" } > aws cloudformation describe-stack-drift-detection-status --stack-drift-detection-id 624af370-311a-11e8-b6b7-500cexample > aws cloudformation describe-stack-resource-drifts --stack-name TargetStack
  8. (Opcional) Se os recursos importados não corresponderem às configurações de modelo esperadas, corrija as configurações do modelo ou atualize diretamente os recursos. Nesta demonstração, corrigimos as configurações do modelo para corresponder às configurações reais.

    1. Reverter a operação de importação para os recursos afetados.

    2. Adicione os destinos de importação ao modelo novamente, garantindo que as configurações do modelo correspondam às configurações atuais.

    3. Repita as etapas 4 – 7 usando o modelo modificado para importar os recursos novamente.