Terraform AWS中启动配置创建延迟

Terraform AWS中启动配置创建延迟,terraform,Terraform,使用Terraform,我定义了以下启动配置和自动缩放组资源: resource "aws_launch_configuration" "lc_name" { name = "lc_name" image_id = "ami-035d01348bb6e6070" instance_type = "m3.large" security_groups = ["sg-61a0b51b"] } #################### # Autoscaling group #####

使用Terraform,我定义了以下启动配置和自动缩放组资源:

resource "aws_launch_configuration" "lc_name" {
  name = "lc_name"
  image_id = "ami-035d01348bb6e6070"
  instance_type = "m3.large"
  security_groups = ["sg-61a0b51b"]
}

####################
# Autoscaling group
####################
resource "aws_autoscaling_group" "as_group_name" {

  name = "as_group_name"
  launch_configuration = "lc_name"
  vpc_zone_identifier = ["subnet-be1088f7","subnet-fa8d6fa1"]
  min_size = "1"
  max_size = "1"
  desired_capacity = "1"
  load_balancers = ["${aws_elb.elb_name.name}"]
  health_check_type = "EC2"
}
当我运行terraform应用程序时,我得到:

Error: Error applying plan:
1 error(s) occurred:

aws_autoscaling_group.as_group_name: 1 error(s) occurred:
aws_autoscaling_group.as_group_name: Error creating AutoScaling Group: ValidationError: Launch configuration name not found - A launch configuration with the name: lc_name does not exist
status code: 400, request id: b09191d3-a47c-11e8-8198-198283743bc9

Terraform does not automatically rollback in the face of errors.
Instead, your Terraform state file has been partially updated with
any resources that successfully completed. Please address the error
above and apply again to incrementally change your infrastructure.
如果我再次运行apply,一切都会顺利进行,这意味着create autoscale组码识别新的启动配置时会出现延迟。有没有办法适应这种延迟

更新: 根据建议,我添加了一个依赖项:

resource "aws_launch_configuration" "myLaunchConfig" {
  name = "myLaunchConfig"
  image_id = "ami-01c068891b0d9411a"
  instance_type = "m3.large"
  security_groups = ["sg-61a0b51b"]
}

resource "aws_autoscaling_group" "myAutoScalingGroup" {

  name = "myAutoScalingGroup"
  launch_configuration = "myLaunchConfig"
  depends_on = ["myLaunchConfig"]
  vpc_zone_identifier = ["subnet-be1088f7","subnet-fa8d6fa1"]
  min_size = "1"
  max_size = "1"
  desired_capacity = "1"
  load_balancers = ["${aws_elb.myLoadBalancer.name}"]
  health_check_type = "EC2"
}
由于同样的原因仍然会出现错误,尽管看起来有点不同:

Error: aws_autoscaling_group.myAutoScalingGroup: resource depends on non-existent resource 'myLaunchConfig'

据Terraform所知,您的自动校准组和您的启动配置之间没有关系,因此它将尝试并行创建它们,将您引导到观察到的比赛条件,该条件将在下一次
应用时自我纠正

有了地形你就有了

您可以使用显式语法强制资源在创建另一个资源之前等待,然后再创建它

在您的情况下,这将类似于:

resource "aws_launch_configuration" "lc_name" {
  name            = "lc_name"
  image_id        = "ami-035d01348bb6e6070"
  instance_type   = "m3.large"
  security_groups = ["sg-61a0b51b"]
}

####################
# Autoscaling group
####################
resource "aws_autoscaling_group" "as_group_name" {
  name                 = "as_group_name"
  launch_configuration = "lc_name"
  vpc_zone_identifier  = ["subnet-be1088f7", "subnet-fa8d6fa1"]
  min_size             = "1"
  max_size             = "1"
  desired_capacity     = "1"
  load_balancers       = ["${aws_elb.elb_name.name}"]
  health_check_type    = "EC2"
  depends_on           = ["aws_launch_configuration.lc_name"]
}
或者,在可能的情况下,这通常更可取,如果您从一个资源中插入一个值,那么它将自动等待,直到该资源被创建,然后再创建第二个资源

