Skip to content

Commit 0905483

Browse files
authored
Merge pull request #413 from rebuy-de/fix-dynamodb
fix use of reserved keywords for DynamoDB
2 parents d4c978e + 7d59b65 commit 0905483

File tree

1 file changed

+34
-29
lines changed

1 file changed

+34
-29
lines changed

resources/dynamodb-items.go

+34-29
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@ import (
66
"github.com/aws/aws-sdk-go/aws"
77
"github.com/aws/aws-sdk-go/aws/session"
88
"github.com/aws/aws-sdk-go/service/dynamodb"
9+
"github.com/rebuy-de/aws-nuke/pkg/types"
910
"github.com/sirupsen/logrus"
1011
)
1112

1213
type DynamoDBTableItem struct {
13-
svc *dynamodb.DynamoDB
14-
id map[string]*dynamodb.AttributeValue
15-
table *DynamoDBTable
14+
svc *dynamodb.DynamoDB
15+
id map[string]*dynamodb.AttributeValue
16+
table *DynamoDBTable
17+
keyName string
18+
keyValue string
1619
}
1720

1821
func init() {
@@ -45,20 +48,13 @@ func ListDynamoDBItems(sess *session.Session) ([]Resource, error) {
4548
return nil, descErr
4649
}
4750

48-
var params *dynamodb.ScanInput
49-
50-
key := *descResp.Table.KeySchema[0].AttributeName
51-
// Don't use ProjectionExpression in case it is a reserved keyword,
52-
// because it creates errors otherwise.
53-
if strings.ToLower(key) == "hash" || strings.ToLower(key) == "path" {
54-
params = &dynamodb.ScanInput{
55-
TableName: &dynamoTable.id,
56-
}
57-
} else {
58-
params = &dynamodb.ScanInput{
59-
TableName: &dynamoTable.id,
60-
ProjectionExpression: aws.String(key),
61-
}
51+
keyName := descResp.Table.KeySchema[0].AttributeName
52+
params := &dynamodb.ScanInput{
53+
TableName: &dynamoTable.id,
54+
ProjectionExpression: aws.String("#key"),
55+
ExpressionAttributeNames: map[string]*string{
56+
"#key": keyName,
57+
},
6258
}
6359

6460
scanResp, scanErr := svc.Scan(params)
@@ -67,10 +63,19 @@ func ListDynamoDBItems(sess *session.Session) ([]Resource, error) {
6763
}
6864

6965
for _, itemMap := range scanResp.Items {
66+
var keyValue string
67+
68+
for _, value := range itemMap {
69+
value := strings.TrimSpace(value.String())
70+
keyValue = string([]rune(value)[8:(len([]rune(value)) - 3)])
71+
}
72+
7073
resources = append(resources, &DynamoDBTableItem{
71-
svc: svc,
72-
id: itemMap,
73-
table: dynamoTable,
74+
svc: svc,
75+
id: itemMap,
76+
table: dynamoTable,
77+
keyName: aws.StringValue(keyName),
78+
keyValue: keyValue,
7479
})
7580
}
7681
}
@@ -92,14 +97,14 @@ func (i *DynamoDBTableItem) Remove() error {
9297
return nil
9398
}
9499

95-
func (i *DynamoDBTableItem) String() string {
96-
table := i.table.String()
97-
var keyField string
98-
99-
for _, value := range i.id {
100-
value := strings.TrimSpace(value.String())
101-
keyField = string([]rune(value)[8:(len([]rune(value)) - 3)])
102-
}
100+
func (i *DynamoDBTableItem) Properties() types.Properties {
101+
properties := types.NewProperties()
102+
properties.Set("Table", i.table)
103+
properties.Set("KeyName", i.keyName)
104+
properties.Set("KeyValue", i.keyValue)
105+
return properties
106+
}
103107

104-
return table + " -> " + keyField
108+
func (i *DynamoDBTableItem) String() string {
109+
return i.table.String() + " -> " + i.keyValue
105110
}

0 commit comments

Comments
 (0)