bitbucket - terraform 验证错误 : The argument "region" is required, 但未设置

标签 bitbucket terraform continuous-deployment terraform-provider-aws

我写了一个自定义RDS我的开发团队用于部署的模块 RDS实例。我正在使用 BitBucket用于源代码控制,我正在尝试集成 BitBucket要运行的管道 terraform validate在我的 .tf文件以在开发人员使用之前验证语法。 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 issue #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 plan 将它们用于端到端测试。或 terraform apply设置了一组合适的环境变量,您可以有多个测试配置来测试选项的不同排列,并确保它们都通过验证,如果您进行端到端测试,它们都可以工作。
即使修复了 Terraform 问题,测试配置仍然是一种很好的技术,可以确保您的模块作为子模块工作,与它是否单独有效分开。

关于bitbucket - terraform 验证错误 : The argument "region" is required, 但未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57618892/

相关文章:

bitbucket - 有没有办法找出我团队中用户的电子邮件地址

google-cloud-platform - 无法创建 Cloud Composer

terraform 根据外部数据有条件地创建资源?

continuous-integration - TFS 2018 Update 2 IIS 网站部署已弃用或缺失

github - 需要在github actions中设置环境

linux - 从Linux服务器上的git repo下载文件

git - 在我将 key 添加到 Bitbucket 后,服务器一直要求输入密码

git - Bitbucket Cloud 将从 2018 年 12 月 1 日起禁用对 TLSv1 和 TLSv1.1 的支持

amazon-web-services - 使用 Bitbucket 存储库在 AWS 中进行资源配置的 CI/CD

variables - 如何在 terraform 中为 s3 后端声明变量?