Skip to content

Commit a16984b

Browse files
authored
Merge pull request #32354 from hashicorp/td-migrate-timestreamwrite-to-aws-sdk-v2
Tech debt: Migrate `timestreamwrite` resources to AWS SDK for Go v2
2 parents ae723c0 + 3efdc4d commit a16984b

18 files changed

+620
-343
lines changed

.changelog/32354.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/aws_timestreamwrite_table: Add `schema` configuration block
3+
```

go.mod

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ require (
5151
github.com/aws/aws-sdk-go-v2/service/ssmcontacts v1.15.6
5252
github.com/aws/aws-sdk-go-v2/service/ssmincidents v1.21.6
5353
github.com/aws/aws-sdk-go-v2/service/swf v1.15.2
54+
github.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.17.2
5455
github.com/aws/aws-sdk-go-v2/service/transcribe v1.26.8
5556
github.com/aws/aws-sdk-go-v2/service/verifiedpermissions v1.0.2
5657
github.com/aws/aws-sdk-go-v2/service/vpclattice v1.0.7
@@ -107,6 +108,7 @@ require (
107108
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.28 // indirect
108109
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34 // indirect
109110
github.com/aws/aws-sdk-go-v2/service/iam v1.20.2 // indirect
111+
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.28 // indirect
110112
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.28 // indirect
111113
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.14.3 // indirect
112114
github.com/aws/aws-sdk-go-v2/service/sso v1.12.12 // indirect

go.sum

+4
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ github.com/aws/aws-sdk-go-v2/service/identitystore v1.16.13 h1:xYUE2IwzSq1rNK9uf
7777
github.com/aws/aws-sdk-go-v2/service/identitystore v1.16.13/go.mod h1:siVgFYduB/ThkiyUhVIBQ5AG3wBpbFho4KIQOHQLR2s=
7878
github.com/aws/aws-sdk-go-v2/service/inspector2 v1.15.0 h1:68YcB08CjQnszydJGLtT6qxxpcCiN8RymaQfZwhZA3I=
7979
github.com/aws/aws-sdk-go-v2/service/inspector2 v1.15.0/go.mod h1:a2EqXrt+5o49Cnp4iMc2Tpt38ZUiX8aJsNy9ZzH+y/s=
80+
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.28 h1:/D994rtMQd1jQ2OY+7tvUlMlrv1L1c7Xtma/FhkbVtY=
81+
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.28/go.mod h1:3bJI2pLY3ilrqO5EclusI1GbjFJh1iXYrhOItf2sjKw=
8082
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27/go.mod h1:EOwBD4J4S5qYszS5/3DpkejfuK+Z5/1uzICfPaZLtqw=
8183
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.28 h1:bkRyG4a929RCnpVSTvLM2j/T4ls015ZhhYApbmYs15s=
8284
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.28/go.mod h1:jj7znCIg05jXlaGBlFMGP8+7UN3VtCkRBG2spnmRQkU=
@@ -141,6 +143,8 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.19.2 h1:XFJ2Z6sNUUcAz9poj+245DMkrHE4
141143
github.com/aws/aws-sdk-go-v2/service/sts v1.19.2/go.mod h1:dp0yLPsLBOi++WTxzCjA/oZqi6NPIhoR+uF7GeMU9eg=
142144
github.com/aws/aws-sdk-go-v2/service/swf v1.15.2 h1:2ozdtzVA8NpZZZrE1BwYbWVbtA0uJ9rph2+LIgVF22k=
143145
github.com/aws/aws-sdk-go-v2/service/swf v1.15.2/go.mod h1:Jj8X0ex+9XIXgNI/zD/g0jvv2wd5LHEZq29FlJj1RUc=
146+
github.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.17.2 h1:PlsApCYTMqiDmaCDikifXGYqQ53QWQ5UAOEZIevfcL8=
147+
github.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.17.2/go.mod h1:xes7zyfBSJ6kgfmaIvTFbEfPc3CfU1HLx46qcEc6n2s=
144148
github.com/aws/aws-sdk-go-v2/service/transcribe v1.26.8 h1:KfCL992IXYjCPT62KGBMCOxf4cvu5OwwqcJZRBORL+U=
145149
github.com/aws/aws-sdk-go-v2/service/transcribe v1.26.8/go.mod h1:F8gPtIYU0JYmVyPeQI0zf8geCpbupPJfo3wPoIV6wy0=
146150
github.com/aws/aws-sdk-go-v2/service/verifiedpermissions v1.0.2 h1:TOKE2XWYUF9WpGpn3rw1f8SGQHKU4S6zpSyIA2VX/rQ=

internal/conns/awsclient_gen.go

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/service/keyspaces/exports_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ var (
1010

1111
FindKeyspaceByName = findKeyspaceByName
1212
FindTableByTwoPartKey = findTableByTwoPartKey
13+
14+
TableParseResourceID = tableParseResourceID
1315
)

internal/service/keyspaces/table.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ func resourceTableCreate(ctx context.Context, d *schema.ResourceData, meta inter
307307

308308
keyspaceName := d.Get("keyspace_name").(string)
309309
tableName := d.Get("table_name").(string)
310-
id := TableCreateResourceID(keyspaceName, tableName)
310+
id := tableCreateResourceID(keyspaceName, tableName)
311311
input := &keyspaces.CreateTableInput{
312312
KeyspaceName: aws.String(keyspaceName),
313313
TableName: aws.String(tableName),
@@ -364,7 +364,7 @@ func resourceTableCreate(ctx context.Context, d *schema.ResourceData, meta inter
364364
func resourceTableRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
365365
conn := meta.(*conns.AWSClient).KeyspacesClient(ctx)
366366

367-
keyspaceName, tableName, err := TableParseResourceID(d.Id())
367+
keyspaceName, tableName, err := tableParseResourceID(d.Id())
368368

369369
if err != nil {
370370
return diag.FromErr(err)
@@ -442,7 +442,7 @@ func resourceTableRead(ctx context.Context, d *schema.ResourceData, meta interfa
442442
func resourceTableUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
443443
conn := meta.(*conns.AWSClient).KeyspacesClient(ctx)
444444

445-
keyspaceName, tableName, err := TableParseResourceID(d.Id())
445+
keyspaceName, tableName, err := tableParseResourceID(d.Id())
446446

447447
if err != nil {
448448
return diag.FromErr(err)
@@ -612,7 +612,7 @@ func resourceTableUpdate(ctx context.Context, d *schema.ResourceData, meta inter
612612
func resourceTableDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
613613
conn := meta.(*conns.AWSClient).KeyspacesClient(ctx)
614614

615-
keyspaceName, tableName, err := TableParseResourceID(d.Id())
615+
keyspaceName, tableName, err := tableParseResourceID(d.Id())
616616

617617
if err != nil {
618618
return diag.FromErr(err)
@@ -641,14 +641,14 @@ func resourceTableDelete(ctx context.Context, d *schema.ResourceData, meta inter
641641

642642
const tableIDSeparator = "/"
643643

644-
func TableCreateResourceID(keyspaceName, tableName string) string {
644+
func tableCreateResourceID(keyspaceName, tableName string) string {
645645
parts := []string{keyspaceName, tableName}
646646
id := strings.Join(parts, tableIDSeparator)
647647

648648
return id
649649
}
650650

651-
func TableParseResourceID(id string) (string, string, error) {
651+
func tableParseResourceID(id string) (string, string, error) {
652652
parts := strings.Split(id, tableIDSeparator)
653653

654654
if len(parts) == 2 && parts[0] != "" && parts[1] != "" {

internal/service/timestreamwrite/database.go

+47-37
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,24 @@ import (
88
"log"
99
"regexp"
1010

11-
"github.com/aws/aws-sdk-go/aws"
12-
"github.com/aws/aws-sdk-go/service/timestreamwrite"
13-
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
11+
"github.com/aws/aws-sdk-go-v2/aws"
12+
"github.com/aws/aws-sdk-go-v2/service/timestreamwrite"
13+
"github.com/aws/aws-sdk-go-v2/service/timestreamwrite/types"
1414
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
15+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
1516
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1617
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1718
"github.com/hashicorp/terraform-provider-aws/internal/conns"
19+
"github.com/hashicorp/terraform-provider-aws/internal/errs"
1820
tftags "github.com/hashicorp/terraform-provider-aws/internal/tags"
21+
"github.com/hashicorp/terraform-provider-aws/internal/tfresource"
1922
"github.com/hashicorp/terraform-provider-aws/internal/verify"
2023
"github.com/hashicorp/terraform-provider-aws/names"
2124
)
2225

2326
// @SDKResource("aws_timestreamwrite_database", name="Database")
2427
// @Tags(identifierAttribute="arn")
25-
func ResourceDatabase() *schema.Resource {
28+
func resourceDatabase() *schema.Resource {
2629
return &schema.Resource{
2730
CreateWithoutTimeout: resourceDatabaseCreate,
2831
ReadWithoutTimeout: resourceDatabaseRead,
@@ -38,7 +41,6 @@ func ResourceDatabase() *schema.Resource {
3841
Type: schema.TypeString,
3942
Computed: true,
4043
},
41-
4244
"database_name": {
4345
Type: schema.TypeString,
4446
Required: true,
@@ -48,7 +50,6 @@ func ResourceDatabase() *schema.Resource {
4850
validation.StringMatch(regexp.MustCompile(`^[a-zA-Z0-9_.-]+$`), "must only include alphanumeric, underscore, period, or hyphen characters"),
4951
),
5052
},
51-
5253
"kms_key_id": {
5354
Type: schema.TypeString,
5455
Optional: true,
@@ -59,7 +60,6 @@ func ResourceDatabase() *schema.Resource {
5960
// To avoid importing an extra service in this resource, input here is restricted to only ARNs.
6061
ValidateFunc: verify.ValidARN,
6162
},
62-
6363
"table_count": {
6464
Type: schema.TypeInt,
6565
Computed: true,
@@ -73,43 +73,35 @@ func ResourceDatabase() *schema.Resource {
7373
}
7474

7575
func resourceDatabaseCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
76-
conn := meta.(*conns.AWSClient).TimestreamWriteConn(ctx)
76+
conn := meta.(*conns.AWSClient).TimestreamWriteClient(ctx)
7777

78-
dbName := d.Get("database_name").(string)
78+
name := d.Get("database_name").(string)
7979
input := &timestreamwrite.CreateDatabaseInput{
80-
DatabaseName: aws.String(dbName),
80+
DatabaseName: aws.String(name),
8181
Tags: getTagsIn(ctx),
8282
}
8383

8484
if v, ok := d.GetOk("kms_key_id"); ok {
8585
input.KmsKeyId = aws.String(v.(string))
8686
}
8787

88-
resp, err := conn.CreateDatabaseWithContext(ctx, input)
88+
output, err := conn.CreateDatabase(ctx, input)
8989

9090
if err != nil {
91-
return diag.Errorf("creating Timestream Database (%s): %s", dbName, err)
91+
return diag.Errorf("creating Timestream Database (%s): %s", name, err)
9292
}
9393

94-
if resp == nil || resp.Database == nil {
95-
return diag.Errorf("creating Timestream Database (%s): empty output", dbName)
96-
}
97-
98-
d.SetId(aws.StringValue(resp.Database.DatabaseName))
94+
d.SetId(aws.ToString(output.Database.DatabaseName))
9995

10096
return resourceDatabaseRead(ctx, d, meta)
10197
}
10298

10399
func resourceDatabaseRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
104-
conn := meta.(*conns.AWSClient).TimestreamWriteConn(ctx)
100+
conn := meta.(*conns.AWSClient).TimestreamWriteClient(ctx)
105101

106-
input := &timestreamwrite.DescribeDatabaseInput{
107-
DatabaseName: aws.String(d.Id()),
108-
}
109-
110-
resp, err := conn.DescribeDatabaseWithContext(ctx, input)
102+
db, err := findDatabaseByName(ctx, conn, d.Id())
111103

112-
if !d.IsNewResource() && tfawserr.ErrCodeEquals(err, timestreamwrite.ErrCodeResourceNotFoundException) {
104+
if !d.IsNewResource() && tfresource.NotFound(err) {
113105
log.Printf("[WARN] Timestream Database %s not found, removing from state", d.Id())
114106
d.SetId("")
115107
return nil
@@ -119,14 +111,7 @@ func resourceDatabaseRead(ctx context.Context, d *schema.ResourceData, meta inte
119111
return diag.Errorf("reading Timestream Database (%s): %s", d.Id(), err)
120112
}
121113

122-
if resp == nil || resp.Database == nil {
123-
return diag.Errorf("reading Timestream Database (%s): empty output", d.Id())
124-
}
125-
126-
db := resp.Database
127-
arn := aws.StringValue(db.Arn)
128-
129-
d.Set("arn", arn)
114+
d.Set("arn", db.Arn)
130115
d.Set("database_name", db.DatabaseName)
131116
d.Set("kms_key_id", db.KmsKeyId)
132117
d.Set("table_count", db.TableCount)
@@ -135,15 +120,15 @@ func resourceDatabaseRead(ctx context.Context, d *schema.ResourceData, meta inte
135120
}
136121

137122
func resourceDatabaseUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
138-
conn := meta.(*conns.AWSClient).TimestreamWriteConn(ctx)
123+
conn := meta.(*conns.AWSClient).TimestreamWriteClient(ctx)
139124

140125
if d.HasChange("kms_key_id") {
141126
input := &timestreamwrite.UpdateDatabaseInput{
142127
DatabaseName: aws.String(d.Id()),
143128
KmsKeyId: aws.String(d.Get("kms_key_id").(string)),
144129
}
145130

146-
_, err := conn.UpdateDatabaseWithContext(ctx, input)
131+
_, err := conn.UpdateDatabase(ctx, input)
147132

148133
if err != nil {
149134
return diag.Errorf("updating Timestream Database (%s): %s", d.Id(), err)
@@ -154,14 +139,14 @@ func resourceDatabaseUpdate(ctx context.Context, d *schema.ResourceData, meta in
154139
}
155140

156141
func resourceDatabaseDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
157-
conn := meta.(*conns.AWSClient).TimestreamWriteConn(ctx)
142+
conn := meta.(*conns.AWSClient).TimestreamWriteClient(ctx)
158143

159144
log.Printf("[INFO] Deleting Timestream Database: %s", d.Id())
160-
_, err := conn.DeleteDatabaseWithContext(ctx, &timestreamwrite.DeleteDatabaseInput{
145+
_, err := conn.DeleteDatabase(ctx, &timestreamwrite.DeleteDatabaseInput{
161146
DatabaseName: aws.String(d.Id()),
162147
})
163148

164-
if tfawserr.ErrCodeEquals(err, timestreamwrite.ErrCodeResourceNotFoundException) {
149+
if errs.IsA[*types.ResourceNotFoundException](err) {
165150
return nil
166151
}
167152

@@ -171,3 +156,28 @@ func resourceDatabaseDelete(ctx context.Context, d *schema.ResourceData, meta in
171156

172157
return nil
173158
}
159+
160+
func findDatabaseByName(ctx context.Context, conn *timestreamwrite.Client, name string) (*types.Database, error) {
161+
input := &timestreamwrite.DescribeDatabaseInput{
162+
DatabaseName: aws.String(name),
163+
}
164+
165+
output, err := conn.DescribeDatabase(ctx, input)
166+
167+
if errs.IsA[*types.ResourceNotFoundException](err) {
168+
return nil, &retry.NotFoundError{
169+
LastError: err,
170+
LastRequest: input,
171+
}
172+
}
173+
174+
if err != nil {
175+
return nil, err
176+
}
177+
178+
if output == nil || output.Database == nil {
179+
return nil, tfresource.NewEmptyResultError(input)
180+
}
181+
182+
return output.Database, nil
183+
}

0 commit comments

Comments
 (0)