diff --git a/.changelog/44506.txt b/.changelog/44506.txt new file mode 100644 index 000000000000..afc50c962c1a --- /dev/null +++ b/.changelog/44506.txt @@ -0,0 +1,3 @@ +```release-note:bug +resource/aws_instance: Don't store invalid string in user_data attribute +``` diff --git a/internal/service/ec2/ec2_instance.go b/internal/service/ec2/ec2_instance.go index 6ec037f7bd37..f104302967d9 100644 --- a/internal/service/ec2/ec2_instance.go +++ b/internal/service/ec2/ec2_instance.go @@ -16,6 +16,7 @@ import ( "strconv" "strings" "time" + "unicode/utf8" "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" @@ -3382,7 +3383,12 @@ func resourceInstanceFlatten(ctx context.Context, client *conns.AWSClient, insta if err != nil { return sdkdiag.AppendErrorf(diags, "decoding user_data: %s", err) } - rd.Set("user_data", string(data)) + if utf8.Valid(data) { + rd.Set("user_data", string(data)) + } else { + // The user_data wasn't valid UTF-8, so we need to store it as base64 instead of as the raw string. + rd.Set("user_data_base64", attr.UserData.Value) + } } } }