多环境terragrunt gcp项目的模板?
Template for multiple environment terragrunt gcp project?
我想启动一个新的 Terraform 项目,它将在 GCP 帐户上部署资源。我想使用 Terragrunt 提供多个环境(测试、开发、生产)。
基本上每个环境都是相同的,除了资源的名称将有一个前缀(环境名称)并且资源将位于另一个区域。我也想用 terragrunt 保持干燥。
到目前为止,我只有这个所需的文件夹结构:
project
└── env
└── test
└── dev
└── prod
└── resources
└── vpc
└── pubsub
└── cloudrun
└── resource4
我对 Terragrunt 感到困惑,而 Terraform 令人不知所措。我对此没有什么经验,我主要了解 AWS 上的 CloudFormation。
那么我应该把 terragrunt.hcl 文件放在哪里,里面应该有什么?在哪里存储资源变量以及如何强制资源使用环境变量(区域和前缀)。具体环境应该用什么命令部署?
这是一个简单的例子。 Azure 是此处的提供者,但这不会改变模块的组织方式。
这假设您正在使用本地 TF 状态(可能您想要设置 remote state)。
这里还引用了本地文件系统中的模块。您可以将它们存储在单独的 Git 存储库中(Terrag运行t 建议的方式)以进行版本控制。
project/resources/resource_group/main.tf
处的示例可重用模块:
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 2.26"
}
}
}
resource "azurerm_resource_group" "resource_group" {
name = "${var.project}-${var.environment}-resource-group"
location = var.location
tags = {
project = var.project
environment = var.environment
region = var.location
}
}
# I've included variables and outputs in the same file,
# but it's recommended to put them into separate
# variables.tf and outputs.tf respectively.
variable "project" {
type = string
description = "Project name"
}
variable "environment" {
type = string
description = "Environment (dev / stage / prod)"
}
variable "location" {
type = string
description = "The Azure Region where the Resource Group should exist"
}
output "resource_group_name" {
value = azurerm_resource_group.resource_group.name
}
模块在给定环境中的示例用法。模块路径为 project/test/resource_group/terragrunt.hcl
:
generate "provider" {
path = "provider.tf"
if_exists = "overwrite_terragrunt"
contents = <<EOF
provider "azurerm" {
features {}
}
EOF
}
terraform {
source = "../../resources//resource_group"
}
inputs = {
project = "myapp"
environment = "test"
location = "East US"
}
要部署该特定模块(可能会有多个资源,与我的示例不同),您 运行 terragrunt apply
来自 project/test/resource_group
.
或者您可以通过 运行ning terragrunt apply-all
从 project/test
.
执行多个模块
老实说,如果你打算将它用于生产项目,你最好阅读 Terrag运行t 文档,它非常好。
我想启动一个新的 Terraform 项目,它将在 GCP 帐户上部署资源。我想使用 Terragrunt 提供多个环境(测试、开发、生产)。
基本上每个环境都是相同的,除了资源的名称将有一个前缀(环境名称)并且资源将位于另一个区域。我也想用 terragrunt 保持干燥。
到目前为止,我只有这个所需的文件夹结构:
project
└── env
└── test
└── dev
└── prod
└── resources
└── vpc
└── pubsub
└── cloudrun
└── resource4
我对 Terragrunt 感到困惑,而 Terraform 令人不知所措。我对此没有什么经验,我主要了解 AWS 上的 CloudFormation。
那么我应该把 terragrunt.hcl 文件放在哪里,里面应该有什么?在哪里存储资源变量以及如何强制资源使用环境变量(区域和前缀)。具体环境应该用什么命令部署?
这是一个简单的例子。 Azure 是此处的提供者,但这不会改变模块的组织方式。
这假设您正在使用本地 TF 状态(可能您想要设置 remote state)。
这里还引用了本地文件系统中的模块。您可以将它们存储在单独的 Git 存储库中(Terrag运行t 建议的方式)以进行版本控制。
project/resources/resource_group/main.tf
处的示例可重用模块:
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 2.26"
}
}
}
resource "azurerm_resource_group" "resource_group" {
name = "${var.project}-${var.environment}-resource-group"
location = var.location
tags = {
project = var.project
environment = var.environment
region = var.location
}
}
# I've included variables and outputs in the same file,
# but it's recommended to put them into separate
# variables.tf and outputs.tf respectively.
variable "project" {
type = string
description = "Project name"
}
variable "environment" {
type = string
description = "Environment (dev / stage / prod)"
}
variable "location" {
type = string
description = "The Azure Region where the Resource Group should exist"
}
output "resource_group_name" {
value = azurerm_resource_group.resource_group.name
}
模块在给定环境中的示例用法。模块路径为 project/test/resource_group/terragrunt.hcl
:
generate "provider" {
path = "provider.tf"
if_exists = "overwrite_terragrunt"
contents = <<EOF
provider "azurerm" {
features {}
}
EOF
}
terraform {
source = "../../resources//resource_group"
}
inputs = {
project = "myapp"
environment = "test"
location = "East US"
}
要部署该特定模块(可能会有多个资源,与我的示例不同),您 运行 terragrunt apply
来自 project/test/resource_group
.
或者您可以通过 运行ning terragrunt apply-all
从 project/test
.
老实说,如果你打算将它用于生产项目,你最好阅读 Terrag运行t 文档,它非常好。