Skip to content

Latest commit

 

History

History
80 lines (60 loc) · 3.36 KB

README_DynamoDB.md

File metadata and controls

80 lines (60 loc) · 3.36 KB

Sample Function

The following is a sample Lambda function that receives DynamoDB event data as input and writes some of the record data to CloudWatch Logs. (Note that by default anything written to Console will be logged as CloudWatch Logs.)

import (
	"context"
	"fmt"

	"github.com/aws/aws-lambda-go/events"
)

func handleRequest(ctx context.Context, e events.DynamoDBEvent) {

	for _, record := range e.Records {
		fmt.Printf("Processing request data for event ID %s, type %s.\n", record.EventID, record.EventName)

		// Print new values for attributes of type String
		for name, value := range record.Change.NewImage {
			if value.DataType() == events.DataTypeString {
				fmt.Printf("Attribute name: %s, value: %s\n", name, value.String())
			}
		}
	}
}

Reading attribute values

Stream notifications are delivered to the Lambda handler whenever data in the DynamoDB table is modified. Depending on the Stream settings, a StreamRecord may contain the following data:

  • Keys: key attributes of the modified item.
  • NewImage: the entire item, as it appears after it was modified.
  • OldImage: the entire item, as it appeared before it was modified.

The values for the attributes can be accessed using the AttributeValue type. For each type supported natively by DynamoDB, there is a corresponding accessor method:

DynamoDB type AttributeValue accessor method Return type DataType constant
B (Binary) Binary() []byte DataTypeBinary
BOOL (Boolean) Boolean() bool DataTypeBoolean
BS (Binary Set) BinarySet() [][]byte DataTypeBinarySet
L (List) List() []AttributeValue DataTypeList
M (Map) Map() map[string]AttributeValue DataTypeMap
N (Number) Number() / Integer() / Float() string / int64 / float64 DataTypeNumber
NS (Number Set) NumberSet() []string DataTypeNumberSet
NULL (Null) IsNull() bool DataTypeNull
S (String) String() string DataTypeString
SS (String Set) StringSet() []string DataTypeStringSet

Calling the accessor method for the incorrect type will result in a panic. If the type needs to be discovered in runtime, the method DataType() can be used in order to determine the correct accessor.

More information about DynamoDB data types can be seen in this documentation.

The following example reads values of attributes name and age, for which types are known to be String and Number:

import (
	"context"
	"fmt"

	"github.com/aws/aws-lambda-go/events"
)

func handleRequest(ctx context.Context, e events.DynamoDBEvent) {

	for _, record := range e.Records {
		fmt.Printf("Processing request data for event ID %s, type %s.\n", record.EventID, record.EventName)

		// Print new values for attributes name and age
		name := record.Change.NewImage["name"].String()
		age, _ := record.Change.NewImage["age"].Integer()

		fmt.Printf("Name: %s, age: %d\n", name, age)
	}
}