Skip to content

Commit 8642fe9

Browse files
authored
Merge pull request #33416 from hashicorp/td-migrate-s3control-to-aws-sdk-v2
Tech debt: Migrate (more) `s3control` resources to AWS SDK for Go v2
2 parents fcf11a7 + 86f2350 commit 8642fe9

38 files changed

+650
-808
lines changed

.changelog/33416.txt

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
```release-note:enhancement
2+
resource/aws_s3control_multi_region_access_point: Add `details.region.bucket_account_id` argument to support [cross-account Multi-Region Access Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/multi-region-access-point-buckets.html)
3+
```
4+
5+
```release-note:enhancement
6+
resource/aws_s3control_multi_region_access_point: Add `details.region.region` attribute
7+
```
8+
9+
```release-note:enhancement
10+
data-source/aws_s3control_multi_region_access_point: Add `details.region.bucket_account_id` attribute
11+
```

internal/service/codestarnotifications/notification_rule.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ func cleanupNotificationRuleTargets(ctx context.Context, conn *codestarnotificat
276276
TargetAddress: aws.String(target["address"].(string)),
277277
}
278278

279-
_, err := tfresource.RetryWhenAWSErrMessageContainsV2(ctx, targetSubscriptionTimeout, func() (interface{}, error) {
279+
_, err := tfresource.RetryWhenAWSErrMessageContains(ctx, targetSubscriptionTimeout, func() (interface{}, error) {
280280
return conn.DeleteTarget(ctx, input)
281281
}, "ValidationException", notificationRuleErrorSubscribed)
282282

internal/service/ec2/vpc_.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ func resourceVPCCreate(ctx context.Context, d *schema.ResourceData, meta interfa
214214
}
215215

216216
// "UnsupportedOperation: The operation AllocateIpamPoolCidr is not supported. Account 123456789012 is not monitored by IPAM ipam-07b079e3392782a55."
217-
outputRaw, err := tfresource.RetryWhenAWSErrMessageContainsV2(ctx, ec2PropagationTimeout, func() (interface{}, error) {
217+
outputRaw, err := tfresource.RetryWhenAWSErrMessageContains(ctx, ec2PropagationTimeout, func() (interface{}, error) {
218218
return conn.CreateVpc(ctx, input)
219219
}, errCodeUnsupportedOperation, "is not monitored by IPAM")
220220

@@ -450,7 +450,7 @@ func resourceVPCDelete(ctx context.Context, d *schema.ResourceData, meta interfa
450450
}
451451

452452
log.Printf("[INFO] Deleting EC2 VPC: %s", d.Id())
453-
_, err := tfresource.RetryWhenAWSErrCodeEqualsV2(ctx, vpcDeletedTimeout, func() (interface{}, error) {
453+
_, err := tfresource.RetryWhenAWSErrCodeEquals(ctx, vpcDeletedTimeout, func() (interface{}, error) {
454454
return conn.DeleteVpc(ctx, input)
455455
}, errCodeDependencyViolation)
456456

internal/service/s3control/access_point.go

+35-39
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ import (
99
"log"
1010
"strings"
1111

12-
"github.com/aws/aws-sdk-go/aws"
13-
"github.com/aws/aws-sdk-go/aws/arn"
14-
"github.com/aws/aws-sdk-go/service/s3control"
15-
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
12+
"github.com/aws/aws-sdk-go-v2/aws"
13+
"github.com/aws/aws-sdk-go-v2/aws/arn"
14+
"github.com/aws/aws-sdk-go-v2/service/s3control"
15+
"github.com/aws/aws-sdk-go-v2/service/s3control/types"
16+
"github.com/hashicorp/aws-sdk-go-base/v2/tfawserr"
1617
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1718
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
1819
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -156,14 +157,13 @@ func resourceAccessPoint() *schema.Resource {
156157
}
157158

158159
func resourceAccessPointCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
159-
conn := meta.(*conns.AWSClient).S3ControlConn(ctx)
160+
conn := meta.(*conns.AWSClient).S3ControlClient(ctx)
160161

161162
accountID := meta.(*conns.AWSClient).AccountID
162163
if v, ok := d.GetOk("account_id"); ok {
163164
accountID = v.(string)
164165
}
165166
name := d.Get("name").(string)
166-
167167
input := &s3control.CreateAccessPointInput{
168168
AccountId: aws.String(accountID),
169169
Bucket: aws.String(d.Get("bucket").(string)),
@@ -182,20 +182,18 @@ func resourceAccessPointCreate(ctx context.Context, d *schema.ResourceData, meta
182182
input.VpcConfiguration = expandVPCConfiguration(v.([]interface{})[0].(map[string]interface{}))
183183
}
184184

185-
output, err := conn.CreateAccessPointWithContext(ctx, input)
185+
output, err := conn.CreateAccessPoint(ctx, input)
186186

187187
if err != nil {
188188
return diag.Errorf("creating S3 Access Point (%s): %s", name, err)
189189
}
190190

191-
resourceID, err := AccessPointCreateResourceID(aws.StringValue(output.AccessPointArn))
192-
191+
resourceID, err := AccessPointCreateResourceID(aws.ToString(output.AccessPointArn))
193192
if err != nil {
194193
return diag.FromErr(err)
195194
}
196195

197196
accountID, name, err = AccessPointParseResourceID(resourceID)
198-
199197
if err != nil {
200198
return diag.FromErr(err)
201199
}
@@ -205,7 +203,7 @@ func resourceAccessPointCreate(ctx context.Context, d *schema.ResourceData, meta
205203
if v, ok := d.GetOk("policy"); ok && v.(string) != "" && v.(string) != "{}" {
206204
policy, err := structure.NormalizeJsonString(v.(string))
207205
if err != nil {
208-
return diag.Errorf("policy (%s) is invalid JSON: %s", v.(string), err)
206+
return diag.FromErr(err)
209207
}
210208

211209
input := &s3control.PutAccessPointPolicyInput{
@@ -214,7 +212,7 @@ func resourceAccessPointCreate(ctx context.Context, d *schema.ResourceData, meta
214212
Policy: aws.String(policy),
215213
}
216214

217-
_, err = conn.PutAccessPointPolicyWithContext(ctx, input)
215+
_, err = conn.PutAccessPointPolicy(ctx, input)
218216

219217
if err != nil {
220218
return diag.Errorf("creating S3 Access Point (%s) policy: %s", d.Id(), err)
@@ -225,17 +223,14 @@ func resourceAccessPointCreate(ctx context.Context, d *schema.ResourceData, meta
225223
}
226224

227225
func resourceAccessPointRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
228-
conn := meta.(*conns.AWSClient).S3ControlConn(ctx)
226+
conn := meta.(*conns.AWSClient).S3ControlClient(ctx)
229227

230228
accountID, name, err := AccessPointParseResourceID(d.Id())
231-
232229
if err != nil {
233230
return diag.FromErr(err)
234231
}
235232

236-
s3OnOutposts := arn.IsARN(name)
237-
238-
output, err := FindAccessPointByTwoPartKey(ctx, conn, accountID, name)
233+
output, err := findAccessPointByTwoPartKey(ctx, conn, accountID, name)
239234

240235
if !d.IsNewResource() && tfresource.NotFound(err) {
241236
log.Printf("[WARN] S3 Access Point (%s) not found, removing from state", d.Id())
@@ -247,9 +242,10 @@ func resourceAccessPointRead(ctx context.Context, d *schema.ResourceData, meta i
247242
return diag.Errorf("reading S3 Access Point (%s): %s", d.Id(), err)
248243
}
249244

245+
s3OnOutposts := arn.IsARN(name)
246+
250247
if s3OnOutposts {
251248
accessPointARN, err := arn.Parse(name)
252-
253249
if err != nil {
254250
return diag.FromErr(err)
255251
}
@@ -262,8 +258,8 @@ func resourceAccessPointRead(ctx context.Context, d *schema.ResourceData, meta i
262258
AccountID: accessPointARN.AccountID,
263259
Resource: strings.Replace(
264260
accessPointARN.Resource,
265-
fmt.Sprintf("accesspoint/%s", aws.StringValue(output.Name)),
266-
fmt.Sprintf("bucket/%s", aws.StringValue(output.Bucket)),
261+
fmt.Sprintf("accesspoint/%s", aws.ToString(output.Name)),
262+
fmt.Sprintf("bucket/%s", aws.ToString(output.Bucket)),
267263
1,
268264
),
269265
}
@@ -277,7 +273,7 @@ func resourceAccessPointRead(ctx context.Context, d *schema.ResourceData, meta i
277273
Service: "s3",
278274
Region: meta.(*conns.AWSClient).Region,
279275
AccountID: accountID,
280-
Resource: fmt.Sprintf("accesspoint/%s", aws.StringValue(output.Name)),
276+
Resource: fmt.Sprintf("accesspoint/%s", aws.ToString(output.Name)),
281277
}
282278

283279
d.Set("arn", accessPointARN.String())
@@ -287,8 +283,8 @@ func resourceAccessPointRead(ctx context.Context, d *schema.ResourceData, meta i
287283
d.Set("account_id", accountID)
288284
d.Set("alias", output.Alias)
289285
d.Set("bucket_account_id", output.BucketAccountId)
290-
d.Set("domain_name", meta.(*conns.AWSClient).RegionalHostname(fmt.Sprintf("%s-%s.s3-accesspoint", aws.StringValue(output.Name), accountID)))
291-
d.Set("endpoints", aws.StringValueMap(output.Endpoints))
286+
d.Set("domain_name", meta.(*conns.AWSClient).RegionalHostname(fmt.Sprintf("%s-%s.s3-accesspoint", aws.ToString(output.Name), accountID)))
287+
d.Set("endpoints", output.Endpoints)
292288
d.Set("name", output.Name)
293289
d.Set("network_origin", output.NetworkOrigin)
294290
if output.PublicAccessBlockConfiguration != nil {
@@ -306,7 +302,7 @@ func resourceAccessPointRead(ctx context.Context, d *schema.ResourceData, meta i
306302
d.Set("vpc_configuration", nil)
307303
}
308304

309-
policy, status, err := FindAccessPointPolicyAndStatusByTwoPartKey(ctx, conn, accountID, name)
305+
policy, status, err := findAccessPointPolicyAndStatusByTwoPartKey(ctx, conn, accountID, name)
310306

311307
if err == nil && policy != "" {
312308
if s3OnOutposts {
@@ -332,10 +328,9 @@ func resourceAccessPointRead(ctx context.Context, d *schema.ResourceData, meta i
332328
}
333329

334330
func resourceAccessPointUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
335-
conn := meta.(*conns.AWSClient).S3ControlConn(ctx)
331+
conn := meta.(*conns.AWSClient).S3ControlClient(ctx)
336332

337333
accountID, name, err := AccessPointParseResourceID(d.Id())
338-
339334
if err != nil {
340335
return diag.FromErr(err)
341336
}
@@ -344,7 +339,7 @@ func resourceAccessPointUpdate(ctx context.Context, d *schema.ResourceData, meta
344339
if v, ok := d.GetOk("policy"); ok && v.(string) != "" && v.(string) != "{}" {
345340
policy, err := structure.NormalizeJsonString(v.(string))
346341
if err != nil {
347-
return diag.Errorf("policy (%s) is invalid JSON: %s", v.(string), err)
342+
return diag.FromErr(err)
348343
}
349344

350345
input := &s3control.PutAccessPointPolicyInput{
@@ -353,16 +348,18 @@ func resourceAccessPointUpdate(ctx context.Context, d *schema.ResourceData, meta
353348
Policy: aws.String(policy),
354349
}
355350

356-
_, err = conn.PutAccessPointPolicyWithContext(ctx, input)
351+
_, err = conn.PutAccessPointPolicy(ctx, input)
357352

358353
if err != nil {
359354
return diag.Errorf("updating S3 Access Point (%s) policy: %s", d.Id(), err)
360355
}
361356
} else {
362-
_, err := conn.DeleteAccessPointPolicyWithContext(ctx, &s3control.DeleteAccessPointPolicyInput{
357+
input := &s3control.DeleteAccessPointPolicyInput{
363358
AccountId: aws.String(accountID),
364359
Name: aws.String(name),
365-
})
360+
}
361+
362+
_, err := conn.DeleteAccessPointPolicy(ctx, input)
366363

367364
if err != nil {
368365
return diag.Errorf("deleting S3 Access Point (%s) policy: %s", d.Id(), err)
@@ -374,16 +371,15 @@ func resourceAccessPointUpdate(ctx context.Context, d *schema.ResourceData, meta
374371
}
375372

376373
func resourceAccessPointDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
377-
conn := meta.(*conns.AWSClient).S3ControlConn(ctx)
374+
conn := meta.(*conns.AWSClient).S3ControlClient(ctx)
378375

379376
accountID, name, err := AccessPointParseResourceID(d.Id())
380-
381377
if err != nil {
382378
return diag.FromErr(err)
383379
}
384380

385381
log.Printf("[DEBUG] Deleting S3 Access Point: %s", d.Id())
386-
_, err = conn.DeleteAccessPointWithContext(ctx, &s3control.DeleteAccessPointInput{
382+
_, err = conn.DeleteAccessPoint(ctx, &s3control.DeleteAccessPointInput{
387383
AccountId: aws.String(accountID),
388384
Name: aws.String(name),
389385
})
@@ -399,13 +395,13 @@ func resourceAccessPointDelete(ctx context.Context, d *schema.ResourceData, meta
399395
return nil
400396
}
401397

402-
func FindAccessPointByTwoPartKey(ctx context.Context, conn *s3control.S3Control, accountID string, name string) (*s3control.GetAccessPointOutput, error) {
398+
func findAccessPointByTwoPartKey(ctx context.Context, conn *s3control.Client, accountID, name string) (*s3control.GetAccessPointOutput, error) {
403399
input := &s3control.GetAccessPointInput{
404400
AccountId: aws.String(accountID),
405401
Name: aws.String(name),
406402
}
407403

408-
output, err := conn.GetAccessPointWithContext(ctx, input)
404+
output, err := conn.GetAccessPoint(ctx, input)
409405

410406
if tfawserr.ErrCodeEquals(err, errCodeNoSuchAccessPoint) {
411407
return nil, &retry.NotFoundError{
@@ -468,12 +464,12 @@ func AccessPointParseResourceID(id string) (string, string, error) {
468464
return "", "", fmt.Errorf("unexpected format for ID (%[1]s), expected account-id%[2]saccess-point-name", id, accessPointResourceIDSeparator)
469465
}
470466

471-
func expandVPCConfiguration(tfMap map[string]interface{}) *s3control.VpcConfiguration {
467+
func expandVPCConfiguration(tfMap map[string]interface{}) *types.VpcConfiguration {
472468
if tfMap == nil {
473469
return nil
474470
}
475471

476-
apiObject := &s3control.VpcConfiguration{}
472+
apiObject := &types.VpcConfiguration{}
477473

478474
if v, ok := tfMap["vpc_id"].(string); ok {
479475
apiObject.VpcId = aws.String(v)
@@ -482,15 +478,15 @@ func expandVPCConfiguration(tfMap map[string]interface{}) *s3control.VpcConfigur
482478
return apiObject
483479
}
484480

485-
func flattenVPCConfiguration(apiObject *s3control.VpcConfiguration) map[string]interface{} {
481+
func flattenVPCConfiguration(apiObject *types.VpcConfiguration) map[string]interface{} {
486482
if apiObject == nil {
487483
return nil
488484
}
489485

490486
tfMap := map[string]interface{}{}
491487

492488
if v := apiObject.VpcId; v != nil {
493-
tfMap["vpc_id"] = aws.StringValue(v)
489+
tfMap["vpc_id"] = aws.ToString(v)
494490
}
495491

496492
return tfMap

0 commit comments

Comments
 (0)