Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 在不连接AWS的情况下,如何从Terraform配置生成执行计划?_Amazon Web Services_Terraform - Fatal编程技术网

Amazon web services 在不连接AWS的情况下,如何从Terraform配置生成执行计划?

Amazon web services 在不连接AWS的情况下,如何从Terraform配置生成执行计划?,amazon-web-services,terraform,Amazon Web Services,Terraform,我正在为Terraform模块编写一个单元测试,我想确认该模块是否生成了我期望的执行计划。然而,在测试中连接到Amazon将花费太长时间,并且需要对持续集成服务器进行太多配置 我如何使用terraform plan从我的配置生成一个执行计划,假设没有资源存在?terraform plan-refresh=false做你想做的吗 我用它来做一个“快速计划”,而不用花时间刷新所有AWS资源的状态。 但不确定它是否真的连接到AWS来实现这一点 如果您正在使用一个更复杂的远程状态设置,而这正是您不想配置

我正在为Terraform模块编写一个单元测试,我想确认该模块是否生成了我期望的执行计划。然而,在测试中连接到Amazon将花费太长时间,并且需要对持续集成服务器进行太多配置


我如何使用
terraform plan
从我的配置生成一个执行计划,假设没有资源存在?

terraform plan-refresh=false做你想做的吗

我用它来做一个“快速计划”,而不用花时间刷新所有AWS资源的状态。 但不确定它是否真的连接到AWS来实现这一点


如果您正在使用一个更复杂的远程状态设置,而这正是您不想配置的部分,那么您也可以尝试添加一个空的tfstate文件,并使用
-state
选项指向该文件。

我一直在考虑类似的东西,用于Terraform模块周围的测试框架,以前用于模拟Boto在Python中调用

Moto通过对AWS的monkey补丁调用来工作,因此只在Python上工作。但是,它确实提供了在独立模式下使用的运行烧瓶

也就是说,我刚刚在Terraform上试用过,虽然
plan
s似乎可以正常工作,但应用的一个非常基本的配置导致了这个错误:

* aws_instance.web: Error launching source instance: SerializationError: failed decoding EC2 Query response
caused by: parsing time "2015-01-01T00:00:00+0000" as "2006-01-02T15:04:05Z": cannot parse "+0000" as "Z"
然后,我碰巧注意到,即使Moto服务器没有运行,并且我只是在应用程序中使用了一个不存在的本地端点,计划也完成得很好

因此,如果您只需要计划,那么您应该能够通过添加指向localhost的

provider "aws" {
  skip_credentials_validation = true
  max_retries = 1
  skip_metadata_api_check = true
  access_key = "a"
  secret_key = "a"
  region = "us-west-2"

  endpoints {
    ec2 = "http://127.0.0.1:5000/"
  }
}


resource "aws_instance" "web" {
    ami = "ami-123456"
    instance_type = "t2.micro"
    tags {
        Name = "HelloWorld"
    }
}

如何将端点块注入测试而不是实际使用可能是另一个问题,需要更多关于如何构建测试的信息。

出于好奇,我尝试了这个方法,因为我喜欢它的简单性,但没有任何网络功能,即使配置非常简单,它也会挂起。我认为这是试图进入AWS,但没有深入研究,它可能只是试图进入互联网进行其他事情。不过,它确实稍微加快了计划的速度。
terraformplan-refresh=false
似乎不起作用。如果省略AWS提供程序部分,则会提示输入AWS凭据。如果我提供一个提供程序部分,它将检查凭据并返回错误“InvalidClientTokenId:请求中包含的安全令牌无效。状态代码:403,请求id:XXX”。
terraform plan-state=/dev/null
terraform plan-state=empty_file.tfstate
也不起作用。他们打印“读取本地状态时出错:无法检查魔法字节:EOF”。在向提供程序添加假凭据后,它成功了!谢谢