diff --git a/aws/resource_aws_ssm_parameter.go b/aws/resource_aws_ssm_parameter.go index 6aef7c26db8e..fe5e66e1fcbe 100644 --- a/aws/resource_aws_ssm_parameter.go +++ b/aws/resource_aws_ssm_parameter.go @@ -214,7 +214,7 @@ func resourceAwsSsmParameterPut(d *schema.ResourceData, meta interface{}) error paramInput.Description = aws.String(n.(string)) } - if keyID, ok := d.GetOk("key_id"); ok { + if keyID, ok := d.GetOk("key_id"); d.Get("type") == "SecureString" && ok { log.Printf("[DEBUG] Setting key_id for SSM Parameter %v: %s", d.Get("name"), keyID) paramInput.SetKeyId(keyID.(string)) } diff --git a/aws/resource_aws_ssm_parameter_test.go b/aws/resource_aws_ssm_parameter_test.go index 22a86267c686..244248c98ec6 100644 --- a/aws/resource_aws_ssm_parameter_test.go +++ b/aws/resource_aws_ssm_parameter_test.go @@ -182,6 +182,36 @@ func TestAccAWSSSMParameter_tags(t *testing.T) { }) } +func TestAccAWSSSMParameter_updateType(t *testing.T) { + var param ssm.Parameter + name := fmt.Sprintf("%s_%s", t.Name(), acctest.RandString(10)) + resourceName := "aws_ssm_parameter.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSSSMParameterDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSSSMParameterBasicConfig(name, "SecureString", "test2"), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"overwrite"}, + }, + { + Config: testAccAWSSSMParameterBasicConfigTypeUpdated(name, "String", "test2"), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSSSMParameterExists(resourceName, ¶m), + resource.TestCheckResourceAttr(resourceName, "type", "String"), + ), + }, + }, + }) +} + func TestAccAWSSSMParameter_updateDescription(t *testing.T) { var param ssm.Parameter name := fmt.Sprintf("%s_%s", t.Name(), acctest.RandString(10)) @@ -508,6 +538,20 @@ resource "aws_ssm_parameter" "test" { `, rName, tagKey1, tagValue1, tagKey2, tagValue2) } +func testAccAWSSSMParameterBasicConfigTypeUpdated(rName, pType, value string) string { + return fmt.Sprintf(` +resource "aws_ssm_parameter" "test" { + name = "%s" + type = "%s" + value = "%s" + + tags = { + Name = "My Parameter" + } +} +`, rName, pType, value) +} + func testAccAWSSSMParameterBasicConfigOverwrite(rName, pType, value string) string { return fmt.Sprintf(` resource "aws_ssm_parameter" "test" {