Terraform: “no available releases match the given constraints”

Автор |  24/07/2025
 

Доволі часта помилка при апгрейді версій модулів, коли маємо обмеження на версії модулів чи провайдерів, і вони не співпадають між собою.

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.