diff --git a/.changelog/35960.txt b/.changelog/35960.txt new file mode 100644 index 00000000000..433b0e7004d --- /dev/null +++ b/.changelog/35960.txt @@ -0,0 +1,3 @@ +```release-note:bug +resource/aws_ssm_parameter: force create a new SSM parameter when `data_type` is updated. +``` \ No newline at end of file diff --git a/internal/service/ssm/parameter.go b/internal/service/ssm/parameter.go index 544385cfa6c..4b267ceccb5 100644 --- a/internal/service/ssm/parameter.go +++ b/internal/service/ssm/parameter.go @@ -63,6 +63,7 @@ func ResourceParameter() *schema.Resource { "aws:ssm:integration", "text", }, false), + ForceNew: true, }, "description": { Type: schema.TypeString, diff --git a/internal/service/ssm/parameter_test.go b/internal/service/ssm/parameter_test.go index 16f0dce6307..ab9b730da15 100644 --- a/internal/service/ssm/parameter_test.go +++ b/internal/service/ssm/parameter_test.go @@ -984,6 +984,42 @@ func TestAccSSMParameter_DataType_ssmIntegration(t *testing.T) { }) } +func TestAccSSMParameter_DataType_update(t *testing.T) { + ctx := acctest.Context(t) + var param ssm.Parameter + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_ssm_parameter.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.SSMServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckParameterDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccParameterConfig_dataTypeUpdate(rName, "text"), + Check: resource.ComposeTestCheckFunc( + testAccCheckParameterExists(ctx, resourceName, ¶m), + resource.TestCheckResourceAttr(resourceName, "data_type", "text"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"overwrite"}, + }, + { + Config: testAccParameterConfig_dataTypeUpdate(rName, "aws:ec2:image"), + Check: resource.ComposeTestCheckFunc( + testAccCheckParameterExists(ctx, resourceName, ¶m), + resource.TestCheckResourceAttr(resourceName, "data_type", "aws:ec2:image"), + ), + }, + }, + }) +} + func TestAccSSMParameter_Secure_key(t *testing.T) { ctx := acctest.Context(t) var param ssm.Parameter @@ -1328,6 +1364,19 @@ resource "aws_ssm_parameter" "test" { `, rName)) } +func testAccParameterConfig_dataTypeUpdate(rName, datatype string) string { + return acctest.ConfigCompose( + acctest.ConfigLatestAmazonLinux2HVMEBSX8664AMI(), + fmt.Sprintf(` +resource "aws_ssm_parameter" "test" { + name = %[1]q + data_type = %[2]q + type = "String" + value = data.aws_ami.amzn2-ami-minimal-hvm-ebs-x86_64.id +} +`, rName, datatype)) +} + func testAccParameterConfig_dataTypeSSMIntegration(rName string) string { // nosemgrep:ci.ssm-in-func-name return acctest.ConfigCompose( fmt.Sprintf(`