【问题标题】:Accessing .tfstate file in .tf file - terraform在 .tf 文件中访问 .tfstate 文件 - terraform
【发布时间】:2019-05-16 09:45:05
【问题描述】:

我想在现有资源组中创建一个新的 WebApp 资源。 this questionthis post 解释了我们如何导入现有资源(而不是每次都创建新资源)

我可以使用以下命令导入我现有的资源组

terraform import azurerm_resource_group.rg-myResourceGroup /subscriptions/00000-my-subscription-id-0000000/resourceGroups/rg-myResourceGroup

执行此命令后,我可以看到创建了名为'terraform.tfstate' 的新文件。下面是文件的内容。

{
    "version": 3,
    "terraform_version": "0.11.11",
    "serial": 1,
    "lineage": "-----------------------------",
    "modules": [
        {
            "path": [
                "root"
            ],
            "outputs": {},
            "resources": {
                "azurerm_resource_group.rg-ResourceGroupName": {
                    "type": "azurerm_resource_group",
                    "depends_on": [],
                    "primary": {
                        "id": "/subscriptions/subscription-id-00000000000/resourceGroups/rg-hemant",
                        "attributes": {
                            "id": "/subscriptions/subscription-id-00000000000/resourceGroups/rg-hemant",
                            "location": "australiaeast",
                            "name": "rg-ResourceGroupName",
                            "tags.%": "0"
                        },
                        "meta": {},
                        "tainted": false
                    },
                    "deposed": [],
                    "provider": "provider.azurerm"
                }
            },
            "depends_on": []
        }
    ]
}

现在我的问题是如何在我的main.tf 中访问/引用/包含terraform.tfstate

resource "azurerm_resource_group" "rg-hemant" {
  #name = it should be rg-ResourceGroupName 
  #location = it should be australiaeast
}

更新 1

  1. 假设在我的订阅“mysubscription1”中有一个 资源组“rg-exising
  2. 此资源组已经有很少的资源,例如webapp1 , storageaccount1
  3. 现在我想写一个 terraform 脚本来添加新的 资源(例如 newWebapp1 )到现有资源组 'rg-现有'
  4. 所以terraform apply 操作后rg-exising 应该有 以下资源

    • webapp1
    • storageaccount1
    • newWebapp1(由新的terraform apply 脚本添加)

4) 请注意,我不希望 terraform 创建(在apply 的情况下)或删除(在destroy 的情况下)我属于rg-exising 的现有资源

【问题讨论】:

  • 访问是什么意思?你是说你想让 Terraform 开始管理资源组,以便它可以修改和删除它?还是因为您希望能够与其他资源一起引用它?
  • @ydaetskcoR,请查看更新1

标签: azure terraform


【解决方案1】:

你不是真的,你只需要将你的资源映射到 tfstate 中的状态,所以就这样做:

resource "azurerm_resource_group" "rg-hemant" {
  name = 'rg-ResourceGroupName'
  location = 'australiaeast'
}

并且 tf 应该将此资源识别为您在状态文件中拥有的资源

【讨论】:

  • 谢谢,当我执行“terraform apply”命令时,指定名称和位置确实将新资源添加到我现有的资源组中。但是,当我执行 terraform destroy' 命令时,它也破坏了我的整个现有资源组。请查看我的更新 1
  • 是的,destroy 会销毁 tf 资源(在本例中为资源组),因此其中的所有内容。
  • 现在我们想编写 terraform 脚本来管理新资源,但我们不想触及现有资源。我们要创建的新资源将成为现有资源组的一部分,我们不希望新的 terraform 脚本触及旧资源...
  • 我不确定这部分,tbh(它可能仍会抱怨资源组中的资源,但不会抱怨 tf 配置中的资源)。但如果你想销毁资源,你应该排除资源组资源
  • 老实说,您应该将这些新资源放入单独的资源组中
【解决方案2】:

通过帖子挖掘更多并找到解决方案here

我们可以使用额外的参数来 terraform destroy 以具体提到我们要销毁的资源

terraform destroy -target RESOURCE_TYPE.NAME -target RESOURCE_TYPE2.NAME

注意:我了解到的是,在这种情况下不需要使用terraform import 命令

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2021-06-26
    • 2020-03-10
    • 2020-11-08
    • 2020-12-18
    • 1970-01-01
    相关资源
    最近更新 更多