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

Posted

技术标签:

【中文标题】Terraform 和 AWS:未找到配置文件错误【英文标题】:Terraform and AWS: No Configuration Files Found Error 【发布时间】:2019-02-20 10:30:34 【问题描述】:

我正在编写一个小脚本,它从我的本地机器中获取一个小文件并将其放入 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.

然后尝试apply:

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 访问密钥 ID 和值。

我能做什么?

【问题讨论】:

如果您在 shell 脚本中执行 terraform apply,请确保在执行 terraform apply 命令之前 shell 脚本不会 cd 到不同的目录 【参考方案1】:

这个错误意味着你在错误的地方运行了命令。您必须位于包含配置文件的目录中,因此在运行 initapply 之前,您必须将 cd 放到 Terraform 项目文件夹中。

【讨论】:

这就是我所做的......所以我的 .tf 文件位于文件夹 project1 中......所以我 cd project1 然后运行 ​​terraform init 然后执行 terraform 计划 你能在这个文件夹里做ls -la,然后把结果贴在这里吗?也可以尝试pwd 列出当前目录。 看起来 *** 连接存在问题,无法连接到 aws 系统。在进行了一些更改后,它现在可以正常工作了。【参考方案2】:

我遇到了您模拟的相同错误,在我的情况下,这不是 *** 错误,而是文件不正确 系统命名。我在项目文件夹中。为了纠正这种情况,我创建了一个 .tf 文件 使用命令 vi aws.tf 的 vim 编辑器,然后用定义的变量填充文件。我的工作正常。

查看我附加的图片

【讨论】:

【参考方案3】:
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 命令,您需要确保以下几点:-

    您需要存在于您的 terraform 项目文件夹中(可以是任何目录)。 必须包含 .tf,最好包含 terraform 提供者信息。 执行 terraform init 以初始化后端和提供程序插件。 您现在可以执行 terraform apply(没有任何 no config 错误)

【讨论】:

但是如果您在文件夹中并且仍然收到此消息怎么办?【参考方案4】:

我也有同样的问题,记住 terraform 文件名应该以 .tf 作为扩展名

【讨论】:

这与this other answer中的解决方案相同。【参考方案5】:

另一个可能的原因可能是您使用的模块的 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"

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

【讨论】:

以上是关于Terraform 和 AWS:未找到配置文件错误的主要内容,如果未能解决你的问题,请参考以下文章

terraform plan 未检测到漂移

如何在 local-exec 配置程序中从 terraform 继承 aws 凭据

部署期间的 aws terraform 种子云配置文件

通过 Terraform 创建的 AWS Glue 中的无效架构错误

使用 terraform 启动 aws elb 实例

使用 AWS SSO 时 AWS Java SDK 未找到配置文件