我正在尝试使用 Terraform 创建 AWS CodeBuild。
resource "aws_codebuild_project" "cicd_codebuild" {
name = "cicd-${var.profile}-build"
description = "cicd ${var.profile} CodeBuild"
service_role = "${aws_iam_role.cicd_role.arn}"
source {
type = "GITHUB_ENTERPRISE"
location = "https://git.xxx.com/yyy/zzz.git"
git_clone_depth = 0
buildspec = "NO_SOURCE"
}
environment {
compute_type = "BUILD_GENERAL1_MEDIUM"
image = "aws/codebuild/windows-base:2019-1.0"
type = "WINDOWS_SERVER_2019_CONTAINER"
image_pull_credentials_type = "CODEBUILD"
}
artifacts {
type = "NO_ARTIFACTS"
}
}
terraform apply
我收到错误:
Error: aws_codebuild_project.cicd_codebuild: expected environment.0.type to be one of [LINUX_CONTAINER LINUX_GPU_CONTAINER WINDOWS_CONTAINER ARM_CONTAINER], got WINDOWS_SERVER_2019_CONTAINER
当我更改environment.0.type = "WINDOWS_CONTAINER"
的值时,出现以下错误:
Error: Error applying plan:
1 error occurred:
* aws_codebuild_project.cicd_codebuild: 1 error occurred:
* aws_codebuild_project.cicd_codebuild: Error creating CodeBuild project: InvalidInputException: The environment type WINDOWS_CONTAINER is deprecated for new projects or existing project environment updates. Please consider using Windows Server 2019 instead.
我在 GitHub 上发现此问题已在下一个版本中得到解决。所以,我知道升级提供程序版本可以解决此问题,但是我们是否有任何解决方法可以在相同版本的Terraform和提供程序中解决此问题。
谢谢。
Terraform 对许多资源参数进行了计划时间验证,允许在尝试应用无效参数之前捕获传递无效参数的位置。
通常这是有益的,但如果您无法与提供程序版本保持同步,则意味着允许的值列表可能会与提供程序正在与之通信的支持服务实际允许的内容过时。
在此特定情况下,在 AWS 于 2020 年 7 月添加该功能后,拉取请求将WINDOWS_SERVER_2019_CONTAINER
添加为计划时间验证选项。
不幸的是,这项工作已合并并作为 AWS 提供商 v3.20.0 版本的一部分发布,v3 版本仅支持 Terraform 0.12 及更高版本:
重大变更
提供程序
- :新版本的提供程序只能自动安装在 Terraform 0.12 及更高版本上 (#14143)
如果您希望能够在 CodeBuild 中使用 Windows 容器,则需要升级到更新版本的 Terraform 和 AWS 提供商,或者需要使用其他工具来创建 CodeBuild 项目。
一个可能的解决方法是使用 CloudFormation 创建 CodeBuild 项目,您可以使用aws_cloudformation_stack
资源通过 Terraform 运行该项目。