// ensureTableExists creates a DynamoDB table with a given // DynamoDB client. If the table already exists, it is not // being reconfigured. func ensureTableExists(client *dynamodb.DynamoDB, table string, readCapacity, writeCapacity int) error { _, err := client.DescribeTable(&dynamodb.DescribeTableInput{ TableName: aws.String(table), }) if awserr, ok := err.(awserr.Error); ok { if awserr.Code() == "ResourceNotFoundException" { _, err = client.CreateTable(&dynamodb.CreateTableInput{ TableName: aws.String(table), ProvisionedThroughput: &dynamodb.ProvisionedThroughput{ ReadCapacityUnits: aws.Int64(int64(readCapacity)), WriteCapacityUnits: aws.Int64(int64(writeCapacity)), }, KeySchema: []*dynamodb.KeySchemaElement{{ AttributeName: aws.String("Path"), KeyType: aws.String("HASH"), }, { AttributeName: aws.String("Key"), KeyType: aws.String("RANGE"), }}, AttributeDefinitions: []*dynamodb.AttributeDefinition{{ AttributeName: aws.String("Path"), AttributeType: aws.String("S"), }, { AttributeName: aws.String("Key"), AttributeType: aws.String("S"), }}, }) if err != nil { return err } err = client.WaitUntilTableExists(&dynamodb.DescribeTableInput{ TableName: aws.String(table), }) if err != nil { return err } } } if err != nil { return err } return nil }
// make sure session table exists func tryCreateTable(db *dynamodb.DynamoDB, sessionTableName string, readCapacityUnits, writeCapacityUnits int64) error { describeTableInput := &dynamodb.DescribeTableInput{TableName: aws.String(sessionTableName)} if _, err := db.DescribeTable(describeTableInput); err != nil { awserr := err.(awserr.Error) if awserr.Code() == "ResourceNotFoundException" { // table does not exist - create now params := &dynamodb.CreateTableInput{ TableName: aws.String(sessionTableName), AttributeDefinitions: []*dynamodb.AttributeDefinition{ // Required { // Required AttributeName: aws.String("id"), AttributeType: aws.String("S"), // Required }, }, KeySchema: []*dynamodb.KeySchemaElement{ // Required { // Required AttributeName: aws.String("id"), KeyType: aws.String("HASH"), // Required }, }, ProvisionedThroughput: &dynamodb.ProvisionedThroughput{ ReadCapacityUnits: aws.Int64(readCapacityUnits), WriteCapacityUnits: aws.Int64(writeCapacityUnits), }, } if _, err := db.CreateTable(params); err != nil { return err } } else { return err } } return nil }