Łukasz Pelczar
Łukasz Pelczar

Reputation: 149

Terraform single resource on multiple workspaces

I have two workspaces (like dev and prd) and I have to create single resource to use on all of them. My example is to create AWS ECR repository:

resource "aws_ecr_repository" "example" {
  name                 = "example"
}

I applied it on prd workspace and after switching to dev workspace, Terraform wants to create the same, but it exist.

After consideration I used count to create it only on prd like that:

resource "aws_ecr_repository" "example" {
  count = local.stage == "prd" ? 1 : 0
  name                 = "example"
}

and on prd workspace I use it like that:

aws_ecr_repository.default[0].repository_url

but there is a problem how to use it on dev workspace.

What is the better way to solve this?

Upvotes: 2

Views: 2583

Answers (1)

pfandie
pfandie

Reputation: 150

since i´m not able to add a comment (i do not have enough rep) i´m adding this as an answer. as Jens mentioned, best is to avoid this approach. but you can import a remote state with something like this:

data "terraform_remote_state" "my_remote_state" {
  backend = "local" # could also be a remote state like s3
  config = {
    key     = "project-key"
  }
  workspace = "prd"
}

in your prod workspace you have to define the outputs of your repo:

output "ecr_repo_url" {
  aws_ecr_repository.default[0].repository_url
}

in your dev workspace, you can access the value with:

data.terraform_remote_state.my_remote_state.ecr_repo_url

in some cases this maybe useful, but be aware to what Jens said: if you destroy your prod environment, you can´t apply or change your dev environment!

Upvotes: 2

Related Questions