奇妙な理由によるTerraformドキュメントでは、「エラー:サイクル」の意味が説明されていません。私は至る所を見てきましたが、公式ドキュメントにはそれについての言及はありません。
Terraformの作業の一部として、resource
ブロック、data
ブロック、およびその他の構成コンストラクト間の依存関係を分析して、必要な入力データが得られるようにそれらを処理する適切な順序を決定します利用可能です。
たとえば、次の工夫された単純な構成を考えてみます。
resource "null_resource" "foo" {
}
resource "null_resource" "bar" {
triggers = {
foo = null_resource.foo.id
}
}
Terraformは上記を分析し、null_resource.bar
の構成にnull_resource.foo
への参照が含まれているため、null_resource.foo
に関連する操作はnull_resource.bar
の前に実行する必要があります。これを、矢印が「後に発生する必要がある」または「依存する」を表すグラフとして視覚化できます。
null_resource.bar
の演算は、null_resource.foo
の演算の後に発生する必要があります。この構成を次のように変更するとどうなるかを考えてみましょう。
resource "null_resource" "foo" {
triggers = {
bar = null_resource.bar.id
}
}
resource "null_resource" "bar" {
triggers = {
foo = null_resource.foo.id
}
}
現在、null_resource.foo
はnull_resource.bar
も参照しています。この構成により、次の2つの「後に発生する必要がある」関係が示されます。
null_resource.bar
の演算は、null_resource.foo
の演算の後に発生する必要があります。null_resource.foo
の演算は、null_resource.bar
の演算の後に発生する必要があります。上記の2つのステートメントは互いに矛盾します。null_resource.bar
は、の前とnull_resource.foo
の後のの両方で処理できません。Terraformは、表示されたエラーメッセージを使用して依存サイクルを報告することにより、この状況に応答します。
Cycle: null_resource.foo, null_resource.bar
Terraformがこのエラーを返す場合の解決策は、構成から「後に発生する必要がある」矢印(依存関係)の少なくとも1つを削除して、矛盾がなくなるようにすることです。あなたの設定を見なければ、私はあなたのケースでそれを達成するかもしれない特定の変更を提案することはできませんが、あなたの設定のどこかに、このような相互依存する2つのリソース、またはおそらくそれ自身を参照するリソースがある可能性があります。
目撃された場合、構成の複雑さによっては、Terraformに、上記の回答に含めたものと同様のグラフを作成するよう依頼するのに役立つかもしれませんが、サイクルを強調しています。これを行うには、次のように terraform graph
コマンド を使用できます。
terraform graph -draw-cycles
このコマンドの出力は、 Graphviz で受け入れられる形式のグラフの説明です。ローカルコンピューターにGraphvizがインストールされていない場合は、代わりに出力を Graphviz Online にコピーアンドペーストして、グラフイメージを作成できます。 -draw-cycles
コマンドを使用すると、Terraformは報告されているサイクルに関連する矢印を赤でマークします。赤と黒を視覚的に区別できない場合は、最初に生成されたGraphvizコードを編集して、red
を区別できる他の色に置き換えます。
グラフとエッジが非常に多いため、構成のグラフの視覚化は重要な構成では使用できなくなる傾向があります。そのため、構成に多くのオブジェクトがある場合は、構成自体を通じて依存関係を追跡する方がよい場合があります。