在您的情况下,您将使用以下内容:

resource "aws_launch_configuration" "lc_name" {
  name            = "lc_name"
  image_id        = "ami-035d01348bb6e6070"
  instance_type   = "m3.large"
  security_groups = ["sg-61a0b51b"]
}

####################
# Autoscaling group
####################
resource "aws_autoscaling_group" "as_group_name" {
  name                 = "as_group_name"
  launch_configuration = "${aws_launch_configuration.lc_name.name}"
  vpc_zone_identifier  = ["subnet-be1088f7", "subnet-fa8d6fa1"]
  min_size             = "1"
  max_size             = "1"
  desired_capacity     = "1"
  load_balancers       = ["${aws_elb.elb_name.name}"]
  health_check_type    = "EC2"
}

如果您不确定Terraform将操作的顺序,那么您可能想看看。

据Terraform所知,您的自动缩放组和您的启动配置之间没有关系,因此它将尝试并行创建这些,引导您进入观察到的竞态条件,该竞态条件将在下一次
应用时自我修正

有了地形你就有了

您可以使用显式语法强制资源在创建另一个资源之前等待,然后再创建它

在您的情况下,这将类似于:

resource "aws_launch_configuration" "lc_name" {
  name            = "lc_name"
  image_id        = "ami-035d01348bb6e6070"
  instance_type   = "m3.large"
  security_groups = ["sg-61a0b51b"]
}

####################
# Autoscaling group
####################
resource "aws_autoscaling_group" "as_group_name" {
  name                 = "as_group_name"
  launch_configuration = "lc_name"
  vpc_zone_identifier  = ["subnet-be1088f7", "subnet-fa8d6fa1"]
  min_size             = "1"
  max_size             = "1"
  desired_capacity     = "1"
  load_balancers       = ["${aws_elb.elb_name.name}"]
  health_check_type    = "EC2"
  depends_on           = ["aws_launch_configuration.lc_name"]
}
或者,在可能的情况下,这通常更可取,如果您从一个资源中插入一个值,那么它将自动等待,直到该资源被创建,然后再创建第二个资源

在您的情况下,您将使用以下内容:

resource "aws_launch_configuration" "lc_name" {
  name            = "lc_name"
  image_id        = "ami-035d01348bb6e6070"
  instance_type   = "m3.large"
  security_groups = ["sg-61a0b51b"]
}

####################
# Autoscaling group
####################
resource "aws_autoscaling_group" "as_group_name" {
  name                 = "as_group_name"
  launch_configuration = "${aws_launch_configuration.lc_name.name}"
  vpc_zone_identifier  = ["subnet-be1088f7", "subnet-fa8d6fa1"]
  min_size             = "1"
  max_size             = "1"
  desired_capacity     = "1"
  load_balancers       = ["${aws_elb.elb_name.name}"]
  health_check_type    = "EC2"
}

如果您不确定Terraform将操作的事物顺序,那么您可能想看看。

这是我的错,我在发布之前更改了事物名称,但错过了一次更改。我现在已经修好了。感谢graph命令上的信息…对于有用的信息,请投一票!我在我的示例中做了同样的更改,但是你是说我提到的不适用于你使用
dependens\u on
或依赖资源的插值吗?你的
dependens\u on
是错误的。您需要指定完整的资源名称,例如
dependens\u on=[“aws\u launch\u configuration.lc\u name”]
。但理想情况下,您只需从LC资源中插入LC名称。对……就是这样。这是我的错,我在发布之前更改了东西的名称,但错过了一次更改。我现在已经修好了。感谢graph命令上的信息…对于有用的信息,请投一票!我在我的示例中做了同样的更改,但是你是说我提到的不适用于你使用
dependens\u on
或依赖资源的插值吗?你的
dependens\u on
是错误的。您需要指定完整的资源名称,例如
dependens\u on=[“aws\u launch\u configuration.lc\u name”]
。但理想情况下,您只需从LC资源中插入LC名称。对……就是这样。使用插值,现在可以工作了。