Terraform和AWS:找不到配置文件错误

24

我正在编写一个小脚本,将本地机器上的一个小文件放入AWS S3存储桶中。

我的terraform.tf

provider "aws" {
  region  = "us-east-1"
  version = "~> 1.6"
}
    
terraform {
  backend "s3" {
    bucket     = "${var.bucket_testing}"
    kms_key_id = "arn:aws:kms:us-east-1:12345678900:key/12312313ed-34sd-6sfa-90cvs-1234asdfasd"
    key     = "testexport/exportFile.tfstate"
    region  = "us-east-1"
    encrypt = true
  }
}
    
data "aws_s3_bucket" "pr-ip" {
  bucket = "${var.bucket_testing}"
}
    
resource "aws_s3_bucket_object" "put_file" {
  bucket = "${data.aws_s3_bucket.pr-ip.id}"
  key    = "${var.file_path}/${var.file_name}"
  source = "src/Datafile.txt"
  etag = "${md5(file("src/Datafile.txt"))}"
    
  kms_key_id = "arn:aws:kms:us-east-1:12345678900:key/12312313ed-34sd-6sfa-90cvs-1234asdfasd"
  server_side_encryption = "aws:kms"
}

然而,当我执行 init 操作时:

terraform init

#=>

Terraform initialized in an empty directory!
    
The directory has no Terraform configuration files. You may begin working with Terraform immediately by creating Terraform configuration files.

然后尝试 应用:

terraform apply

#=>

Error: No configuration files found!
    
Apply requires configuration to be present. Applying without a configuration would mark everything for destruction, which is normally not what is desired. If you would like to destroy everything, please run 'terraform destroy' instead which does not require any configuration files.

我遇到了上述错误。同时,我已经设置了我的默认AWS Access Key ID和值。

我该怎么办?


如果您正在shell脚本中执行terraform apply,请确保在执行terraform apply命令之前,该shell脚本没有切换到其他目录。 - Peter Berg
7个回答

63
这个错误意味着您在错误的位置运行了命令。您必须进入包含配置文件的目录,在运行 initapply 命令之前,您需要使用 cd 命令切换到 Terraform 项目文件夹。

这就是我所做的...所以我的.tf文件在一个名为project1的文件夹中...所以我先cd到project1,然后运行terraform init,接着执行terraform plan。 - Arpan
你能在这个文件夹里执行 ls -la 并在这里发布结果吗?另外尝试 pwd 来列出当前目录。 - Alexander
似乎 VPN 连接出现了一些问题,无法连接到 AWS 系统...经过一些更改后,现在它可以正常工作了。 - Arpan

4
Error: No configuration files found!

当您不存在包含配置文件的文件夹中时,会出现上述错误。 为了解决这个问题,您可以在要工作的项目文件夹中创建一个.tf文件。 注意 - 空的.tf也可以消除错误,但它没有提供程序信息,因此使用受限。 请参见以下示例:

provider "aws" {
    region = "us-east" #Below value will be asked when the terraform apply command is executed if not provided here
   }
 

因此,为了成功执行 terraform apply 命令,您需要确保以下几点:

  1. 您需要在 terraform 项目文件夹中(可以是任何目录)。
  2. 必须包含.tf ,最好应该包含terraform提供程序信息。
  3. 执行terraform init 初始化后端和提供程序插件。
  4. 现在您可以执行terraform apply(无需任何配置错误)。

1
但是如果您确实在文件夹中,仍然收到此消息怎么办? - Br.Bill

0
今天早上在部署已经运行多年且没有任何更改的项目时,我遇到了这个错误。最终我们追踪到创建生产部署工单的人在使用Outlook将此命令粘贴到电子邮件中时出现了问题: terraform init --reconfigure

微软在其无限的智慧中将两个连字符合并为一个,并且这个连字符甚至不是标准的ASCII连字符(我认为它被称为“en-dash”): terraform init –reconfigure

这导致Terraform 0.12.31给出了有用的错误消息:

Terraform initialized in an empty directory!

The directory has no Terraform configuration files. You may begin working
with Terraform immediately by creating Terraform configuration files.

我们花了半个小时和另一双眼睛才注意到连字符不正确,需要重新输入!(我认为terraform认为“重新配置”是我们想要在其中运行init的目录名称,当然不存在。也许terraform可以改进,报告此错误时命名它正在查找的目录?)

感谢微软总是很有帮助(并非如此)!


0
如果有人现在遇到同样的问题,我遇到了一个问题,我的TF_WORSPACE环境变量设置为与我所在的目录不同的工作区。请使用以下命令仔细检查您的工作区:

terraform workspace show

显示您可用的工作区:

terraform workspace list

要使用列出的工作区之一,请运行以下命令:

terraform workspace select <workspace name>

如果你使用terraform workspace select时设置了TF_WORKSPACE环境变量,Terraform会打印一条消息告诉您潜在的问题:
The selected workspace is currently overridden using the TF_WORKSPACE
environment variable.

To select a new workspace, either update this environment variable or unset
it and then run this command again.

0

另一个可能的原因是您正在使用模块,其中URL不正确。

当我有:

source = "git::ssh://git@git.companyname.com/observability.git//modules/ec2?ref=v2.0.0"

改为:

source = "git::ssh://git@git.companyname.com/observability.git//terraform/modules/ec2?ref=v2.0.0"

我看到了和你一样的错误信息。


0

我也遇到了同样的问题,记得 Terraform 文件名应该以 .tf 作为扩展名结尾。


2
这是与此其他答案相同的解决方案。 - Eric Aya

0

我和你一样复制了同样的错误。在我的情况下,这不是VPN出现了错误,而是文件系统命名不正确。我当时在项目文件夹中。为了解决问题,我使用vim编辑器创建了一个.tf文件,命令为vi aws.tf,然后用定义的变量填充了该文件。我的工作正常。

请查看我附加的图片。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接