結論としては、dashboard_json.gridLayout.columns
を string で指定しないといけないところ、 int (number) で指定していたことが原因でした。
型が間違っていると常に差分として検出されてしまうようで、以下のような差分をよく見ると、型がずれているのがわかります。
# google_monitoring_dashboard.monitoring_dashboard (monitoring_dashboard) will be updated in-place ~ resource "google_monitoring_dashboard" "monitoring_dashboard" { ~ dashboard_json = jsonencode( ~ { - etag = "XXXXXXXXXX" ~ gridLayout = { ~ columns = "2" -> 2 # (1 unchanged attribute hidden) } - name = "projects/XXXXXXXX/dashboards/XXXXXXXX" # (1 unchanged attribute hidden) } ) id = "projects/XXXXXXXX/dashboards/XXXXXXXX" # (1 unchanged attribute hidden) }
参考: https://github.com/hashicorp/terraform-provider-google/issues/7242