[AWS CloudFormation] Classic Load BalancerのLoadBalancerNameの説明がよく分からない。

こんにちはY.Oです。
先日、Classic Load Balancerを含むCloudFormationテンプレートの変更セットを作成する機会があり、
ユーザーガイドのAWS::ElasticLoadBalancing::LoadBalancerを確認していましたところ、LoadBalancerNameについて気になる説明を見つけました。

重要

名前を指定すると、このリソースの置換が必要な更新はできません。「中断」が不要であるか、一定の中断が必要な更新であれば、行うことができます。リソースを置き換える必要がある場合は、新しい名前を指定します。
初めて見たとき、上記の説明がよく分かりませんでした。

特に、リソース置換を伴う更新の辺りが。

恐らく次のようなことだろうなぁと理解しました。

「LoadBalancerNameでLBの名前を設定している場合、リソース置換を伴うプロパティを更新する為には、
LoadBalancerNameで設定した名前も併せて更新する必要がある。」
理解が間違っているといけないので、実際に簡単なCloudFormationテンプレートを作って、
次の内容を試してみることにしました。

  • 設定したLoadBalancerNameを変更しないで、リソースの置換が必要なプロパティ更新を行う。
  • 設定したLoadBalancerNameを変更して、リソースの置換が必要なプロパティ更新を行う。


    まず、つぎのようなCloudFormationテンプレートでClassic Load Balancerを作ります。

    
    {
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Test ELB Stack",
    "Resources": {
    "TestELB": {
    "Type": "AWS::ElasticLoadBalancing::LoadBalancer",
    "Properties": {
    "LoadBalancerName" : "TestELB01",
    "Listeners": [ {
    "LoadBalancerPort" : "9000",
    "InstancePort" : "9000",
    "Protocol" : "TCP"
    } ],
    "Subnets" : [
    "subnet-5688dd1f", "subnet-c7f9789c"
    ]
    }
    }
    }
    }
    

    次に、リソースの置換が必要なプロパティの更新を行います。

    ユーザーガイドによると、HealthCheckを指定していない状態から指定するように変更すると、置換が必要な変更となるようです。
    まずはHealthCheckの初期値を確認しておきます。
    ELB_Pic01.png
    以下のような結果でした。
    Target : TCP:9000

    Timeout : 5

    Interval : 30

    UnhealthyThreshold : 2

    HealthyThreshold : 10

    これを踏まえて、次のような更新用のテンプレートを作成しました。

    Intervalを初期値より小さい20にしています。

    LoadBalancerNameはまだ変更していません。

    
    {
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Test ELB Stack",
    "Resources": {
    "TestELB": {
    "Type": "AWS::ElasticLoadBalancing::LoadBalancer",
    "Properties": {
    "LoadBalancerName" : "TestELB01",
    "Listeners": [ {
    "LoadBalancerPort" : "9000",
    "InstancePort" : "9000",
    "Protocol" : "TCP"
    } ],
    "Subnets" : [
    "subnet-5688dd1f", "subnet-c7f9789c"
    ],
    "HealthCheck" : {
    "Target" : "TCP:9000",
    "Timeout" : "5",
    "Interval" : "20",
    "UnhealthyThreshold" : "2",
    "HealthyThreshold" : "10"
    }
    }
    }
    }
    }
    

    変更セットを適用してみます。

    ELB_Pic02.png
    変更セットが失敗に終わり、ロールバックしてしまいました。

    「状況の理由」欄にもちゃんと「Rename TestELB01 and update the stack again.」と表示されていますね。
    次に、LoadBalancerNameを変えた変更セットを作ってみます。

    TestELB01からTestELB02へ変更しています。

    
    {
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Test ELB Stack",
    "Resources": {
    "TestELB": {
    "Type": "AWS::ElasticLoadBalancing::LoadBalancer",
    "Properties": {
    "LoadBalancerName" : "TestELB02",
    "Listeners": [ {
    "LoadBalancerPort" : "9000",
    "InstancePort" : "9000",
    "Protocol" : "TCP"
    } ],
    "Subnets" : [
    "subnet-5688dd1f", "subnet-c7f9789c"
    ],
    "HealthCheck" : {
    "Target" : "TCP:9000",
    "Timeout" : "5",
    "Interval" : "20",
    "UnhealthyThreshold" : "2",
    "HealthyThreshold" : "10"
    }
    }
    }
    }
    }
    

    変更セットを適用してみます。
    ELB_Pic03.png
    UPDATE_COMPLETEと表示されました。無事に置換が必要な適用が完了しました。
    念のため、ロードバランサーのヘルスチェックも確認します。
    ELB_Pic04.png
    こちらもちゃんと間隔が20秒に変更されました。


    理解は間違っていなかったようです。よかった!

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA