| layout | heroku |
|---|---|
| page_title | Heroku: Upgrading the Provider |
| sidebar_current | docs-heroku-guides-upgrading |
| description | Guide to upgrading through major versions. |
~> Major upgrades should be tested with non-critical infrastructure.
The heroku_app resource id is automatically migrated to contain the app ID (UUID). This means when you reference heroku_app.example.id, the UUID is returned, whereas previously this id attribute actually contained the app name (surprise!)
All other resources' heroku_app reference attributes are now named app_id. They only accept UUID values, such as from heroku_app.example.id.
All previous app attribute values are automatically migrated to app_id, performing app lookups to replace names with UUIDs.
Before running terraform apply using the new provider version, some manual HCL configuration updates are required:
Their existing references to heroku_app.example.name must be simultaneously updated to heroku_app.example.id.
Previous v4 config example:
resource "heroku_addon" "example" {
app = heroku_app.example.name
plan = "example-plan"
}Upgraded v5 config example:
resource "heroku_addon" "example" {
app_id = heroku_app.example.id
plan = "example-plan"
}The app data source id attribute now contains the app UUID, not the app name. As long as id is used for app_id references, then no further configuration changes are required. Setting app_id references from name is no longer allowed, and must be updated to id, like data.heroku_app.example.id.
Run terraform apply to verify the migration is complete.
No changes. Your infrastructure matches the configuration.
Upon the first apply on this new provider version, the state will be automatically updated to contain only UUID-based id for app. You may see some changes detected, but they should not result in infrastructure changes.
heroku_app.example: Refreshing state... [id=c92d7139-ec41-4088-a71d-3a6dfef99f83]
heroku_addon.example: Refreshing state... [id=41acf474-1b0e-4f53-960f-ca51095b84d7]
Note: Objects have changed outside of Terraform
Terraform detected the following changes made outside of Terraform since the last "terraform apply":
# heroku_addon.example has been changed
~ resource "heroku_addon" "example" {
+ app_id = "c92d7139-ec41-4088-a71d-3a6dfef99f83"
id = "41acf474-1b0e-4f53-960f-ca51095b84d7"
# (5 unchanged attributes hidden)
}
…
No changes. Your infrastructure matches the configuration.
Once this completes, the state will be migrated! ✅😄
Specific errors about app & app_id should describe configuration problems, such as:
│ Error: Missing required argument
│
│ on main.tf line 19, in resource "heroku_addon" "example":
│ 19: resource "heroku_addon" "example" {
│
│ The argument "app_id" is required, but no definition was found.
│ Error: Unsupported argument
│
│ on main.tf line 20, in resource "heroku_addon" "example":
│ 20: app = heroku_app.example.id
│
│ An argument named "app" is not expected here.
If it reflects that other changes are detected, possible explanations are:
- missed updating a
heroku_appreference fromnametoid - infrastructure did change somehow during your work (not related to this migration)
- possibly found a bug in the migration strategy, so please create an issue on GitHub.