'Using multiple provider version in terraform

Im trying to use two provider version with in terraform, though Im getting the below error

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.71.0, 3.71.0, 4.6.0

Here is what Im trying to do. I have a terraform file, which uses multiple module. And in one module alone, I need to use aws provider version 4.6.0. On other modules, I need to stick to currently applied provider version, which is 3.71.0

Terraform version: 0.13.6

Im defining a constraint in terraform file, so "hashicorp/aws" can be anything above 3.71.0. Below is what is defined:

  "aws": {
    "version": ">= 3.71.0",
    "assume_role": {
      "role_arn": "....",
      "session_name": "..."
    },

terraform file calls more than 10 module, and module 0 to 9 provider config is

terraform {
  required_providers {
    aws = {
      source                  = "hashicorp/aws"
      version                 = "= 3.71.0"
    }
  }
}

and 10th module provider config is

terraform {
  required_providers {
    aws = {
      source                  = "hashicorp/aws"
      version                 = "= 4.6.0"
    }
  }
}

Anything Im missing?

Note : I have already referred this post - Multiple provider versions with Terraform, though not sure, if its technically not possible, and something Im doing it wrong



Solution 1:[1]

We use a separate provider block for each and every region, this is how we handle it:

provider "aws" {
  region   = "us-west-2"
}

provider "aws" {
  alias     = "east-2-provider"
  region    = "us-east-2"
  version   = "~> 4.0"
}

provider "aws" {
  alias    = "east-1-provider"
  region   = "us-east-1"
  version  = "~> 3.74"
}

When we are using a module we use it as below:

module "example-1" {
  source    = "./example"

  providers = {
    aws = east-1-provider
  }
}

module "example-2" {
  source    = "./example"

  providers = {
    aws = east-2-provider
  }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 tomarv2