diff --git a/.changelog/26744.txt b/.changelog/26744.txt new file mode 100644 index 000000000000..224c4d218a7d --- /dev/null +++ b/.changelog/26744.txt @@ -0,0 +1,3 @@ +```release-note:bug +resource/aws_dynamodb_table: No longer returns error for an ARCHIVED table +``` diff --git a/internal/service/dynamodb/status.go b/internal/service/dynamodb/status.go index e7df2c782314..ef13093d058c 100644 --- a/internal/service/dynamodb/status.go +++ b/internal/service/dynamodb/status.go @@ -2,7 +2,6 @@ package dynamodb import ( "context" - "log" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/dynamodb" @@ -53,12 +52,10 @@ func statusReplicaUpdate(conn *dynamodb.DynamoDB, tableName, region string) reso TableName: aws.String(tableName), }) if err != nil { - return 42, "", err + return nil, "", err } - log.Printf("[DEBUG] DynamoDB replicas: %s", result.Table.Replicas) var targetReplica *dynamodb.ReplicaDescription - for _, replica := range result.Table.Replicas { if aws.StringValue(replica.RegionName) == region { targetReplica = replica @@ -80,12 +77,10 @@ func statusReplicaDelete(conn *dynamodb.DynamoDB, tableName, region string) reso TableName: aws.String(tableName), }) if err != nil { - return 42, "", err + return nil, "", err } - log.Printf("[DEBUG] all replicas for waiting: %s", result.Table.Replicas) var targetReplica *dynamodb.ReplicaDescription - for _, replica := range result.Table.Replicas { if aws.StringValue(replica.RegionName) == region { targetReplica = replica diff --git a/internal/service/dynamodb/sweep.go b/internal/service/dynamodb/sweep.go index d208312abcf3..45b8e92292bc 100644 --- a/internal/service/dynamodb/sweep.go +++ b/internal/service/dynamodb/sweep.go @@ -50,13 +50,11 @@ func sweepTables(region string) error { // read concurrently and gather errors g.Go(func() error { - // Need to Read first to fill in byte_match_tuples attribute + // Need to Read first to fill in `replica` attribute err := r.Read(d, client) if err != nil { - sweeperErr := fmt.Errorf("error reading DynamoDB Table (%s): %w", id, err) - log.Printf("[ERROR] %s", sweeperErr) - return sweeperErr + return err } // In case it was already deleted diff --git a/internal/service/dynamodb/table.go b/internal/service/dynamodb/table.go index 6fab463b78c8..c26d5b3b22bf 100644 --- a/internal/service/dynamodb/table.go +++ b/internal/service/dynamodb/table.go @@ -717,8 +717,8 @@ func resourceTableRead(d *schema.ResourceData, meta interface{}) error { pitrOut, err := conn.DescribeContinuousBackups(&dynamodb.DescribeContinuousBackupsInput{ TableName: aws.String(d.Id()), }) - - if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException") { + // When a Table is `ARCHIVED`, DescribeContinuousBackups returns `TableNotFoundException` + if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException", dynamodb.ErrCodeTableNotFoundException) { return create.Error(names.DynamoDB, create.ErrActionReading, ResNameTable, d.Id(), fmt.Errorf("continuous backups: %w", err)) } @@ -742,8 +742,8 @@ func resourceTableRead(d *schema.ResourceData, meta interface{}) error { ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig tags, err := ListTags(conn, d.Get("arn").(string)) - - if err != nil && !tfawserr.ErrMessageContains(err, "UnknownOperationException", "Tagging is not currently supported in DynamoDB Local.") { + // When a Table is `ARCHIVED`, ListTags returns `ResourceNotFoundException` + if err != nil && !(tfawserr.ErrMessageContains(err, "UnknownOperationException", "Tagging is not currently supported in DynamoDB Local.") || tfresource.NotFound(err)) { return create.Error(names.DynamoDB, create.ErrActionReading, ResNameTable, d.Id(), fmt.Errorf("tags: %w", err)) } @@ -1469,8 +1469,8 @@ func replicaPITR(conn *dynamodb.DynamoDB, tableName string, region string, tfVer pitrOut, err := conn.DescribeContinuousBackups(&dynamodb.DescribeContinuousBackupsInput{ TableName: aws.String(tableName), }) - - if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException") { + // When a Table is `ARCHIVED`, DescribeContinuousBackups returns `TableNotFoundException` + if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException", dynamodb.ErrCodeTableNotFoundException) { return false, fmt.Errorf("describing Continuous Backups: %w", err) } diff --git a/internal/service/dynamodb/table_data_source.go b/internal/service/dynamodb/table_data_source.go index 490a6e0643c0..869f08a2843d 100644 --- a/internal/service/dynamodb/table_data_source.go +++ b/internal/service/dynamodb/table_data_source.go @@ -11,6 +11,7 @@ import ( "github.com/hashicorp/terraform-provider-aws/internal/conns" "github.com/hashicorp/terraform-provider-aws/internal/create" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" ) func DataSourceTable() *schema.Resource { @@ -308,8 +309,8 @@ func dataSourceTableRead(d *schema.ResourceData, meta interface{}) error { pitrOut, err := conn.DescribeContinuousBackups(&dynamodb.DescribeContinuousBackupsInput{ TableName: aws.String(d.Id()), }) - - if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException") { + // When a Table is `ARCHIVED`, DescribeContinuousBackups returns `TableNotFoundException` + if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException", dynamodb.ErrCodeTableNotFoundException) { return fmt.Errorf("error describing DynamoDB Table (%s) Continuous Backups: %w", d.Id(), err) } @@ -330,8 +331,8 @@ func dataSourceTableRead(d *schema.ResourceData, meta interface{}) error { } tags, err := ListTags(conn, d.Get("arn").(string)) - - if err != nil && !tfawserr.ErrMessageContains(err, "UnknownOperationException", "Tagging is not currently supported in DynamoDB Local.") { + // When a Table is `ARCHIVED`, ListTags returns `ResourceNotFoundException` + if err != nil && !(tfawserr.ErrMessageContains(err, "UnknownOperationException", "Tagging is not currently supported in DynamoDB Local.") || tfresource.NotFound(err)) { return fmt.Errorf("error listing tags for DynamoDB Table (%s): %w", d.Get("arn").(string), err) } diff --git a/internal/service/dynamodb/table_replica.go b/internal/service/dynamodb/table_replica.go index 7eadb324e352..a648d4ce6111 100644 --- a/internal/service/dynamodb/table_replica.go +++ b/internal/service/dynamodb/table_replica.go @@ -295,8 +295,8 @@ func resourceTableReplicaReadReplica(d *schema.ResourceData, meta interface{}) e pitrOut, err := conn.DescribeContinuousBackups(&dynamodb.DescribeContinuousBackupsInput{ TableName: aws.String(tableName), }) - - if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException") { + // When a Table is `ARCHIVED`, DescribeContinuousBackups returns `TableNotFoundException` + if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException", dynamodb.ErrCodeTableNotFoundException) { return create.Error(names.DynamoDB, create.ErrActionReading, ResNameTableReplica, d.Id(), fmt.Errorf("continuous backups: %w", err)) } @@ -310,8 +310,8 @@ func resourceTableReplicaReadReplica(d *schema.ResourceData, meta interface{}) e ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig tags, err := ListTags(conn, d.Get("arn").(string)) - - if err != nil && !tfawserr.ErrMessageContains(err, "UnknownOperationException", "Tagging is not currently supported in DynamoDB Local.") { + // When a Table is `ARCHIVED`, ListTags returns `ResourceNotFoundException` + if err != nil && !(tfawserr.ErrMessageContains(err, "UnknownOperationException", "Tagging is not currently supported in DynamoDB Local.") || tfresource.NotFound(err)) { return create.Error(names.DynamoDB, create.ErrActionReading, ResNameTableReplica, d.Id(), fmt.Errorf("tags: %w", err)) }