Como criar recursos únicos temporários do terraform?

1

Eu pesquisei na lista de discussão e na documentação de como fazer isso, mas não consegui encontrar nada.

Aqui está o meu caso de uso: Eu tenho uma arquitetura bastante simples na AWS. Às vezes, quero testar coisas únicas, como se a configuração do grupo de segurança está correta.

Para fazer isso, giro duas instâncias. Como não gosto de clicar (e porque essas instâncias precisam ser configuradas em partes diferentes da VPC), defini essas em um arquivo terraform .tf .

Eu gostaria que essas duas instâncias fossem criadas somente quando eu explicitamente as exigisse. Em outras palavras, quando eu faço terraform apply , não quero que essas instâncias sejam criadas.

Aqui estão algumas coisas que eu tentei:

  • Coloque-os em um subdiretório temp e execute somente esse arquivo (por exemplo, com terraform plan -out=disposable.plan -target=temp/disposable.tf ). Problema: ele não detecta nenhuma alteração ("Nenhuma alteração. A infraestrutura está atualizada.").
  • Eu tentei outra coisa com um subdir (não me lembro exatamente do porquê), e terraform reclamou de variáveis e recursos indefinidos. Problema: Preciso acessar as variáveis e os recursos que defino no diretório principal (por exemplo, os IDs de sub-rede, grupos de segurança, etc.)
  • Tentei também aplicar o arquivo diretamente (não sei se isso deve funcionar) com terraform apply temp/disposable.tf . Problema: ele reclama que o arquivo não é válido com "não um arquivo de plano válido" (o arquivo é realmente válido).
  • Renomeie o arquivo para outra coisa, por exemplo .tf.temp e renomeie para .tf quando eu precisar do recurso. Isso funciona bem, mas você precisa lembrar de não cometer essa alteração. Eu preferiria algo que possa ser feito na linha de comando (por exemplo, executando um único arquivo .tf ).
por charlax 21.06.2018 / 08:53

1 resposta

2

Isso é possível usando a contagem e uma condicional :

Configure uma variável com um valor padrão de false em variables.tf :

variable temp_instances {
  default = false
}

Use isso ao definir suas instâncias definindo a propriedade count com uma condicional como esta:

resource "aws_instances" "temp1" {
  ...
  count = "${var.temp_instances ? 1 : 0}"
  ...
}

Como a variável é false por padrão, ela define a contagem como 0 e não cria a instância. Você pode, então, configurá-lo opcionalmente configurando essa variável como true durante um apply :

terraform apply -var 'temp_instances=true'

Usando a condição acima, isso agora será verdadeiro, portanto, defina a contagem como 1.

    
por 21.06.2018 / 15:55