diff --git a/.changelog/22996.txt b/.changelog/22996.txt new file mode 100644 index 000000000000..e1dc74c866b0 --- /dev/null +++ b/.changelog/22996.txt @@ -0,0 +1,3 @@ +```release-note:breaking-change +resource/aws_lb_target_group: For `protocol = "TCP"`, `stickiness` can no longer be type set to `lb_cookie` even when `enabled = false`; instead use type `source_ip` +``` diff --git a/internal/service/elbv2/target_group.go b/internal/service/elbv2/target_group.go index 886d23286a63..71a44e75bf94 100644 --- a/internal/service/elbv2/target_group.go +++ b/internal/service/elbv2/target_group.go @@ -252,16 +252,6 @@ func ResourceTargetGroup() *schema.Resource { "app_cookie", // Only for ALBs "source_ip", // Only for NLBs }, false), - DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool { - switch d.Get("protocol").(string) { - case elbv2.ProtocolEnumTcp, elbv2.ProtocolEnumUdp, elbv2.ProtocolEnumTcpUdp, elbv2.ProtocolEnumTls: - if new == "lb_cookie" && !d.Get("stickiness.0.enabled").(bool) { - log.Printf("[WARN] invalid configuration, this will fail in a future version: stickiness enabled %v, protocol %s, type %s", d.Get("stickiness.0.enabled").(bool), d.Get("protocol").(string), new) - return true - } - } - return false - }, }, }, }, @@ -469,41 +459,37 @@ func resourceTargetGroupCreate(d *schema.ResourceData, meta interface{}) error { stickinessBlocks := v.([]interface{}) stickiness := stickinessBlocks[0].(map[string]interface{}) - if !stickiness["enabled"].(bool) && (stickiness["type"].(string) == "lb_cookie" || stickiness["type"].(string) == "app_cookie") && d.Get("protocol").(string) != elbv2.ProtocolEnumHttp && d.Get("protocol").(string) != elbv2.ProtocolEnumHttps { - log.Printf("[WARN] invalid configuration, this will fail in a future version: stickiness enabled %v, protocol %s, type %s", stickiness["enabled"].(bool), d.Get("protocol").(string), stickiness["type"].(string)) - } else { - attrs = append(attrs, - &elbv2.TargetGroupAttribute{ - Key: aws.String("stickiness.enabled"), - Value: aws.String(strconv.FormatBool(stickiness["enabled"].(bool))), - }, - &elbv2.TargetGroupAttribute{ - Key: aws.String("stickiness.type"), - Value: aws.String(stickiness["type"].(string)), - }) + attrs = append(attrs, + &elbv2.TargetGroupAttribute{ + Key: aws.String("stickiness.enabled"), + Value: aws.String(strconv.FormatBool(stickiness["enabled"].(bool))), + }, + &elbv2.TargetGroupAttribute{ + Key: aws.String("stickiness.type"), + Value: aws.String(stickiness["type"].(string)), + }) - switch d.Get("protocol").(string) { - case elbv2.ProtocolEnumHttp, elbv2.ProtocolEnumHttps: - switch stickiness["type"].(string) { - case "lb_cookie": - attrs = append(attrs, - &elbv2.TargetGroupAttribute{ - Key: aws.String("stickiness.lb_cookie.duration_seconds"), - Value: aws.String(fmt.Sprintf("%d", stickiness["cookie_duration"].(int))), - }) - case "app_cookie": - attrs = append(attrs, - &elbv2.TargetGroupAttribute{ - Key: aws.String("stickiness.app_cookie.duration_seconds"), - Value: aws.String(fmt.Sprintf("%d", stickiness["cookie_duration"].(int))), - }, - &elbv2.TargetGroupAttribute{ - Key: aws.String("stickiness.app_cookie.cookie_name"), - Value: aws.String(stickiness["cookie_name"].(string)), - }) - default: - log.Printf("[WARN] Unexpected stickiness type. Expected lb_cookie or app_cookie, got %s", stickiness["type"].(string)) - } + switch d.Get("protocol").(string) { + case elbv2.ProtocolEnumHttp, elbv2.ProtocolEnumHttps: + switch stickiness["type"].(string) { + case "lb_cookie": + attrs = append(attrs, + &elbv2.TargetGroupAttribute{ + Key: aws.String("stickiness.lb_cookie.duration_seconds"), + Value: aws.String(fmt.Sprintf("%d", stickiness["cookie_duration"].(int))), + }) + case "app_cookie": + attrs = append(attrs, + &elbv2.TargetGroupAttribute{ + Key: aws.String("stickiness.app_cookie.duration_seconds"), + Value: aws.String(fmt.Sprintf("%d", stickiness["cookie_duration"].(int))), + }, + &elbv2.TargetGroupAttribute{ + Key: aws.String("stickiness.app_cookie.cookie_name"), + Value: aws.String(stickiness["cookie_name"].(string)), + }) + default: + log.Printf("[WARN] Unexpected stickiness type. Expected lb_cookie or app_cookie, got %s", stickiness["type"].(string)) } } } @@ -700,41 +686,37 @@ func resourceTargetGroupUpdate(d *schema.ResourceData, meta interface{}) error { if len(stickinessBlocks) == 1 { stickiness := stickinessBlocks[0].(map[string]interface{}) - if !stickiness["enabled"].(bool) && (stickiness["type"].(string) == "lb_cookie" || stickiness["type"].(string) == "app_cookie") && d.Get("protocol").(string) != elbv2.ProtocolEnumHttp && d.Get("protocol").(string) != elbv2.ProtocolEnumHttps { - log.Printf("[WARN] invalid configuration, this will fail in a future version: stickiness enabled %v, protocol %s, type %s", stickiness["enabled"].(bool), d.Get("protocol").(string), stickiness["type"].(string)) - } else { - attrs = append(attrs, - &elbv2.TargetGroupAttribute{ - Key: aws.String("stickiness.enabled"), - Value: aws.String(strconv.FormatBool(stickiness["enabled"].(bool))), - }, - &elbv2.TargetGroupAttribute{ - Key: aws.String("stickiness.type"), - Value: aws.String(stickiness["type"].(string)), - }) + attrs = append(attrs, + &elbv2.TargetGroupAttribute{ + Key: aws.String("stickiness.enabled"), + Value: aws.String(strconv.FormatBool(stickiness["enabled"].(bool))), + }, + &elbv2.TargetGroupAttribute{ + Key: aws.String("stickiness.type"), + Value: aws.String(stickiness["type"].(string)), + }) - switch d.Get("protocol").(string) { - case elbv2.ProtocolEnumHttp, elbv2.ProtocolEnumHttps: - switch stickiness["type"].(string) { - case "lb_cookie": - attrs = append(attrs, - &elbv2.TargetGroupAttribute{ - Key: aws.String("stickiness.lb_cookie.duration_seconds"), - Value: aws.String(fmt.Sprintf("%d", stickiness["cookie_duration"].(int))), - }) - case "app_cookie": - attrs = append(attrs, - &elbv2.TargetGroupAttribute{ - Key: aws.String("stickiness.app_cookie.duration_seconds"), - Value: aws.String(fmt.Sprintf("%d", stickiness["cookie_duration"].(int))), - }, - &elbv2.TargetGroupAttribute{ - Key: aws.String("stickiness.app_cookie.cookie_name"), - Value: aws.String(stickiness["cookie_name"].(string)), - }) - default: - log.Printf("[WARN] Unexpected stickiness type. Expected lb_cookie or app_cookie, got %s", stickiness["type"].(string)) - } + switch d.Get("protocol").(string) { + case elbv2.ProtocolEnumHttp, elbv2.ProtocolEnumHttps: + switch stickiness["type"].(string) { + case "lb_cookie": + attrs = append(attrs, + &elbv2.TargetGroupAttribute{ + Key: aws.String("stickiness.lb_cookie.duration_seconds"), + Value: aws.String(fmt.Sprintf("%d", stickiness["cookie_duration"].(int))), + }) + case "app_cookie": + attrs = append(attrs, + &elbv2.TargetGroupAttribute{ + Key: aws.String("stickiness.app_cookie.duration_seconds"), + Value: aws.String(fmt.Sprintf("%d", stickiness["cookie_duration"].(int))), + }, + &elbv2.TargetGroupAttribute{ + Key: aws.String("stickiness.app_cookie.cookie_name"), + Value: aws.String(stickiness["cookie_name"].(string)), + }) + default: + log.Printf("[WARN] Unexpected stickiness type. Expected lb_cookie or app_cookie, got %s", stickiness["type"].(string)) } } } else if len(stickinessBlocks) == 0 { diff --git a/internal/service/elbv2/target_group_test.go b/internal/service/elbv2/target_group_test.go index 717580a33a0c..1ee79c183a88 100644 --- a/internal/service/elbv2/target_group_test.go +++ b/internal/service/elbv2/target_group_test.go @@ -122,7 +122,7 @@ func TestAccELBV2TargetGroup_backwardsCompatibility(t *testing.T) { }) } -func TestAccELBV2TargetGroup_protocolVersion(t *testing.T) { +func TestAccELBV2TargetGroup_ProtocolVersion_basic(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -167,7 +167,7 @@ func TestAccELBV2TargetGroup_protocolVersion(t *testing.T) { }) } -func TestAccELBV2TargetGroup_ProtocolVersionGRPC_healthCheck(t *testing.T) { +func TestAccELBV2TargetGroup_ProtocolVersion_grpcHealthCheck(t *testing.T) { var targetGroup1 elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -191,7 +191,7 @@ func TestAccELBV2TargetGroup_ProtocolVersionGRPC_healthCheck(t *testing.T) { }) } -func TestAccELBV2TargetGroup_ProtocolVersionHTTPGRPC_update(t *testing.T) { +func TestAccELBV2TargetGroup_ProtocolVersion_grpcUpdate(t *testing.T) { var targetGroup1 elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -222,7 +222,7 @@ func TestAccELBV2TargetGroup_ProtocolVersionHTTPGRPC_update(t *testing.T) { }) } -func TestAccELBV2TargetGroup_ProtocolTCPHealthCheck_protocol(t *testing.T) { +func TestAccELBV2TargetGroup_HealthCheck_tcp(t *testing.T) { var targetGroup1, targetGroup2 elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -254,7 +254,7 @@ func TestAccELBV2TargetGroup_ProtocolTCPHealthCheck_protocol(t *testing.T) { }) } -func TestAccELBV2TargetGroup_Protocol_tls(t *testing.T) { +func TestAccELBV2TargetGroup_tls(t *testing.T) { var targetGroup1 elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -276,7 +276,7 @@ func TestAccELBV2TargetGroup_Protocol_tls(t *testing.T) { }) } -func TestAccELBV2TargetGroup_TCP_httpHealthCheck(t *testing.T) { +func TestAccELBV2TargetGroup_HealthCheck_tcpHTTPS(t *testing.T) { var confBefore, confAfter elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -413,7 +413,7 @@ func TestAccELBV2TargetGroup_basic(t *testing.T) { }) } -func TestAccELBV2TargetGroup_basicUdp(t *testing.T) { +func TestAccELBV2TargetGroup_udp(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -444,7 +444,7 @@ func TestAccELBV2TargetGroup_basicUdp(t *testing.T) { }) } -func TestAccELBV2TargetGroup_changeNameForceNew(t *testing.T) { +func TestAccELBV2TargetGroup_ForceNew_name(t *testing.T) { var before, after elbv2.TargetGroup rNameBefore := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) rNameAfter := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -474,7 +474,7 @@ func TestAccELBV2TargetGroup_changeNameForceNew(t *testing.T) { }) } -func TestAccELBV2TargetGroup_changePortForceNew(t *testing.T) { +func TestAccELBV2TargetGroup_ForceNew_port(t *testing.T) { var before, after elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -503,7 +503,7 @@ func TestAccELBV2TargetGroup_changePortForceNew(t *testing.T) { }) } -func TestAccELBV2TargetGroup_changeProtocolForceNew(t *testing.T) { +func TestAccELBV2TargetGroup_ForceNew_protocol(t *testing.T) { var before, after elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -532,7 +532,7 @@ func TestAccELBV2TargetGroup_changeProtocolForceNew(t *testing.T) { }) } -func TestAccELBV2TargetGroup_changeVPCForceNew(t *testing.T) { +func TestAccELBV2TargetGroup_ForceNew_vpc(t *testing.T) { var before, after elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -669,7 +669,7 @@ protocol = "TCP" }) } -func TestAccELBV2TargetGroup_enableHealthCheck(t *testing.T) { +func TestAccELBV2TargetGroup_HealthCheck_enable(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -704,7 +704,7 @@ func TestAccELBV2TargetGroup_enableHealthCheck(t *testing.T) { }) } -func TestAccELBV2TargetGroup_generatedName(t *testing.T) { +func TestAccELBV2TargetGroup_Name_generated(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -725,7 +725,7 @@ func TestAccELBV2TargetGroup_generatedName(t *testing.T) { }) } -func TestAccELBV2TargetGroup_namePrefix(t *testing.T) { +func TestAccELBV2TargetGroup_Name_prefix(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -907,7 +907,7 @@ func TestAccELBV2TargetGroup_preserveClientIPValid(t *testing.T) { }) } -func TestAccELBV2TargetGroup_protocolGeneve(t *testing.T) { +func TestAccELBV2TargetGroup_Geneve_basic(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -941,7 +941,7 @@ func TestAccELBV2TargetGroup_protocolGeneve(t *testing.T) { }) } -func TestAccELBV2TargetGroup_protocolGeneveNotSticky(t *testing.T) { +func TestAccELBV2TargetGroup_Geneve_notSticky(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -981,7 +981,7 @@ func TestAccELBV2TargetGroup_protocolGeneveNotSticky(t *testing.T) { }) } -func TestAccELBV2TargetGroup_stickinessDefaultALB(t *testing.T) { +func TestAccELBV2TargetGroup_Stickiness_defaultALB(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -1005,7 +1005,7 @@ func TestAccELBV2TargetGroup_stickinessDefaultALB(t *testing.T) { }) } -func TestAccELBV2TargetGroup_stickinessDefaultNLB(t *testing.T) { +func TestAccELBV2TargetGroup_Stickiness_defaultNLB(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -1047,7 +1047,7 @@ func TestAccELBV2TargetGroup_stickinessDefaultNLB(t *testing.T) { }) } -func TestAccELBV2TargetGroup_stickinessInvalidALB(t *testing.T) { +func TestAccELBV2TargetGroup_Stickiness_invalidALB(t *testing.T) { rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resource.ParallelTest(t, resource.TestCase{ @@ -1077,7 +1077,7 @@ func TestAccELBV2TargetGroup_stickinessInvalidALB(t *testing.T) { }) } -func TestAccELBV2TargetGroup_stickinessInvalidNLB(t *testing.T) { +func TestAccELBV2TargetGroup_Stickiness_invalidNLB(t *testing.T) { rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resource.ParallelTest(t, resource.TestCase{ @@ -1090,6 +1090,10 @@ func TestAccELBV2TargetGroup_stickinessInvalidNLB(t *testing.T) { Config: testAccTargetGroupConfig_stickinessValidity(rName, "TCP", "lb_cookie", true), ExpectError: regexp.MustCompile("Stickiness type 'lb_cookie' is not supported for target groups with"), }, + { + Config: testAccTargetGroupConfig_stickinessValidity(rName, "TCP", "lb_cookie", false), + ExpectError: regexp.MustCompile("Stickiness type 'lb_cookie' is not supported for target groups with"), + }, { Config: testAccTargetGroupConfig_stickinessValidity(rName, "UDP", "lb_cookie", true), ExpectError: regexp.MustCompile("Stickiness type 'lb_cookie' is not supported for target groups with"), @@ -1102,7 +1106,7 @@ func TestAccELBV2TargetGroup_stickinessInvalidNLB(t *testing.T) { }) } -func TestAccELBV2TargetGroup_stickinessValidALB(t *testing.T) { +func TestAccELBV2TargetGroup_Stickiness_validALB(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -1137,7 +1141,7 @@ func TestAccELBV2TargetGroup_stickinessValidALB(t *testing.T) { }) } -func TestAccELBV2TargetGroup_stickinessValidNLB(t *testing.T) { +func TestAccELBV2TargetGroup_Stickiness_validNLB(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -1157,15 +1161,6 @@ func TestAccELBV2TargetGroup_stickinessValidNLB(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "stickiness.0.type", "source_ip"), ), }, - { - // this test should be invalid but allowed to avoid breaking changes - Config: testAccTargetGroupConfig_stickinessValidity(rName, "TCP", "lb_cookie", false), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckTargetGroupExists(resourceName, &conf), - resource.TestCheckResourceAttr(resourceName, "stickiness.#", "1"), - resource.TestCheckResourceAttr(resourceName, "stickiness.0.enabled", "false"), - ), - }, { Config: testAccTargetGroupConfig_stickinessValidity(rName, "TCP", "source_ip", true), Check: resource.ComposeAggregateTestCheckFunc( @@ -1237,7 +1232,7 @@ func TestAccELBV2TargetGroup_tags(t *testing.T) { }) } -func TestAccELBV2TargetGroup_updateAppStickinessEnabled(t *testing.T) { +func TestAccELBV2TargetGroup_Stickiness_updateAppEnabled(t *testing.T) { var conf elbv2.TargetGroup targetGroupName := fmt.Sprintf("test-target-group-%s", sdkacctest.RandString(10)) resourceName := "aws_lb_target_group.test" @@ -1325,7 +1320,7 @@ func TestAccELBV2TargetGroup_updateAppStickinessEnabled(t *testing.T) { }) } -func TestAccELBV2TargetGroup_updateHealthCheck(t *testing.T) { +func TestAccELBV2TargetGroup_HealthCheck_update(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -1390,7 +1385,7 @@ func TestAccELBV2TargetGroup_updateHealthCheck(t *testing.T) { }) } -func TestAccELBV2TargetGroup_updateStickinessEnabled(t *testing.T) { +func TestAccELBV2TargetGroup_Stickiness_updateEnabled(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -1476,7 +1471,7 @@ func TestAccELBV2TargetGroup_updateStickinessEnabled(t *testing.T) { }) } -func TestAccELBV2TargetGroup_withoutHealthCheck(t *testing.T) { +func TestAccELBV2TargetGroup_HealthCheck_without(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_lb_target_group.test" @@ -1501,7 +1496,7 @@ func TestAccELBV2TargetGroup_withoutHealthCheck(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_basic(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_basic(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_alb_target_group.test" @@ -1545,7 +1540,7 @@ func TestAccELBV2TargetGroup_A_basic(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_changeNameForceNew(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_changeNameForceNew(t *testing.T) { var before, after elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) rNameAfter := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -1575,7 +1570,7 @@ func TestAccELBV2TargetGroup_A_changeNameForceNew(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_changePortForceNew(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_changePortForceNew(t *testing.T) { var before, after elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_alb_target_group.test" @@ -1604,7 +1599,7 @@ func TestAccELBV2TargetGroup_A_changePortForceNew(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_changeProtocolForceNew(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_changeProtocolForceNew(t *testing.T) { var before, after elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_alb_target_group.test" @@ -1633,7 +1628,7 @@ func TestAccELBV2TargetGroup_A_changeProtocolForceNew(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_changeVPCForceNew(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_changeVPCForceNew(t *testing.T) { var before, after elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_alb_target_group.test" @@ -1660,7 +1655,7 @@ func TestAccELBV2TargetGroup_A_changeVPCForceNew(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_generatedName(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_generatedName(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_alb_target_group.test" @@ -1681,7 +1676,7 @@ func TestAccELBV2TargetGroup_A_generatedName(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_lambda(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_lambda(t *testing.T) { var targetGroup1 elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_alb_target_group.test" @@ -1716,7 +1711,7 @@ func TestAccELBV2TargetGroup_A_lambda(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_lambdaMultiValueHeadersEnabled(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_lambdaMultiValueHeadersEnabled(t *testing.T) { var targetGroup1 elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_alb_target_group.test" @@ -1767,7 +1762,7 @@ func TestAccELBV2TargetGroup_A_lambdaMultiValueHeadersEnabled(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_missingPortProtocolVPC(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_missingPortProtocolVPC(t *testing.T) { rName := fmt.Sprintf("test-target-group-%s", sdkacctest.RandString(10)) resource.ParallelTest(t, resource.TestCase{ @@ -1792,7 +1787,7 @@ func TestAccELBV2TargetGroup_A_missingPortProtocolVPC(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_namePrefix(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_namePrefix(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_alb_target_group.test" @@ -1814,7 +1809,7 @@ func TestAccELBV2TargetGroup_A_namePrefix(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_setAndUpdateSlowStart(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_setAndUpdateSlowStart(t *testing.T) { var before, after elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_alb_target_group.test" @@ -1843,7 +1838,7 @@ func TestAccELBV2TargetGroup_A_setAndUpdateSlowStart(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_tags(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_tags(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_alb_target_group.test" @@ -1875,7 +1870,7 @@ func TestAccELBV2TargetGroup_A_tags(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_updateHealthCheck(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_updateHealthCheck(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_alb_target_group.test" @@ -1938,7 +1933,7 @@ func TestAccELBV2TargetGroup_A_updateHealthCheck(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_updateLoadBalancingAlgorithmType(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_updateLoadBalancingAlgorithmType(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_alb_target_group.test" @@ -1980,7 +1975,7 @@ func TestAccELBV2TargetGroup_A_updateLoadBalancingAlgorithmType(t *testing.T) { }) } -func TestAccELBV2TargetGroup_A_updateStickinessEnabled(t *testing.T) { +func TestAccELBV2TargetGroup_ALBAlias_updateStickinessEnabled(t *testing.T) { var conf elbv2.TargetGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_alb_target_group.test" diff --git a/website/docs/guides/version-4-upgrade.html.md b/website/docs/guides/version-4-upgrade.html.md index 1a28d78a6c8c..5555238de458 100644 --- a/website/docs/guides/version-4-upgrade.html.md +++ b/website/docs/guides/version-4-upgrade.html.md @@ -49,6 +49,7 @@ Upgrade topics: - [Resource: aws_elasticache_global_replication_group](#resource-aws_elasticache_global_replication_group) - [Resource: aws_elasticache_replication_group](#resource-aws_elasticache_replication_group) - [Resource: aws_fsx_ontap_storage_virtual_machine](#resource-aws_fsx_ontap_storage_virtual_machine) +- [Resource: aws_lb_target_group](#resource-aws_lb_target_group) - [Resource: aws_network_interface](#resource-aws_network_interface) - [Resource: aws_s3_bucket](#resource-aws_s3_bucket) - [Resource: aws_s3_bucket_object](#resource-aws_s3_bucket_object) @@ -750,6 +751,42 @@ output "elasticache_global_replication_group_version_result" { We removed the misspelled argument `active_directory_configuration.0.self_managed_active_directory_configuration.0.organizational_unit_distinguidshed_name` that was previously deprecated. Use `active_directory_configuration.0.self_managed_active_directory_configuration.0.organizational_unit_distinguished_name` now instead. Terraform will automatically migrate the state to `active_directory_configuration.0.self_managed_active_directory_configuration.0.organizational_unit_distinguished_name` during planning. +## Resource: aws_lb_target_group + + +For `protocol = "TCP"`, `stickiness.type` can no longer be set to `lb_cookie` even when `enabled = false`. Instead, either change the `protocol` to `"HTTP"` or `"HTTPS"`, or change `stickiness.type` to `"source_ip"`. + +For example, this configuration is no longer valid: + +```terraform +resource "aws_lb_target_group" "test" { + port = 25 + protocol = "TCP" + vpc_id = aws_vpc.test.id + + stickiness { + type = "lb_cookie" + enabled = false + } +} +``` + +To fix this, we change the `stickiness.type` to `"source_ip"`. + +```terraform +resource "aws_lb_target_group" "test" { + port = 25 + protocol = "TCP" + vpc_id = aws_vpc.test.id + + stickiness { + type = "source_ip" + enabled = false + } +} +``` + + ## Resource: aws_network_interface !> **WARNING:** This topic is placeholder documentation. @@ -855,7 +892,7 @@ resource "aws_s3_bucket" "example" { resource "aws_s3_bucket_cors_configuration" "example" { bucket = aws_s3_bucket.example.id - + cors_rule { allowed_headers = ["*"] allowed_methods = ["PUT", "POST"] @@ -910,7 +947,7 @@ resource "aws_s3_bucket" "example" { days = 90 } } - + lifecycle_rule { id = "tmp" prefix = "tmp/" @@ -944,7 +981,7 @@ resource "aws_s3_bucket" "example" { resource "aws_s3_bucket_lifecycle_configuration" "example" { bucket = aws_s3_bucket.example.id - + rule { id = "log" status = "Enabled" @@ -1240,9 +1277,9 @@ For example, given this previous configuration: ```terraform resource "aws_s3_bucket" "source" { provider = aws.central - + # ... other configuration ... - + replication_configuration { role = aws_iam_role.replication.arn rules { @@ -1292,7 +1329,7 @@ resource "aws_s3_bucket" "source" { resource "aws_s3_bucket_replication_configuration" "example" { bucket = aws_s3_bucket.source.id role = aws_iam_role.replication.arn - + rule { id = "foobar" status = "Enabled"