4.2. Changing Event Store (original) (raw)
AWS DynamoDB
To use AWS DynamoDB event store we need to add localstack container. This way we can use a fully functional local AWS cloud stack.
helm/requirements.yaml
dependencies: +# AWS localstack (for local development)
- name: microservice
- version: 0.1.0
- repository: "file://../microservice"
- alias: localstack
- condition: localstack.enabled
helm/values.yaml
ingress: paths:
- path: /localstack
backend:serviceName: go-api-boilerplate-localstackservicePort: 4567AWS localstack https://github.com/localstack/localstack
localstack:
enabled: true
nameOverride: localstack
image:
repository: localstack/localstacktag: 0.8.10pullPolicy: IfNotPresentservice:
ports:- name: dynamodbinternalPort: 4569externalPort: 4569- name: uiinternalPort: 4567externalPort: 4567env:
- name: SERVICESvalueFrom: "dynamodb:4569"- name: PORT_WEB_UIvalueFrom: 4567
user: env:
- name: AWS_REGION
valueFrom:configMapKeyRef:key: AWS_REGIONname: go-api-boilerplate-app- name: AWS_ENDPOINT
valueFrom:configMapKeyRef:key: AWS_ENDPOINTname: go-api-boilerplate-app
configMap: data:
- AWS_REGION: 'us-east-1'
- AWS_ENDPOINT: 'http://go-api-boilerplate-localstack:4569'
Finally we can switch memory event store to DynamoDB one as follow:
cmd/user/main.go
package main
import ( + "github.com/aws/aws-sdk-go/aws" - "github.com/vardius/go-api-boilerplate/pkg/eventstore/memory" + "github.com/vardius/go-api-boilerplate/pkg/eventstore/dynamodb" )
type config struct {
+ AwsRegion string env:"AWS_REGION" envDefault:"us-east-1"
+ AwsEndpoint string env:"AWS_ENDPOINT" envDefault:"http://localhost:4569"
}
func main() { ctx := context.Background()
cfg := config{}
env.Parse(&cfg)- awsConfig := &aws.Config{
Region: aws.String(cfg.AwsRegion),Endpoint: aws.String(cfg.AwsEndpoint),- }
- eventStore := eventstore.New()
- eventStore := eventstore.New("events", awsConfig)