我在 macOS Ventura 13.3.1 上遇到 terraform 问题。当我尝试初始化 terragrunt 时:
地形初始化
我有信息表明
Terraform 会损坏您的计算机
我的同事正在使用 M1 和 terraform 版本 1.0.11,他没有问题。我尝试了最新版本和1.0.11,但仍然有这个错误。我通过 tfenv 安装了 terraform。
我有一个包含 Terraform Cloud 的供应管道,我们的领导层要求我们使用 Terragrunt 来提高 Terraform 代码质量。
Terragrunt 是一个很好的工具,但我没有看到任何证据表明有人在 Terraform Cloud 上成功使用过它。
任何人都可以解决这个问题吗?请只回答如果你
有没有一种方法可以为项目中定义的所有模块抽象提供程序。
例如,我有这个项目
??? modules
? ??? RDS
? ??? VPC
??? stacks
??? production
? ??? main.tf
??? staging
??? main.tf
Run Code Online (Sandbox Code Playgroud)
而且工作正常...问题在于模块的定义
??? RDS
? ??? README.md
? ??? main.tf
? ??? providers.tf
? ??? variables.tf
??? VPC
??? README.md
??? main.tf
??? providers.tf
??? variables.tf
Run Code Online (Sandbox Code Playgroud)
这两个模块中的提供者完全相同
# providers.tf
provider "aws" {
region = "${var.region}"
version = "~> 1.26"
}
Run Code Online (Sandbox Code Playgroud)
并且每个模块中的变量都不同,但是它们都有region变量。
# variables.tf
variable "region" {
default = "eu-central-1"
description = "AWS region."
}
# other module dependent …Run Code Online (Sandbox Code Playgroud) 这是一个新手问题,但我刚刚开始使用 Terraform / Terragrunt 进行 GCP 配置,我发现获取 GCP 凭据的工作流程非常混乱。我来自只使用 AWS,在那里获取凭证并在 AWS CLI 中配置它们非常简单。
基本上,Google Cloud Provider 文档指出您应该provider像这样定义一个块:
provider "google" {
credentials = "${file("account.json")}"
project = "my-project-id"
region = "us-central1"
zone = "us-central1-c"
}
Run Code Online (Sandbox Code Playgroud)
该credentials字段显示我(显然)必须生成一个服务帐户,并在我的文件系统上的某处保留一个 JSON。
但是,如果我运行该命令gcloud auth application-default login,则会生成一个位于~/.config/gcloud/application_default_credentials.json;的令牌。或者我也可以使用gcloud auth login <my-username>. 从那里我可以使用gcloud命令从命令行访问 Google API(这也是 Terraform 在幕后所做的)。
那么为什么 Terraform 提供程序需要服务帐户的 JSON 文件呢?为什么不能只使用gcloudCLI 工具已经在使用的凭据?
顺便说一句,如果我将 Terraform 配置为指向该application_default_credentials.json文件,则会出现以下错误:
正在初始化模块...
正在初始化后端...
错误:无法获取现有工作区:查询 Cloud Storage 失败:获取 …
google-cloud-platform terraform terragrunt terraform-provider-gcp
我正在尝试从 terragrunt 调用多个模块。据我所知,目前 terragrunt 不支持多个源,我们一次只能调用一个模块。因此,我创建了一个 main.tf 文件来前端多个模块。
# main.tf
module "foo" {
source = "../modules/vpc"
}
module "bar" {
source = "../modules/s3"
}
Run Code Online (Sandbox Code Playgroud)
在 terragrunt 内部调用 main.tf 作为源,认为将调用模块 foo 和模块 bar。
# terragrunt.hcl
terraform {
source = "./main.tf
}
inputs {
}
Run Code Online (Sandbox Code Playgroud)
使用 terragrunt 可以吗?我需要一次对多个 terraform 模块进行分组。
我已经通过 Mongodb terraform 提供程序成功创建了项目、用户和集群,但是我希望看到在我的新集群下已经创建的数据库,但找不到该数据库。我不确定它缺少什么或不正确,并且我在文档中找不到任何与我自己实现的内容不同的示例/信息。以下是我的 main.tf 文件中的相关信息:
# Create a db user
resource "mongodbatlas_database_user" "mongodb_user" {
username = "${var.database_username}"
password = "${random_string.master_password.result}"
project_id = "${mongodbatlas_project.mongodb.id}"
database_name = "admin"
roles {
role_name = "readWrite"
database_name = "admin"
}
}
Run Code Online (Sandbox Code Playgroud)
团体
resource "mongodbatlas_project" "mongodb"{
org_id = "${var.mongodb_atlas_org_id}"
name = "${var.project_name}-${var.stage}"
}
Run Code Online (Sandbox Code Playgroud)
簇
# Create a cluster
resource "mongodbatlas_cluster" "mongodb-cluster" {
project_id = "${mongodbatlas_project.mongodb.id}"
name = "${var.cluster_name}-${var.stage}"
num_shards = 1
replication_factor = 3
backup_enabled = true
auto_scaling_disk_gb_enabled = true
mongo_db_major_version = "4.0"
//Provider Settings …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来管理 Terragrunt 工作流程中的现有资源,而无需重新创建它们。Basic Terraform 能够在此处导入远程状态,但我在 Terragrunt 中看不到实现此操作的方法。我知道可以使用数据源,但我很确定这意味着它每次运行都会检查远程状态,而不是将其引入进行管理。
最后,我希望能够导入现有的网络主机项目及其网络和子网,然后使用它来创建服务项目。
目前,当我运行 terragrunt run-all applyagags 文件夹时,即使出现错误,也会继续执行,这会导致其他模块出现错误,因此我最终会得到大量日志输出,并且必须在其中搜索第一个事件。
有什么方法可以强制 Terragrunt 快速失败吗?
所以我有一组大约 30 个输入,在所有项目之间共享。我想知道在所有 terragrunt.hcl 文件中共享它们的最佳方法,而不必将它们复制到一百万个不同的地方。我目前使用 yaml 文件进行一些覆盖。我想知道最佳实践是什么。
locals {
manager = "devops" # default contact
company_id = "moos3" # any string to identify the company for better resources naming. Keep max size of five chars.
default_yaml_path = find_in_parent_folders("empty.yaml") # terragrunt function. read the file content for better explanation.
enabled_api_services = [ # APIs enabled by default for all projects when created
"compute.googleapis.com",
"cloudkms.googleapis.com",
"cloudresourcemanager.googleapis.com",
"logging.googleapis.com",
"monitoring.googleapis.com",
"serviceusage.googleapis.com",
"storage-api.googleapis.com",
]
gcp_billing_account = "*****************" # gcp billing account where projects will be …Run Code Online (Sandbox Code Playgroud)