地形验证错误:参数"region"是必需的,但未设置。



我为我的开发团队编写了一个自定义RDS模块,用于部署RDS实例。我正在使用BitBucket进行源代码管理,并且正在尝试集成一个BitBucket管道以在我的.tf文件上运行terraform validate以验证语法,然后再使其可供开发人员使用。terraform init运行良好,但是当我运行terraform validate时,出现以下错误:Error: Missing required argument. The argument "region" is required, but was not set.查看文档后,我很困惑为什么这个命令会检查一个声明的提供程序,如果它实际上没有部署任何东西?诚然,我是编写模块的新手。也许这不是我想要完成的正确命令?

Terraform version:v0.12.7

AWS Provider version:2.24

bitbucket-pipelines.yml:

image: hashicorp/terraform:full
pipelines:
branches:
master:
- step:
script:
- terraform version
- terraform init
- terraform validate

Module tree:

├── CHANGELOG.md
├── README.md
├── bitbucket-pipelines.yml
├── main.tf
├── modules
│   ├── db_instance
│   │   ├── README.md
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   ├── db_option_group
│   │   ├── README.md
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   ├── db_parameter_group
│   │   ├── README.md
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   └── db_subnet_group
│       ├── README.md
│       ├── main.tf
│       ├── outputs.tf
│       └── variables.tf
├── outputs.tf
└── variables.tf

您在此处遇到的情况是 Terraform 问题 #21408 中描述的错误,其中验证正在检查提供程序配置是否完成,即使您打算编写将继承提供程序的模块。

在撰写本文时,有两种主要的解决方法。最简单的一次性解决方法是将环境变量AWS_DEFAULT_REGION设置为任何有效的 AWS 区域,然后应将其用作region的值并允许验证通过。

为了使该模块可重现,您可以使用测试配置,当您在特定调用方的上下文之外单独开发模块时,该配置可以为模块提供测试平台。为此,创建一个目录tests/simple(或者任何你喜欢的;名称无关紧要(,并在其中放入一个包含以下内容的test.tf文件:

provider "aws" {
region = "us-east-1"
}
module "under_test" {
source = "../.."
# Any arguments the module requires
}

然后,您可以切换到该测试目录,并使用正常的 Terraform 工作流一起验证整个配置:

cd tests/simple
terraform init
terraform validate

这种测试配置的一般概念的一个好处是,您还可以通过运行具有一组合适的环境变量集的terraform planterraform apply来将它们用于端到端测试,并且您可以拥有多个测试配置来测试不同的选项排列,并确保它们都通过验证和, 如果你做端到端测试,它们都可以工作

即使修复了 Terraform 问题,测试配置仍将是一种很好的技术,可确保模块作为子模块工作,与它是否单独有效分开。

即使我为我的提供程序配置提供了区域,我也遇到了同样的问题。

经过一番挖掘,我从terraform的讨论板上遇到了这个线程。问题似乎是,由于某种未记录的原因,terraform 期望将AWS_DEFAULT_REGION环境变量设置为区域值(例如"us-west-1"(。将其设置为有效区域已为我解决了此问题。

您可以在此处找到有关为 Terraform 设置环境变量的更多信息。

希望它对您的问题有所帮助。

一个或多个TF 资源未配置区域。若要在没有 AWS_DEFAULT_REGION env 变量的情况下处理此问题,或者如果您有多个区域,则可以在资源中使用提供程序别名来指定区域。例如:

provider "aws" {
region = "us-east-1"
alias  = "us"
}
...
resource "aws_cloudwatch_log_metric_filter" "hk_DBrecoverymode-UAT" {
provider       = aws.us
...
}

相关内容

  • 没有找到相关文章

最新更新