2016-09-06 7 views
4

シナリオ:私はAWSオートスケーリンググループ(ASG)を実行しており、terraform適用時に関連する起動設定を変更しました。 ASGは影響を受けません。terraformでオートスケーリンググループのEC2インスタンスを再作成するには?

このASG内のインスタンスを再作成するには(つまり、1つ1つ置き換えてローリング置換する)、変更された/新しい起動設定に基づいていますか?

私が試したこと: terraform taintを使用すると、次の適用時に破棄して再作成するリソースをマークすることができます。しかし、私は自動スケーリング・グループ(これはリソースであり、この場合は単一のインスタンスではありません)を汚染したくはありませんが、その中の単一のインスタンスです。単一のインスタンスを汚染する方法はありますか、間違った方向に考えていますか?

+0

なぜあなたはASGを影響を受けない状態にしますか?この状況での通常の使用例は、ASGとその内部のインスタンスをローリング置換することです。 – ydaetskcoR

+0

@ydaetskcoRはい、私が最終的に達成したいのは、それらを1つ1つ置き換えることです(それらを再スタックするか、ローリングを置き換える)。私が1つのインスタンスについて話したことは混乱しているので、質問を更新します。 – jckuester

答えて

9

通常は、Terraform's lifecycle managementを使用して古いリソースを破壊する前に新しいリソースを作成することです。あなたが起動構成を設定し、このようなグループを自動スケーリング可能性がある。この場合

:あなたは別のAMIテラフォームを使用するami_id変数を変更した場合

resource "aws_launch_configuration" "as_conf" { 
    name_prefix = "terraform-lc-example-" 
    image_id = "${var.ami_id}" 
    instance_type = "t1.micro" 

    lifecycle { 
     create_before_destroy = true 
    } 
} 

resource "aws_autoscaling_group" "bar" { 
    name = "terraform-asg-example-${aws_launch_configuration.as_conf.name}" 
    launch_configuration = "${aws_launch_configuration.as_conf.name}" 

    lifecycle { 
     create_before_destroy = true 
    } 
} 

は、それが起動設定を変更する必要が実現し、古いものを破壊する前に新しいものを作成してください。新しいLCによって生成された新しい名前は、ASG名で補間され、新しいASGが再構築されます。

create_before_destroy Terraformは新しいLCとASGを作成し、古いASGを破棄して古いLCを破棄する前に、新しいASGが目的の容量(ヘルスチェックで設定可能)に達するのを待ちます。

これは、ASGのすべてのインスタンスを一度に反転します。したがって、ASGで最低2の容量があれば、2つのインスタンスが作成され、両方が正常性チェックに合格すると、2つの古いインスタンスが破棄されます。あなたがASGでELBを使用している場合は、2つの新しいインスタンスをELBに参加させるため、一時的に4つのインスタンスをすべて使用してから古い2を破棄します。

+0

私は、min、max、およびdesired capacityをすべて1に設定しました。あなたの答えに基づいてこれを1,2、および1に変更しました。しかし、私は別のインスタンスを作成し、古いものを破壊するあなたの説明された動作を観察することはできません。代わりに何も起こりませんが、terraformは新しいLCを作成し、古いASGを修正しました。私も猶予期間を過ぎるのを待っていて、create_before_destroyはすでに設定されていました。 – jckuester

+0

注:ASG全体のインスタンスではなく、ASG全体を置き換えます。したがって、一時的に2つのASGがあり、それぞれに最低限のインスタンス数があります。 2番目のASGがヘルスチェックに合格すると、Terraformは古いASGを破壊し始めます。 – ydaetskcoR

+0

これは興味深いことですが、terraformは古いASGを変更するだけです(付加的なオンは一時的に作成されません)。あなたが観察している行動を達成するためにASGに他の議論を設定する必要はありませんか? – jckuester

0

これでは解決できませんテラフォームのみ。 、あなたは自動スケーリンググループのための起動設定を変更すると、すべての新しいインスタンスが新しい設定パラメータを使用して起動している

が、既存のインスタンスがに影響されません。このAWSドキュメント(http://docs.aws.amazon.com/autoscaling/latest/userguide/LaunchConfiguration.html)を参照してください。

関連する問題