...

/

Demo: Storing and Retrieving Information

Demo: Storing and Retrieving Information

Learn how to create and search for records in DynamoDB by using the Golang SDK and the AWS-CLI.

We'll cover the following...

Create a record

Let’s create a record by using the following Golang piece of code. It is important to have an access-key and a secret-key to do it.

Please provide values for the following:
Region
Not Specified...
AccessKey
Not Specified...
SecretKey
Not Specified...
package main

import (
	"fmt"
	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/dynamodb"
	"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbiface"
)

const (
	Region = "{{Region}}"
	AccessKey = "{{AccessKey}}"
	SecretKey = "{{SecretKey}}"
	Token = ""
	TableName = "demo-interaction"
)

func main() {
	svc := CreateSession()
	CreateTableOnDemand(TableName,svc)
	CreateRecord(TableName,svc)
}

// CreateSession creates a session to invoke AWS APIs
func CreateSession() dynamodbiface.DynamoDBAPI{
	sess, err := session.NewSession(&aws.Config{
		Region:      aws.String(Region),
		// This is for practice purposes, NEVER hardcode credentials, AWS provides different mechanisms to authenticate SDK
		Credentials: credentials.NewStaticCredentials(AccessKey, SecretKey, Token),
	})

	if err != nil{
		fmt.Println(err)
	}

	var svc dynamodbiface.DynamoDBAPI
	svc = dynamodb.New(sess)

	return svc
}

func CreateTableOnDemand(tableName string, svc dynamodbiface.DynamoDBAPI) {
	fmt.Println("CreateTableOnDemand starts")

	// It means OnDemand
	billingMode := "PAY_PER_REQUEST"

	params := &dynamodb.CreateTableInput{
		TableName: aws.String(tableName),

		// Definition of attributes that the table is going to have
		AttributeDefinitions: []*dynamodb.AttributeDefinition{
			{
				AttributeName: aws.String("partitionkey"),
				AttributeType: aws.String("S"),
			},
			{
				AttributeName: aws.String("sortkey"),
				AttributeType: aws.String("S"),
			},
		},

		// Definition of keys of the table, HASH is for primary key and RANGE is for sort key
		KeySchema: []*dynamodb.KeySchemaElement{
			{
				AttributeName: aws.String("partitionkey"),
				KeyType:       aws.String("HASH"),
			},
			{
				AttributeName: aws.String("sortkey"),
				KeyType:       aws.String("RANGE"),
			},
		},
		BillingMode: &billingMode,
	}

	output, err := svc.CreateTable(params)
	if err != nil {
		fmt.Println(err)
	}

	description := dynamodb.DescribeTableInput{
		TableName: aws.String(tableName),
	}
	svc.WaitUntilTableExists(&description)

	fmt.Printf("CREATING:\n Table ARN: %s \n, Table name: %s \n",*output.TableDescription.TableArn, *output.TableDescription.TableName)
}

// CreateRecord allows to create a record in the table
func CreateRecord(tableName string, svc dynamodbiface.DynamoDBAPI){
	input := &dynamodb.PutItemInput{
		TableName: aws.String(tableName),
		Item: map[string]*dynamodb.AttributeValue{
			"partitionkey":{
				S: aws.String("test"),
			},
			"sortkey":{
				S: aws.String("2022"),
			},
			"active":{
				BOOL: aws.Bool(false),
			},
		},
	}

	_,err := svc.PutItem(input)
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println("Result created successfully")
}
Record creation Golang

Search for records

The ...