在.tf文件中访问.tfstate文件-Terraform

时间:2018-12-15 09:53:00

标签: azure terraform

我想在现有资源组中创建一个新的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": []
        }
    ]
}

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

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

更新1

  1. 假设我的订阅“ mysubscription1”中有一个 资源组“ rg-exising
  2. 此资源组已经没有多少资源,例如webapp1storageaccount1
  3. 现在我要编写一个Terraform脚本,它将添加新的 资源(例如newWebapp1)添加到现有资源组 'rg-existing'
  4. 因此,在terraform apply操作rg-exising之后, 资源下方

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

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

2 个答案:

答案 0 :(得分:1)

您不是真的,您只需要将资源映射到tfstate中的状态,所以只需执行以下操作:

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

和tf应该将此资源识别为状态文件中的资源

答案 1 :(得分:0)

在帖子中浏览更多内容,找到了解决方法here

我们可以使用其他参数对销毁进行地形化,以明确提及要销毁的资源

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

注意:据我了解,在这种情况下,无需使用terraform import命令