🐶
Terraform

Terraform Error: Unexpected Argument "flow_log_destination_type"

By Ondřej Dolanský on 01/07/2025

Learn how to troubleshoot the Terraform error "An argument named 'flow_log_destination_type' is not expected here" and get your infrastructure deployments back on track.

Terraform Error: Unexpected Argument "flow_log_destination_type"

Table of Contents

Introduction

The error message "An argument named 'flow_log_destination_type' is not expected here" typically arises when working with the terraform-aws-modules/vpc/aws module and attempting to configure flow log settings in a manner that the module doesn't anticipate. This issue often stems from a few key factors: module version compatibility, conditional logic within the module, potential typos or misplaced arguments, and the impact of module updates.

Step-by-Step Guide

The error message "An argument named 'flow_log_destination_type' is not expected here" usually pops up when using the terraform-aws-modules/vpc/aws module and you're trying to define flow log settings in a way the module doesn't expect.

Here's a breakdown:

  1. Module Version: Ensure you're using a version of the terraform-aws-modules/vpc/aws module that supports the flow_log_destination_type argument. Older versions might not have this feature.

  2. Conditional Logic: The module uses conditional logic for flow log settings. The flow_log_destination_type argument is only expected when create_flow_log_cloudwatch_log_group is set to false.

    module "vpc" {
      source  = "terraform-aws-modules/vpc/aws"
      # ... other settings
    
      create_flow_log_cloudwatch_log_group = false
      flow_log_destination_type          = "s3" 
      flow_log_destination_arn           = "arn:aws:s3:::your-bucket-name" 
    }
  3. Typo or Misplaced Argument: Double-check for any typos in the argument name. Also, ensure it's placed within the correct block in your Terraform code.

  4. Module Updates: If you recently updated the module, there might be breaking changes. Refer to the module's documentation or changelog to see if the way flow log settings are handled has changed.

Code Example

This code snippet demonstrates correct and incorrect configurations for VPC flow logs using the 'terraform-aws-modules/vpc/aws' module. It highlights that when using an alternative flow log destination like S3, 'create_flow_log_cloudwatch_log_group' must be explicitly set to 'false'. Failing to do so results in an error because the module defaults to CloudWatch Logs. The correct configuration shows how to disable the default CloudWatch Logs and configure S3 as the destination for flow logs. Remember to replace placeholder values with your specific details.

This example demonstrates how to correctly configure flow logs with the terraform-aws-modules/vpc/aws module and highlights common mistakes that lead to the "An argument named 'flow_log_destination_type' is not expected here" error.

File: main.tf

# Incorrect Configuration - Will throw an error
module "vpc_incorrect" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "~> 3.0" # Replace with your version

  name = "demo-vpc-incorrect"
  cidr = "10.0.0.0/16"

  # Error: 'flow_log_destination_type' is not expected when 
  # 'create_flow_log_cloudwatch_log_group' is not explicitly set to 'false'
  flow_log_destination_type = "s3"
  flow_log_destination_arn  = "arn:aws:s3:::your-bucket-name"
}

# Correct Configuration - Sends logs to S3
module "vpc_correct" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "~> 3.0" # Replace with your version

  name = "demo-vpc-correct"
  cidr = "10.1.0.0/16"

  # Explicitly disable CloudWatch log group creation
  create_flow_log_cloudwatch_log_group = false

  # Now you can specify alternative destination
  flow_log_destination_type = "s3"
  flow_log_destination_arn  = "arn:aws:s3:::your-bucket-name" 
}

Explanation:

  • Incorrect Configuration: The first module block demonstrates the error. Since create_flow_log_cloudwatch_log_group is not explicitly set to false, the module expects flow logs to be sent to CloudWatch Logs by default. Attempting to define flow_log_destination_type in this scenario leads to the error.

  • Correct Configuration: The second module block shows the correct approach. By setting create_flow_log_cloudwatch_log_group to false, you signal the module to use an alternative destination. Now, the flow_log_destination_type and flow_log_destination_arn arguments are expected and will configure flow logs to be sent to the specified S3 bucket.

Important:

  • Replace "~> 3.0" with the actual version of the terraform-aws-modules/vpc/aws module you are using.
  • Ensure the S3 bucket exists and your AWS account has the necessary permissions to write flow logs to it.

This example clarifies how the conditional logic within the module determines which arguments are expected based on your flow log destination preference. Always refer to the module's documentation for the most up-to-date information on its features and configuration options.

Additional Notes

  • Default Behavior: By default, the terraform-aws-modules/vpc/aws module is often configured to send VPC flow logs to a CloudWatch Log Group. This is usually the expected behavior unless explicitly changed.

  • Understanding Conditional Logic: Terraform modules often use conditional logic to create flexible configurations. Familiarize yourself with the create_flow_log_cloudwatch_log_group argument and how it influences other flow log settings in this module.

  • Importance of Documentation: Always consult the official documentation of the terraform-aws-modules/vpc/aws module. The documentation will provide the most accurate and up-to-date information on how to configure flow logs and other settings.

  • Troubleshooting Steps:

    • Print Variables: Use terraform output or terraform console to inspect the values of variables within your module. This can help identify if values are being passed as expected.
    • Verbose Logging: Run Terraform commands with the -verbose flag to get more detailed logs, which might pinpoint the source of the error.
  • Alternative Flow Log Destinations: The module likely supports sending flow logs to destinations other than CloudWatch Logs, such as S3 buckets. Refer to the module's documentation for instructions on configuring these alternatives.

Summary

This error occurs when configuring flow log settings in the terraform-aws-modules/vpc/aws module. Here's how to fix it:

1. Module Compatibility:

  • Verify your module version supports the flow_log_destination_type argument. Older versions may not.

2. Conditional Logic:

  • This argument is only valid when create_flow_log_cloudwatch_log_group is set to false.
  • Ensure you're using the correct conditional logic in your Terraform code.

Example:

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  # ... other settings

  create_flow_log_cloudwatch_log_group = false
  flow_log_destination_type          = "s3" 
  flow_log_destination_arn           = "arn:aws:s3:::your-bucket-name" 
}

3. Typos and Placement:

  • Double-check for typos in the argument name (flow_log_destination_type).
  • Ensure the argument is placed within the correct block in your code.

4. Module Updates:

  • If you recently updated the module, review its documentation or changelog for breaking changes related to flow log settings.

Conclusion

By addressing module version compatibility, understanding conditional logic, checking for typos and argument placement, and reviewing module updates for breaking changes, you can effectively resolve the "An argument named 'flow_log_destination_type' is not expected here" error in the terraform-aws-modules/vpc/aws module. Remember to consult the module's documentation and utilize Terraform's debugging tools for efficient troubleshooting. By following these guidelines, you can ensure the seamless configuration of your VPC flow log settings.

References

Were You Able to Follow the Instructions?

😍Love it!
😊Yes
😐Meh-gical
😞No
🤮Clickbait