Cycleエラーが出たときの対処法を残しておきます
$ terraform apply -auto-approve
Error: Error asking for user input: 1 error(s) occurred:
* Cycle: module.create_delivery_func.data.aws_region.dst, module.create_delivery_func.provider.aws.dst
グラフコマンド
Terraformにはgraph commandというTerraformの構成をグラフにおこすコマンドが用意されているのでこれを使って原因の特定を行います。
オプションに-draw-cyclesというグラフの任意のサイクルを色付きのエッジでハイライトしてくれるCycleエラーを診断する用途にぴったりのオプションがあるのでこちらを使います。
コマンド実行
ではコマンドを実行してみましょう!ポチッとな!
$ terraform graph -draw-cycles | dot -Tpng > graph.png
...ひえ
グラフの任意のサイクルを色付きのエッジでハイライトしてくれる
とのことなので該当箇所だけ見てみましょう(全部みてられない...
原因
図を見た感じproviderとdata.aws_regionで双方向の参照が起きているようです
provider "aws" {
alias = "dst"
region = "${data.aws_region.dst.name}"
}
data "aws_region" "dst" {
provider = "aws.dst"
current = true
}
コードを見た感じ、、、おかしいですね、、、
とりあえずproviderのregionをus-east-1にしてみるとエラーが解決しましたー ![]()
![]()
まとめ
今回の例はグラフを使わなくても解決できるレベルでしたが、複雑な問題のときにはグラフコマンドは重宝するのでよかったら使ってみましょう

