gpt4 book ai didi

azure - Terraform 中的状态管理

转载 作者:行者123 更新时间:2023-12-03 05:39:25 27 4
gpt4 key购买 nike

我正在构建 terraform 脚本来或阉割 Azure 部署。我使用 Azure Blob 存储来存储 tfstate 文件。该文件与多个管道 IAC 管道共享。

例如,如果我使用 terraform 创建一个 Azure 资源组,完成后,我尝试创建一个新的自定义角色,terraform 计划会将资源组标记为要销毁。

这是角色创建的脚本:

terraform {
backend "azurerm" {
storage_account_name = "saiac"
container_name = "tfstate"
key = "dev.terraform.tfstate"
resource_group_name = "rg-devops"
}
}

data "azurerm_subscription" "primary" {
}

resource "azurerm_role_definition" "roles" {
count = length(var.roles)
name = "${var.role_prefix}${var.roles[count.index]["suffix_name"]}${var.role_suffix}"
scope = "${data.azurerm_subscription.primary.id}"

permissions {
actions = split(",", var.roles[count.index]["actions"])

not_actions = split(",", var.roles[count.index]["not_actions"])
}

assignable_scopes = ["${data.azurerm_subscription.primary.id}"]
}

这是创建资源组的脚本:

terraform {
backend "azurerm" {
storage_account_name = "saiac"
container_name = "tfstate"
key = "dev.terraform.tfstate"
resource_group_name = "rg-devops"
}
}

resource "azurerm_resource_group" "rg" {
count = "${length(var.rg_purposes)}"
name = "${var.rg_prefix}-${var.rg_postfix}-${var.rg_purposes[count.index]}"
location = "${var.rg_location}"
tags = "${var.rg_tags}"
}

如果我删除后端 block ,一切都会按预期工作,这是否意味着我需要后端 block ?

最佳答案

Terraform 使用.tfstate 文件来检查和比较您的代码和现有的云基础设施结构,它就像 terraform 的主干。如果您的代码和现有基础设施不同,terraform 将销毁它并应用代码更改。为了克服这个问题,terraform 提供了导入工具,您可以导入现有资源,terraform 将更新其.tfstate 文件。此 .tfstate 文件必须指定到您的 backend.tf 文件中,最佳实践是将 .tfstate 文件存储在云存储上而不是本地目录中。当您运行 terraform init 命令时,它将检查 .tfstate 文件。以下是 backend.tf 文件的示例文件(使用 aws s3):

  backend "s3" {
bucket = "backends.terraform.file"
key = "my-terraform.tfstate_key"
region = "my-region-1"
encrypt = "false"
acl = "bucket-owner-full-control"
}
}

关于azure - Terraform 中的状态管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59899067/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com