Terrafrom Level 3 Task 10 Managing Terraform Workspaces for Environment Isolation Using Terraform

Hi Team

After completing the Task validation failed with below reason.

assert 'Created Log Group /aws/apigateway/dev-nautilus-api-1 in workspace dev' in 'Created CloudWatch Log Group /aws/apigateway/dev-nautilus-api-1 for API Gateway dev-nautilus-api-1 in workspace dev\n...eated CloudWatch Log Group /aws/apigateway/prod-nautilus-api-1 for API Gateway prod-nautilus-api-1 in workspace prod\n'

Find the output from the terraform workspace
dev output

dev ➜  terraform output
kke_api_gateway_execution_arns = [
  "arn:aws:execute-api:us-east-1::h8oalfngym",
  "arn:aws:execute-api:us-east-1::nbmb1dwsyy",
]
kke_api_gateway_ids = [
  "h8oalfngym",
  "nbmb1dwsyy",
]
kke_api_gateway_names = [
  "dev-nautilus-api-1",
  "dev-nautilus-api-2",
]
kke_log_group_arns = [
  "arn:aws:logs:us-east-1:000000000000:log-group:/aws/apigateway/dev-nautilus-api-1",
  "arn:aws:logs:us-east-1:000000000000:log-group:/aws/apigateway/dev-nautilus-api-2",
]
kke_log_group_names = [
  "/aws/apigateway/dev-nautilus-api-1",
  "/aws/apigateway/dev-nautilus-api-2",
]
workspace_info = {
  "api_count" = 2
  "environment" = "Development"
  "workspace_name" = "dev"
}

prod output

prod ➜  terraform output
kke_api_gateway_execution_arns = [
  "arn:aws:execute-api:us-east-1::xwayjtkb3q",
  "arn:aws:execute-api:us-east-1::qfsrjdpewc",
]
kke_api_gateway_ids = [
  "xwayjtkb3q",
  "qfsrjdpewc",
]
kke_api_gateway_names = [
  "prod-nautilus-api-1",
  "prod-nautilus-api-2",
]
kke_log_group_arns = [
  "arn:aws:logs:us-east-1:000000000000:log-group:/aws/apigateway/prod-nautilus-api-1",
  "arn:aws:logs:us-east-1:000000000000:log-group:/aws/apigateway/prod-nautilus-api-2",
]
kke_log_group_names = [
  "/aws/apigateway/prod-nautilus-api-1",
  "/aws/apigateway/prod-nautilus-api-2",
]
workspace_info = {
  "api_count" = 2
  "environment" = "Production"
  "workspace_name" = "prod"
}

Hi @suryaeshwaran

I’ve just checked, and it’s working correctly on my side. Please take a look at my main.tf file.

# Get the current workspace
locals {
  workspace = terraform.workspace
}

# Create API Gateway REST APIs using count
resource "aws_api_gateway_rest_api" "this" {
  count = length(var.KKE_API_NAMES)
  name  = "${local.workspace}-${var.KKE_API_NAMES[count.index]}"

  lifecycle {
    create_before_destroy = true
  }

  provisioner "local-exec" {
    command = "echo 'Created API Gateway ${self.name} in workspace ${local.workspace}' >> /home/bob/terraform/apigateway.log"
  }
}

# Create matching CloudWatch Log Groups
resource "aws_cloudwatch_log_group" "this" {
  count = length(var.KKE_API_NAMES)
  name  = "/aws/apigateway/${local.workspace}-${var.KKE_API_NAMES[count.index]}"
  retention_in_days = 30

  provisioner "local-exec" {
    command = "echo 'Created Log Group ${self.name} in workspace ${local.workspace}' >> /home/bob/terraform/loggroups.log"
  }
}

Hi @raymond.baoly

Just aligning with your main.tf, I am able to complete the Task.

Thanks

1 Like