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 如何使用terraform重新创建自动缩放组的EC2实例?_Amazon Web Services_Autoscaling_Terraform - Fatal编程技术网

Amazon web services 如何使用terraform重新创建自动缩放组的EC2实例?

Amazon web services 如何使用terraform重新创建自动缩放组的EC2实例?,amazon-web-services,autoscaling,terraform,Amazon Web Services,Autoscaling,Terraform,场景:我正在运行一个AWS自动校准组(ASG),并且在terraform应用期间更改了相关的启动配置。ASG不受影响 我现在如何在该ASG中重新创建实例(即,逐个替换以进行滚动替换),这将基于更改/新的启动配置 我尝试过的:使用terraform,人们可以在下一次应用中标记要销毁和重新创建的资源。但是,我不想污染autoscaling组(这是一个资源,在本例中不是单个实例),而是它中的单个实例。有没有一种方法可以污染单个实例,或者我的想法是错误的?这里通常要做的事情是在销毁旧的资源之前使用它来强

场景:我正在运行一个AWS自动校准组(ASG),并且在terraform应用期间更改了相关的启动配置。ASG不受影响

我现在如何在该ASG中重新创建实例(即,逐个替换以进行滚动替换),这将基于更改/新的启动配置


我尝试过的:使用terraform,人们可以在下一次应用中标记要销毁和重新创建的资源。但是,我不想污染autoscaling组(这是一个资源,在本例中不是单个实例),而是它中的单个实例。有没有一种方法可以污染单个实例,或者我的想法是错误的?

这里通常要做的事情是在销毁旧的资源之前使用它来强制创建新的资源

在这种情况下,您可以设置启动配置和自动缩放组,如下所示:

resource“aws\u启动\u配置”“作为\u配置”{
name_prefix=“terraform lc示例-
image_id=“${var.ami_id}”
实例_type=“t1.micro”
生命周期{
在销毁之前创建=真
}
}
资源“aws\U自动缩放\U组”“栏”{
name=“terraform asg示例-${aws_launch_configuration.as_conf.name}”
launch_configuration=“${aws_launch_configuration.as_conf.name}”
生命周期{
在销毁之前创建=真
}
}
然后,如果将
ami\u id
变量更改为使用另一个ami地形,它将意识到必须更改启动配置,因此在销毁旧配置之前创建一个新配置。然后,新LC生成的新名称插入ASG名称中,强制重新生成新ASG

当您使用
create\u before\u destroy
Terraform将创建新的LC和ASG,并在销毁旧的ASG和旧的LC之前等待新的ASG达到所需的容量(可通过健康检查进行配置)


这将一次翻转ASG中的所有实例。因此,如果ASG中的最小容量为2,那么这将再创建2个实例,一旦这两个实例都通过运行状况检查,那么2个旧实例将被销毁。如果您将ELB与ASG一起使用,那么它将把2个新实例加入ELB,因此,在销毁旧的2个实例之前,您将暂时让所有4个实例都在使用中。

这里通常要做的是,在销毁旧的资源之前,使用它强制创建新的资源

在这种情况下,您可以设置启动配置和自动缩放组,如下所示:

resource“aws\u启动\u配置”“作为\u配置”{
name_prefix=“terraform lc示例-
image_id=“${var.ami_id}”
实例_type=“t1.micro”
生命周期{
在销毁之前创建=真
}
}
资源“aws\U自动缩放\U组”“栏”{
name=“terraform asg示例-${aws_launch_configuration.as_conf.name}”
launch_configuration=“${aws_launch_configuration.as_conf.name}”
生命周期{
在销毁之前创建=真
}
}
然后,如果将
ami\u id
变量更改为使用另一个ami地形,它将意识到必须更改启动配置,因此在销毁旧配置之前创建一个新配置。然后,新LC生成的新名称插入ASG名称中,强制重新生成新ASG

当您使用
create\u before\u destroy
Terraform将创建新的LC和ASG,并在销毁旧的ASG和旧的LC之前等待新的ASG达到所需的容量(可通过健康检查进行配置)


这将一次翻转ASG中的所有实例。因此,如果ASG中的最小容量为2,那么这将再创建2个实例,一旦这两个实例都通过运行状况检查,那么2个旧实例将被销毁。如果您将ELB与ASG一起使用,那么它将把2个新实例连接到ELB,因此,在销毁旧的2个实例之前,您将暂时使用所有4个实例。

仅使用terraform无法解决此问题。请参阅此AWS文档():

更改自动缩放组的启动配置时,将使用新配置参数启动任何新实例,但现有实例不受影响


你不能单独用地形来解决这个问题。请参阅此AWS文档():

更改自动缩放组的启动配置时,将使用新配置参数启动任何新实例,但现有实例不受影响


这本身并不是一个答案,但我也在努力解决这个问题。在一种情况下是一般的,在另一种情况下是库伯内特斯

我最终写了一个开源服务来观看和自动滚动更新。它应该可以解决这个问题,但它是新的,非常乐意得到反馈/问题/PRs


这本身不是一个答案,但我也在努力解决这个问题。在一种情况下是一般的,在另一种情况下是库伯内特斯

我最终写了一个开源服务来观看和自动滚动更新。它应该可以解决这个问题,但它是新的,非常乐意得到反馈/问题/PRs


为什么您希望ASG不受影响?这种情况下的正常用例是滚动替换ASG及其内部的实例。@ydaetskcoR是的,我最终想要实现的是一个接一个地替换它们(也称为重新打包或进行滚动替换)。我说的是一个实例,这让人困惑,所以我更新了这个问题。为什么你希望ASG不受影响?这种情况下的正常用例是滚动替换ASG及其内部的实例。@ydaetskcoR是的,我最终想要实现的是一个接一个地替换它们(也称为重新打包或进行滚动替换)。我谈到了一个实例,这让人很困惑,所以我更新了这个问题。我设置了最小容量、最大容量和所需容量