dmn*_*972 9 bitbucket continuous-deployment terraform 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Mar*_*ins 16
您在这里遇到的情况是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
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以切换到该测试目录并使用正常的 Terraform 工作流程一起验证整个配置:
cd tests/simple
terraform init
terraform validate
Run Code Online (Sandbox Code Playgroud)
这种测试配置的一般思想的一个很好的好处是,您还可以通过运行terraform plan或terraform apply设置一组合适的环境变量来将它们用于端到端测试,并且您可以有多个测试配置来测试不同的选项排列并确保它们都通过验证,如果您进行端到端测试,它们都可以正常工作。
即使解决了 Terraform 问题,测试配置仍然是一种很好的技术,可确保您的模块作为子模块工作,而不管它是否单独有效。
小智 5
即使我为我的提供者配置提供了区域,我也遇到了同样的问题。
经过一番挖掘,我从 terraform 的讨论区中发现了这个主题。问题似乎是由于某些未记录的原因,terraform 期望将 AWS_DEFAULT_REGION 环境变量设置为区域值(例如“us-west-1”)。将其设置为有效区域为我解决了这个问题。
您可以在此处找到有关为 Terraform 设置环境变量的更多信息。
希望它可以帮助您解决问题。
| 归档时间: |
|
| 查看次数: |
9169 次 |
| 最近记录: |