2017-09-13 208 views
0

當我在做terraform init命令時,TF沒有tfstate(我的tfstate文件在s3存儲桶中)。此外,我無法在.terraform文件夾內看到terraform backend-config文件。terraform init創建空的tfstate文件

我使用terraform 0.10.4版本


輸出:

$ terraform --version 
Terraform v0.10.4 

$ terraform init \ 

-lock="true" 
-backend-config="bucket=$TF_STATE_BUCKET" 
-backend-config="key=$TF_STATE_KEY" 
-backend-config="dynamodb_table=$TF_LOCK_TABLE" 
-backend-config="region=$AWS_REGION" 
-backend-config="profile=$AWS_PROFILE" 
-backend-config="encrypt=true" 
. 
Downloading modules... 
Get: git::ssh://XXXXXXXXXXXXXXXXX/add/tf-vpc.git?ref=1.0.1 
Get: git::ssh://XXXXXXXXXXXXXXXXX/add/tf-ec-redis.git?ref=1.1.3 
Get: git::ssh://XXXXXXXXXXXXXXXXX/add/tf-rds-pg.git?ref=1.3.0 

Initializing provider plugins... 

    Checking for available provider plugins on https://releases.hashicorp.com... 
    Downloading plugin for provider "aws" (0.1.4)... 

The following providers do not have any version constraints in configuration, 
so the latest version was installed. 

To prevent automatic upgrades to new major versions that may contain breaking 
changes, it is recommended to add version = "..." constraints to the 
corresponding provider blocks in configuration, with the constraint strings 
suggested below. 

provider.aws: version = "~> 0.1" 

Terraform has been successfully initialized! 

您現在可以開始與Terraform工作。嘗試運行「terraform plan」以查看您的基礎架構所需的任何更改 。所有Terraform命令 現在應該可以工作。

如果您曾設置或更改Terraform的模塊或後端配置,請重新運行此命令以重新初始化您的工作目錄。如果您忘記了,其他命令會檢測到它並提醒您在必要時執行此操作。

$ ll -al .terraform/ 
total 8 
drwxr-xr-x 1 XXXXX 1049089 0 Sep 12 18:10 modules/ 
drwxr-xr-x 1 XXXXX 1049089 0 Sep 12 18:10 plugins/ 

在現在的位置TF將採取S3-tfstate文件的備份,但它不存在。

+0

$ terraform refresh 空的或不存在的狀態文件。 刷新將無能爲力。刷新不會錯誤或返回錯誤的退出狀態,因爲許多自動化腳本使用刷新,計劃,然後應用 ,並且在第一次運行時可能還沒有狀態文件。 輸出: dev_private_zone_name = XXXXXXXXXX.local private_zone_name = XXXXXXXXXX.local – user2128514

回答

1

這是0.9.x之後的期望行爲。 .terraform/terraform.tfstate的本地tfstate文件幾乎是一個空文件。唯一的變化就是它的序列號。它不斷增加。

"serial": 1, 

如果你不跑terraform apply,遠程tfstate文件不會被更新。如果您從未運行terraform apply,則遠程tfstate文件不存在。

因此,儘量做一些改變,然後檢查遠程tfstate文件(在你的情況下,它是s3://$TF_STATE_BUCKET/$TF_STATE_KEY),你應該看到區別。

+0

作爲您的意見,我已經修改了tfstate文件系列動力爲1,上傳到S3存儲,然後我作爲平時我跑terraform命令,再次創造TF空或不存在的狀態文件。 ------------------------------------- 命令輸出: - '$ terraform refresh 空的或不存在的狀態文件。 刷新將無能爲力。刷新不會錯誤或返回錯誤的退出狀態,因爲許多自動化腳本使用刷新,計劃,然後應用 ,並且在第一次運行時可能還沒有狀態文件。 輸出: 輸出值....' – user2128514

+0

還有一個信息,tfstate文件不是在.terraform文件夾中創建的。 – user2128514

+0

'terraform.tfstate'文件將在'.terraform'文件夾中創建,但其中沒有資源信息。 – BMW