Go mod 构建 golang 二进制文件的 terraform module 出现问题
Go mod troubles with terraform module that builds golang binaries
我正处于辅助项目的最后一步,现在我无法使用 terraform 来构建我的 golang 二进制文件,因为我正在尝试将我的代码部署为 terraform 模块。
我的 Terraform 模块调用如下所示。
module "moot" {
source = "github.com/seanturner026/moot.git"
name = "moot"
admin_user_email = "blah@example.com"
enable_delete_admin_user = false
github_token = "42"
gitlab_token = "42"
slack_webhook_url = "42"
fqdn_alias = ""
hosted_zone_name = ""
enable_api_gateway_access_logs = false
tags = { Name = "moot" }
}
出于某种原因,go modules 干扰了我的 null_resource
s,当我通过模块部署时,我用它来构建我的 golang lambda 二进制文件。
此模块调用构建了一大堆东西,但您可以构建非常少的资源,但仍然会使用以下命令遇到错误。
terraform apply -target='module.moot.null_resource.lambda_build["users"]'
运行 此命令出现以下错误:
module.moot.null_resource.lambda_build["users"]: Creating...
module.moot.null_resource.lambda_build["users"]: Provisioning with 'local-exec'...
module.moot.null_resource.lambda_build["users"] (local-exec): Executing: ["/bin/sh" "-c" "export GO111MODULE=on"]
module.moot.null_resource.lambda_build["users"]: Provisioning with 'local-exec'...
module.moot.null_resource.lambda_build["users"] (local-exec): Executing: ["/bin/sh" "-c" "GOOS=linux go build -ldflags '-s -w' -o .terraform/modules/moot/bin/users .terraform/modules/moot/cmd/users/."]
module.moot.null_resource.lambda_build["users"] (local-exec): no required module provides package .terraform/modules/moot/cmd/users: go.mod file not found in current directory or any parent directory; see 'go help modules'
null_resource
代码位于此处 https://github.com/seanturner026/moot/blob/e51aee51d12472735e6bc5902e54dd603f750aff/r_lambda.tf#L1-L23
使用模块源 ../../
(而不是 github link)的示例确实成功运行。我不确定为什么,但也许是因为 go.mod
在上层目录中?无论哪种方式,该示例都可以在此处部署,并且上面的 terraform apply
命令有效 https://github.com/seanturner026/moot/blob/Whosebug/terraform_examples/complete/main.tf
我还有一个 makefile 位于此处 https://github.com/seanturner026/moot/blob/Whosebug/Makefile。 运行 make build
也失败了
$ make build
export GO111MODULE=on
env GOOS=linux go build -ldflags="-s -w" -o bin/auth cmd/auth/. &
env GOOS=linux go build -ldflags="-s -w" -o bin/releases cmd/releases/. &
env GOOS=linux go build -ldflags="-s -w" -o bin/repositories cmd/repositories/. &
env GOOS=linux go build -ldflags="-s -w" -o bin/users cmd/users/. &
package cmd/auth is not in GOROOT (/usr/local/go/src/cmd/auth)
package cmd/releases is not in GOROOT (/usr/local/go/src/cmd/releases)
package cmd/repositories is not in GOROOT (/usr/local/go/src/cmd/repositories)
package cmd/users is not in GOROOT (/usr/local/go/src/cmd/users)
我该如何解决这个问题?我最近重命名了存储库,这会导致问题吗?
这是我指定 github.com/seanturner026/moot.git
作为模块调用源时的目录布局。
.
├── .terraform
│ └── modules
│ └── moot
│ ├── .editorconfig
│ ├── .gitignore
│ ├── Makefile
│ ├── README.md
│ ├── archive
│ ├── assets
│ │ ├── repositories-add.png
│ │ ├── repositories.png
│ │ └── users.png
│ ├── bin
│ │ └── users
│ ├── cmd
│ │ ├── auth
│ │ │ ├── events.json
│ │ │ ├── login.go
│ │ │ ├── login_test.go
│ │ │ ├── main.go
│ │ │ ├── reset_password.go
│ │ │ └── reset_password_test.go
│ │ ├── releases
│ │ │ ├── event.json
│ │ │ ├── github.go
│ │ │ ├── gitlab.go
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── repositories
│ │ │ ├── create.go
│ │ │ ├── create_test.go
│ │ │ ├── delete.go
│ │ │ ├── delete_test.go
│ │ │ ├── events.json
│ │ │ ├── list.go
│ │ │ ├── list_test.go
│ │ │ └── main.go
│ │ └── users
│ │ ├── create.go
│ │ ├── create_test.go
│ │ ├── delete.go
│ │ ├── delete_test.go
│ │ ├── events.json
│ │ ├── list.go
│ │ ├── list_test.go
│ │ └── main.go
│ ├── data.tf
│ ├── go.mod
│ ├── go.sum
│ ├── internal
│ │ └── util
│ │ ├── generate_response_body.go
│ │ ├── generate_secret_hash.go
│ │ ├── main.go
│ │ └── post_to_slack.go
│ ├── locals.tf
│ ├── modules.tf
│ ├── outputs.tf
│ ├── r_acm.tf
│ ├── r_api_gateway.tf
│ ├── r_cloudwatch.tf
│ ├── r_cognito.tf
│ ├── r_dynamodb.tf
│ ├── r_iam.tf
│ ├── r_lambda.tf
│ ├── r_null.tf
│ ├── r_route53.tf
│ ├── r_s3.tf
│ ├── r_ssm.tf
│ ├── terraform_assets
│ │ ├── cognito.go
│ │ ├── cognito_invite_template.html
│ │ └── dynamodb_put_item_input.json
│ └── variables.tf
├── .terraform.lock.hcl
├── main.tf
├── provider.tf
├── terraform.auto.tfvars
├── terraform.tfstate
├── terraform.tfstate.backup
├── terraform.tfvars
└── variables.tf
需要在构建 lambda 二进制文件的 null_resource
中的 cmd 二进制文件前面放置一个 ./
还需要用另一个null_resource
复制go.mod到顶层目录
https://github.com/seanturner026/moot/pull/6/commits/3ff8e18c5449f610eb9ca99c8e89bd31717a8bd9
我正处于辅助项目的最后一步,现在我无法使用 terraform 来构建我的 golang 二进制文件,因为我正在尝试将我的代码部署为 terraform 模块。
我的 Terraform 模块调用如下所示。
module "moot" {
source = "github.com/seanturner026/moot.git"
name = "moot"
admin_user_email = "blah@example.com"
enable_delete_admin_user = false
github_token = "42"
gitlab_token = "42"
slack_webhook_url = "42"
fqdn_alias = ""
hosted_zone_name = ""
enable_api_gateway_access_logs = false
tags = { Name = "moot" }
}
出于某种原因,go modules 干扰了我的 null_resource
s,当我通过模块部署时,我用它来构建我的 golang lambda 二进制文件。
此模块调用构建了一大堆东西,但您可以构建非常少的资源,但仍然会使用以下命令遇到错误。
terraform apply -target='module.moot.null_resource.lambda_build["users"]'
运行 此命令出现以下错误:
module.moot.null_resource.lambda_build["users"]: Creating...
module.moot.null_resource.lambda_build["users"]: Provisioning with 'local-exec'...
module.moot.null_resource.lambda_build["users"] (local-exec): Executing: ["/bin/sh" "-c" "export GO111MODULE=on"]
module.moot.null_resource.lambda_build["users"]: Provisioning with 'local-exec'...
module.moot.null_resource.lambda_build["users"] (local-exec): Executing: ["/bin/sh" "-c" "GOOS=linux go build -ldflags '-s -w' -o .terraform/modules/moot/bin/users .terraform/modules/moot/cmd/users/."]
module.moot.null_resource.lambda_build["users"] (local-exec): no required module provides package .terraform/modules/moot/cmd/users: go.mod file not found in current directory or any parent directory; see 'go help modules'
null_resource
代码位于此处 https://github.com/seanturner026/moot/blob/e51aee51d12472735e6bc5902e54dd603f750aff/r_lambda.tf#L1-L23
使用模块源 ../../
(而不是 github link)的示例确实成功运行。我不确定为什么,但也许是因为 go.mod
在上层目录中?无论哪种方式,该示例都可以在此处部署,并且上面的 terraform apply
命令有效 https://github.com/seanturner026/moot/blob/Whosebug/terraform_examples/complete/main.tf
我还有一个 makefile 位于此处 https://github.com/seanturner026/moot/blob/Whosebug/Makefile。 运行 make build
也失败了
$ make build
export GO111MODULE=on
env GOOS=linux go build -ldflags="-s -w" -o bin/auth cmd/auth/. &
env GOOS=linux go build -ldflags="-s -w" -o bin/releases cmd/releases/. &
env GOOS=linux go build -ldflags="-s -w" -o bin/repositories cmd/repositories/. &
env GOOS=linux go build -ldflags="-s -w" -o bin/users cmd/users/. &
package cmd/auth is not in GOROOT (/usr/local/go/src/cmd/auth)
package cmd/releases is not in GOROOT (/usr/local/go/src/cmd/releases)
package cmd/repositories is not in GOROOT (/usr/local/go/src/cmd/repositories)
package cmd/users is not in GOROOT (/usr/local/go/src/cmd/users)
我该如何解决这个问题?我最近重命名了存储库,这会导致问题吗?
这是我指定 github.com/seanturner026/moot.git
作为模块调用源时的目录布局。
.
├── .terraform
│ └── modules
│ └── moot
│ ├── .editorconfig
│ ├── .gitignore
│ ├── Makefile
│ ├── README.md
│ ├── archive
│ ├── assets
│ │ ├── repositories-add.png
│ │ ├── repositories.png
│ │ └── users.png
│ ├── bin
│ │ └── users
│ ├── cmd
│ │ ├── auth
│ │ │ ├── events.json
│ │ │ ├── login.go
│ │ │ ├── login_test.go
│ │ │ ├── main.go
│ │ │ ├── reset_password.go
│ │ │ └── reset_password_test.go
│ │ ├── releases
│ │ │ ├── event.json
│ │ │ ├── github.go
│ │ │ ├── gitlab.go
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── repositories
│ │ │ ├── create.go
│ │ │ ├── create_test.go
│ │ │ ├── delete.go
│ │ │ ├── delete_test.go
│ │ │ ├── events.json
│ │ │ ├── list.go
│ │ │ ├── list_test.go
│ │ │ └── main.go
│ │ └── users
│ │ ├── create.go
│ │ ├── create_test.go
│ │ ├── delete.go
│ │ ├── delete_test.go
│ │ ├── events.json
│ │ ├── list.go
│ │ ├── list_test.go
│ │ └── main.go
│ ├── data.tf
│ ├── go.mod
│ ├── go.sum
│ ├── internal
│ │ └── util
│ │ ├── generate_response_body.go
│ │ ├── generate_secret_hash.go
│ │ ├── main.go
│ │ └── post_to_slack.go
│ ├── locals.tf
│ ├── modules.tf
│ ├── outputs.tf
│ ├── r_acm.tf
│ ├── r_api_gateway.tf
│ ├── r_cloudwatch.tf
│ ├── r_cognito.tf
│ ├── r_dynamodb.tf
│ ├── r_iam.tf
│ ├── r_lambda.tf
│ ├── r_null.tf
│ ├── r_route53.tf
│ ├── r_s3.tf
│ ├── r_ssm.tf
│ ├── terraform_assets
│ │ ├── cognito.go
│ │ ├── cognito_invite_template.html
│ │ └── dynamodb_put_item_input.json
│ └── variables.tf
├── .terraform.lock.hcl
├── main.tf
├── provider.tf
├── terraform.auto.tfvars
├── terraform.tfstate
├── terraform.tfstate.backup
├── terraform.tfvars
└── variables.tf
需要在构建 lambda 二进制文件的 null_resource
中的 cmd 二进制文件前面放置一个 ./
还需要用另一个null_resource
https://github.com/seanturner026/moot/pull/6/commits/3ff8e18c5449f610eb9ca99c8e89bd31717a8bd9