2017-09-13 191 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