Os documentos do Terraform, por algum motivo estranho, não explicam o que significa "Error: Cycle". Procurei em todos os lugares, mas não há menção disso nos documentos oficiais. (Acontece que é um termo bem conhecido, uma dependência circular, que alguém aparentemente renomeou pensando que faria parecer legal ...)
Como parte do trabalho do Terraform, ele analisa as dependências entre seus
resource
blocos,data
blocos e outras construções de configuração para determinar uma ordem adequada para processá-los para que os dados de entrada necessários estejam disponíveis.Por exemplo, considere a seguinte configuração simples planejada:
O Terraform analisará o que foi dito acima e perceberá que a configuração de
null_resource.bar
contém uma referência anull_resource.foo
e, portanto, as operações relacionadas anull_resource.foo
devem ocorrer antesnull_resource.bar
. Podemos visualizar isso como um gráfico onde uma seta representa "deve acontecer depois" ou "depende de":null_resource.bar
devem ocorrer após as operações paranull_resource.foo
.Considere agora o que acontece se modificarmos essa configuração assim:
Agora
null_resource.foo
também se refere anull_resource.bar
. Existem agora duas relações "deve acontecer depois" implícitas nessa configuração:null_resource.bar
devem ocorrer após as operações paranull_resource.foo
.null_resource.foo
devem ocorrer após as operações paranull_resource.bar
.As duas declarações acima se contradizem:
null_resource.bar
não podem ser processadas antes e depois denull_resource.foo
. O Terraform responderá a essa situação relatando um ciclo de dependência, usando a mensagem de erro que você viu:Quando o Terraform retorna esse erro, a solução é remover pelo menos uma das setas "deve acontecer depois" (dependências) da configuração para que não seja mais contraditória. Sem ver sua configuração, não posso sugerir qual alteração específica pode alcançar isso no seu caso, mas é provável que em algum lugar em sua configuração você tenha dois recursos mutuamente dependentes como este, ou talvez um recurso referente a si mesmo.
Se você estiver avistado, dependendo de quão complicada seja sua configuração, pode ser útil pedir ao Terraform para produzir um gráfico semelhante aos que incluí acima nesta resposta, mas destacando os ciclos. Para fazer isso, você pode usar o
terraform graph
comando , assim:A saída deste comando é uma descrição do gráfico no formato aceito pelo Graphviz . Se você não tiver o Graphviz instalado em seu computador local, poderá copiar e colar a saída no Graphviz Online para produzir uma imagem de gráfico. O
-draw-cycles
comando faz com que o Terraform marque as setas relacionadas ao ciclo que está sendo relatado usando a cor vermelha. Se você não conseguir distinguir visualmente o vermelho do preto, talvez queira primeiro editar o código Graphviz gerado para substituirred
por alguma outra cor que você possa distinguir.A visualização do gráfico da configuração tende a se tornar inutilizável para configurações não triviais, pois existem muitos gráficos e arestas, portanto, se sua configuração tiver muitos objetos, talvez seja melhor seguir as dependências pela própria configuração.