Доволі часта помилка при апгрейді версій модулів, коли маємо обмеження на версії модулів чи провайдерів, і вони не співпадають між собою.
Зміст
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.14module.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.
