Доволі часта помилка при апгрейді версій модулів, коли маємо обмеження на версії модулів чи провайдерів, і вони не співпадають між собою.
Зміст
The Issue
В цьому випадку я змержив Pull Requests від Renovate і не звернув увагу на те, що terraform-aws-modules/terraform-aws-lambda
потребує hashicorp/aws
provider версії 6:
І змержив спочатку апгрейд Lambda до 8 версії.
Після цього під час виконання terraform init
отримав помилку “no available releases match the given constraints“:
$ terraform init Initializing the backend... Upgrading modules... ... │ Error: Failed to query available provider packages │ │ Could not retrieve the list of available versions for provider hashicorp/aws: no available releases match the given constraints >= 3.29.0, ~> 5.14, >= 5.92.0, >= 6.0.0 ...
The cause
Аби побачити в яких саме модулях які версії провайдерів використовуються – виконуємо terraform providers
, і отримуємо дерево залежностей з усіма версіями:
$ terraform providers Providers required by configuration: . ├── provider[registry.terraform.io/hashicorp/aws] ~> 5.14 ... └── module.atlas_monitoring ... ├── module.single_ingress_alb_logs_loki │ ├── provider[registry.terraform.io/hashicorp/aws] │ ├── module.logs_promtail_lambda ... │ ├── provider[registry.terraform.io/hashicorp/aws] >= 6.0.0 ... ├── module.logs_promtail_lambda_rds_kraken_loki ... │ └── provider[registry.terraform.io/hashicorp/aws] >= 6.0.0 ├── module.logs_promtail_lambda_rds_kraken_vmlogs ... │ └── provider[registry.terraform.io/hashicorp/aws] >= 6.0.0 ├── module.logs_promtail_lambda_rds_os_metrics_loki ... │ ├── provider[registry.terraform.io/hashicorp/aws] >= 6.0.0 ... └── module.logs_promtail_lambda_rds_os_metrics_vmlogs ├── provider[registry.terraform.io/hashicorp/aws] >= 6.0.0 ...
Власне тут і бачимо проблему:
provider[registry.terraform.io/hashicorp/aws] ~> 5.14
module.logs_promtail_lambda_rds_kraken_loki : provider[registry.terraform.io/hashicorp/aws] >= 6.0.0
А помилка нам каже “given constraints >= 3.29.0, ~> 5.14, >= 5.92.0, >= 6.0.0“, тобто:
- перша умова – версії вище 3.29.0
- в третій умові маємо pessimistic constraint (“песимістичне обмеження”) – в “
~> 5.14
” дозволяємо будь-які версії від 5.14.0 до, але не включно 6.0.0, тобто патчі для 5.14, або версії 5.15.x і вище (див. Version Constraints) - а остання умова потребує
>= 6.0.0
– версії 6 і вище
Умова ~> 5.14
у нас задана в головному модулі atlas_monitoring
в versions.tf
:
terraform { required_version = "~> 1.5" required_providers { aws = { source = "hashicorp/aws" version = "~> 5.14" } ...
The solution
Тут варіант або апгрейднути hashicorp/aws
в atlas_monitoring
до 6 версії – але там були якісь breaking changes (і на які звернув увагу 🙂 ) і які треба було перевірити, тому на той момент не поспішав.
Інше рішення – просто виконати revert Pull Request merge з апгрейдом terraform-aws-modules/terraform-aws-lambda
:
А потім вже спочатку оновити hashicorp/aws
до 6 версії, а вже після нього – модуль з Lambda.