Como posso reutilizar recursos existentes no CloudFormation?

29

Eu tenho o bucket do S3 como recurso no meu modelo do CloudFormation. Com DeletionPolicy definido como Retain . Isso funciona como esperado, ao excluir a pilha, ele retém o depósito. No entanto, quando tento criar a pilha novamente, a criação falha ao tentar criar o mesmo bucket novamente, com uma mensagem de erro reclamando que ela já existe.

O que preciso adicionar ao meu modelo CloudFormation para que não tente recriar um recurso que já existe?

O fragmento relevante do meu modelo é o seguinte:

  "Resources": {
    "SomeS3Bucket" : {
      "Type" : "AWS::S3::Bucket",
      "DeletionPolicy" : "Retain",
      "Properties": {
          "BucketName": "SomeS3Bucket"
          }
      }
    
por vartec 04.04.2014 / 14:24

3 respostas

14

Uma abordagem é adicionar um parâmetro de entrada ao modelo do CloudFormation para indicar que um intervalo existente deve ser usado.

Use cláusulas de condição no modelo para criar o bloco somente se o parâmetro indicar que é necessário.

    
por 04.04.2014 / 19:11
7

O CloudFormation usa tags com o prefixo "aws:" para acompanhar quais recursos estão associados a quais entradas em quais pilhas - esse é o estado "ao vivo" que ele usa para comparar com um modelo antes de decidir o que adicionar / excluir / atualização.

Como usuário, você não pode adicionar, editar ou excluir essas tags.

Portanto, se os recursos existentes não tiverem essas tags ou não tiverem os valores corretos para essas tags, elas não serão consideradas parte da nova pilha, e não vejo uma maneira de alterar isso .

    
por 08.01.2015 / 21:00
2

Estou tentando automatizar isso também, pois parece que não pode ser feito apenas com o modelo Cloudformation. O processo em que estou pensando seria:

  1. crie outro intervalo temporário temp-$originalbucketname
  2. copie todo o conteúdo de um grupo para outro para economizar tempo
  3. remova todo o conteúdo de $originalbucketname
  4. remover $ originalbucketname agora que está vazio
  5. crie a pilha do Cloudformation (que irá recriar o bloco)
  6. copie o conteúdo de volta
  7. remover temp-$originalbucketname

Esse é um processo muito complicado, dependendo do tamanho do bucket que pode levar horas, já que a maioria das etapas é O (n) com o número de chaves.

Você poderia pensar que o Cloudformation é a camada básica de automação da AWS, mas eu acho que é apenas um monstro (bastante limitado) reunindo APIs bizantinas para todos os seus serviços.

    
por 14.03.2017 / 14:56