Skip to content

Commit

Permalink
Reuses provider config for cross-region access and prevents panic
Browse files Browse the repository at this point in the history
  • Loading branch information
gdavison committed Jul 26, 2022
1 parent d425225 commit 9bd5968
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 10 deletions.
12 changes: 8 additions & 4 deletions internal/service/dynamodb/table.go
Original file line number Diff line number Diff line change
Expand Up @@ -899,12 +899,16 @@ func resourceTableUpdate(d *schema.ResourceData, meta interface{}) error {
return fmt.Errorf("error updating DynamoDB Table (%s) SSE: %w", d.Id(), err)
}
for _, region := range replicaRegions {
if tableDetail, err := waitDynamoDBReplicaSSEUpdated(region, d.Id()); err != nil {
return fmt.Errorf("error waiting for DynamoDB Table (%s) in region (#{region}) SSE: {%w}", *tableDetail.TableName, err)
if tableDetail, err := waitDynamoDBReplicaSSEUpdated(meta.(*conns.AWSClient), region, d.Id()); err != nil {
if tableDetail != nil {
return fmt.Errorf("error waiting for DynamoDB Table (%s) SSE update in region %q: %w", aws.StringValue(tableDetail.TableName), region, err)
} else {
return fmt.Errorf("error waiting for DynamoDB Table (%s) replica SSE update in region %q: %w", d.Id(), region, err)
}
}
}
if tableDetail, err := waitDynamoDBSSEUpdated(conn, d.Id()); err != nil {
return fmt.Errorf("error waiting for DynamoDB Table (%s) SSE update: %w", *tableDetail.TableName, err)
if _, err := waitDynamoDBSSEUpdated(conn, d.Id()); err != nil {
return fmt.Errorf("error waiting for DynamoDB Table (%s) SSE update: %w", d.Id(), err)
}
} else {
log.Printf("[WARNING] Using normal update for SSE")
Expand Down
2 changes: 1 addition & 1 deletion internal/service/dynamodb/table_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2726,7 +2726,7 @@ resource "aws_dynamodb_table" "test" {

func testAccTableReplicaWithAmazonManagedKMSConfig(rName string) string {
return acctest.ConfigCompose(
acctest.ConfigMultipleRegionProvider(3),
acctest.ConfigMultipleRegionProvider(3), // Prevent "Provider configuration not present" errors
fmt.Sprintf(`
data "aws_region" "alternate" {
provider = "awsalternate"
Expand Down
10 changes: 5 additions & 5 deletions internal/service/dynamodb/wait.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@ import (
"fmt"
"time"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/dynamodb"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-provider-aws/internal/conns"
)

const (
Expand Down Expand Up @@ -263,11 +262,12 @@ func waitDynamoDBSSEUpdated(conn *dynamodb.DynamoDB, tableName string) (*dynamod
return nil, err
}

func waitDynamoDBReplicaSSEUpdated(region string, tableName string) (*dynamodb.TableDescription, error) {
sess, err := session.NewSession(&aws.Config{Region: aws.String(region)})
func waitDynamoDBReplicaSSEUpdated(client *conns.AWSClient, region string, tableName string) (*dynamodb.TableDescription, error) {
sess, err := conns.NewSessionForRegion(&client.DynamoDBConn.Config, region, client.TerraformVersion)
if err != nil {
return nil, fmt.Errorf("error creating DynamoDB session: %w", err)
return nil, fmt.Errorf("creating session for region %q: %w", region, err)
}

conn := dynamodb.New(sess)
stateConf := &resource.StateChangeConf{
Delay: 30 * time.Second,
Expand Down

0 comments on commit 9bd5968

Please sign in to comment.