Terraform ApplyでCost Explorer APIのRate Limitに引っかかったら
エラー内容
コスト配分タグごとのコスト異常検知を行うために、90個程度一度にリソースをTerraformで作成してApplyしようとしたら、以下のようなエラーが発生して、Applyが正常に完了できなかった
│ Error: listing tags for CE (Cost Explorer) Anomaly Monitor (arn:aws:ce::1234567890:anomalymonitor/57314eba-1081-487d-9d71-487fe8cf91fb): LimitExceededException: Rate limit exceeded
│
│ with aws_ce_anomaly_monitor.cost_allocation_tag_a,
│ on cost_anomaly_detection.tf line 183, in resource "aws_ce_anomaly_monitor" "cost_allocation_tag_a":
│ 183: resource "aws_ce_anomaly_monitor" "cost_allocation_tag_a" {
│
LimitExceededException: Rate limit exceeded
Cost Explorer APIのRate Limitに引っかかってしまった模様
解決法
-refresh=false
オプションをつけてApply実行する
terraform apply -refresh=false
Terraformで一度に大量のリソースを変更する場合にどうするべきか調査してたところ以下の議論に辿り着いた。
-refresh=false
オプションは、tfstateファイルに記録された内容との差分だけを見てPlan/Applyを実行するため、ドリフトを検知しない
解決できたとはいえ、今後Plan/Apply実行時に毎回 -refresh=false
オプションつけないとダメになるのでなんか微妙な気がしている
他に試したこと
-prallelism
オプションを指定して並列の処理数を少なくした
APIのRate Limit に引っかからないように 何度か試したら稀にうまくいく時もあったが、全然安定しなかったためボツ
そもそも-prallelism
オプションはそういう用途ではないっぽい。色々試した後に公式Docに書いてあった
Note that some providers (AWS, for example), handle API rate limiting issues at a lower level by implementing graceful backoff/retry in their respective API clients. For this reason, Terraform does not use this parallelism feature to address API rate limits directly.
Discussion