Search code examples
amazon-web-servicesterraformamazon-cognitolocalstack

Cognito user pool saying password_policy is not expected?


I have a pretty straightforward terraform file for a cognito user pool:

provider "aws" {
  region = "us-east-1" # Specify your desired region

}

resource "aws_cognito_user_pool" "main_user_pool" {
  name = "main_user_pool"

  account_recovery_setting {
    recovery_mechanism {
      name     = "verified_email"
      priority = 1
    }

    recovery_mechanism {
      name     = "verified_phone_number"
      priority = 2
    }
  }

  # Define the attributes for the user pool
  schema {
    name                = "email"
    attribute_data_type = "String"
    mutable             = true
    required            = true
  }

  password_policy = {
    minimum_length    = 6
    require_lowercase = true
    require_numbers   = true
    require_symbols   = true
    require_uppercase = true
  }


  email_configuration {
    email_sending_account = "COGNITO_DEFAULT"
  }

  auto_verified_attributes = ["email"]

  username_attributes = ["email"]
  username_configuration {
    case_sensitive = true
  }


  schema {
    name                = "password"
    attribute_data_type = "String"
    mutable             = true
    required            = true
  }

}

Running terraform plan gives me:

Error: Unsupported argument
│ 
│   on cognitoPool.tf line 29, in resource "aws_cognito_user_pool" "main_user_pool":
│   29:   password_policy = {
│ 
│ An argument named "password_policy" is not expected here. Did you mean to define a block of type "password_policy"?

This doesn't make sense because 1. I can see in the documentation that this is a valid argument block and 2. The error says password_policy is not expected so instead I should try password_policy? Its the same thing?

Terraform-provider-aws_v5.36.0_x5 is my terraform version.


Solution

  • From docs:

    (Optional) Configuration block for information about the user pool password policy.

    password_policy is a block not argument, so it should be (no =):

      password_policy {
        minimum_length    = 6
        require_lowercase = true
        require_numbers   = true
        require_symbols   = true
        require_uppercase = true
      }