Terraform 从列表中的地图索引调用值索引时出现地形错误

Terraform 从列表中的地图索引调用值索引时出现地形错误,terraform,Terraform,我有一个map类型的变量,它的索引值是instance类型。现在我在索引中使用单aws单实例类:- default = { "0" = "r4.2xlarge" "1" = "m4.large" "2" = "r4.4xlarge" "3" = "m3.xlarge" "4" = "m3.xlarge" "5" = "m4.xlarge" "6" = "m4.xlarge" "7" = "c4.xlarge" "8" = "m4.large" "9" = "m4.large" }

我有一个map类型的变量,它的索引值是instance类型。现在我在索引中使用单aws单实例类:-

default = {
"0" = "r4.2xlarge"
"1" = "m4.large"
"2" = "r4.4xlarge"
"3" = "m3.xlarge"  
"4" = "m3.xlarge"  
"5" = "m4.xlarge"
"6" = "m4.xlarge"
"7" = "c4.xlarge"  
"8" = "m4.large"
"9" = "m4.large" }
我的地形调用如下索引:-

instance_types {
spot     = ["${lookup(var.spot_instance_types, count.index)}"]
}

我试图将多个实例类作为列表添加到映射中,如下所示:-

default = {
"0" = ["r4.2xlarge","r4.xlarge"]
"1" = ["m4.large","m4.xlarge"]
"2" = ["r4.4xlarge","r4.xlarge"]
"3" = ["m3.xlarge","m4.xlarge"]  
"4" = ["m3.xlarge","m4.xlarge"]  
"5" = ["m4.xlarge","m4.large"]
"6" = ["m4.xlarge","m4.large"]
"7" = ["c4.xlarge","c4.large"]  
"8" = ["m4.large","m4.xlarge"]
"9" = ["m4.large","m4.xlarge"] }
Terraform应用抛出以下错误:

错误:spotinst_aws_group.private_服务器:发生10个错误:

  • spotinst_aws_group.private_servers[3]:lookup:lookup()只能与平面映射一起使用,此映射包含以下类型的元素:
${lookup(var.spot\u实例\u类型,count.index)} *spotinst_aws_group.private_servers[7]:lookup:lookup()只能与平面映射一起使用,此映射包含以下列表类型的元素:

${lookup(var.spot\u实例\u类型,count.index)} *spotinst_aws_group.private_servers[2]:lookup:lookup()只能与平面映射一起使用,此映射包含以下列表类型的元素:

${lookup(var.spot\u实例\u类型,count.index)} *spotinst_aws_group.private_服务器[0]:lookup:lookup()只能与平面映射一起使用,此映射包含以下类型的元素:

${lookup(var.spot\u实例\u类型,count.index)} *spotinst_aws_group.private_servers[8]:lookup:lookup()只能与平面映射一起使用,此映射包含以下类型的元素:

${lookup(var.spot\u实例\u类型,count.index)} *spotinst_aws_group.private_servers[1]:lookup:lookup()只能与平面映射一起使用,此映射包含以下类型的元素列表:

${lookup(var.spot\u实例\u类型,count.index)} *spotinst_aws_group.private_server[6]:lookup:lookup()只能与平面映射一起使用,此映射包含以下类型的元素:

${lookup(var.spot\u实例\u类型,count.index)} *spotinst_aws_group.private_server[9]:lookup:lookup()只能与平面映射一起使用,此映射包含以下类型的元素列表:

${lookup(var.spot\u实例\u类型,count.index)} *spotinst_aws_group.private_server[5]:lookup:lookup()只能与平面映射一起使用,此映射包含以下类型的元素列表:

${lookup(var.spot\u实例\u类型,count.index)} *spotinst_aws_group.private_servers[4]:lookup:lookup()只能与平面映射一起使用,此映射包含以下类型的元素:

${lookup(var.spot\u实例\u类型,count.index)}


有没有办法做到这一点,或者甚至有可能做到?到目前为止,还无法从任何人那里得到答案。

目前还不清楚您在这里究竟想要实现什么。您能否更准确地说明您想要做什么,然后说明您尝试过的方法如何无效?我正在使用spotinst提供程序在AWS上提供spot机器。在这个解决方案中,我使用terraform提供了一个完整的集成环境。这有助于一次性提供10台不同级别的机器。有关完整的地形文件,请参见:-。我知道我们可以像terraform一样提供一个实例类,但我想以列表的形式提供两种类型的实例类。我真的不明白为什么要同时创建10个具有不同AMI和实例类型的spot实例。他们是要执行相同的工作,而你有一个非常特殊的异质性组合?或者他们都在做不同的事情?如果他们在做不同的事情,为什么你要同时创建它们,而不是单独创建并降低代码的复杂性?@ydaetskcoR:这是10个功能不同的应用程序金色图像,因此为什么要创建10个不同的图像id。这些应用程序的内存和核心需求是不同的,这就是为什么我们有不同的实例类。我们希望集成环境能够一次完成(这为我们节省了很多时间:)。这就是我们以这种方式设计它的原因。我不确定堆栈溢出是否是讨论这个问题的最佳场所,但您的方法在我看来过于复杂,而不是仅仅定义10个单独的spot inst组,因为它们都在做不同的事情。也就是说,我看不出你所尝试的功能上到底有什么问题,Terraform应该返回映射到索引的列表。