Skip to content

Latest commit

 

History

History
253 lines (168 loc) · 4.98 KB

README.md

File metadata and controls

253 lines (168 loc) · 4.98 KB

simple redis client

Simple redis client written in Go. You can interact (set, get) either with local redis running in docker or the Azure Cache for Redis (deployed using terraform).

# image

michalsw/redis-client:latest

While connecting to Redis by default there is no password set in redis-client. If you want to pass access key (password) use env REDIS_PASS. If TLS is required like in Azure use env REDIS_TLS.

Use make to get all details and run specific command.

$ make help

# endpoints

GET   /red/ping
POST  /red/setuser
GET   /red/getuser/{id}
GET   /red/home

# local

# deploy 'redis'

docker run --rm -d --name redis -p 6379:6379 redis


# run 'redis-client'


> go

make go-run


> docker

REDIS_HOST=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis)
REDIS_HOST=$REDIS_HOST make docker-run


# POST

curl -i -X POST -d '{"name":"mi","age":10}' localhost:8080/red/setuser
curl -i -X POST -d '{"name":"mo","age":20}' localhost:8080/red/setuser


# GET

curl -XGET localhost:8080/red/ping
PONG

curl -XGET -s localhost:8080/red/getuser/1 | jq
{
  "name": "mi",
  "age": 10
}

curl -XGET -s localhost:8080/red/getuser/2 | jq
{
  "name": "mo",
  "age": 20
}

# azure

Here you have some example how to create a Python app that uses Azure Cache for Redis.

Don't forget to log in to Azure!

## login

az login


## deploy

*ACI - Azure Container Instances


# ACI - NO access keys (password)

> redis server

make azure-rg

DNS_NAME_LABEL=redis-$RANDOM \
LOCATION=westeurope \
RGNAME=redisrg

az container create \
--resource-group $RGNAME \
--name redis \
--image redis \
--restart-policy Always \
--ports 6379 \
--dns-name-label $DNS_NAME_LABEL \
--location $LOCATION \
--environment-variables \
  DNS_NAME=$DNS_NAME_LABEL.$LOCATION.azurecontainer.io


> test using 'redis-client' (run locally)

REDIS_HOST=redis-28318.westeurope.azurecontainer.io make go-run
curl -XGET localhost:8080/red/ping

make azure-rg-del


# TERRAFORM - WITH access keys (password)

> redis server [it takes some time to deploy]

cd redis/

az login

terraform init
terraform plan -out out.plan
terraform apply out.plan
(...)
hostname = mredis.redis.cache.windows.net
primary_access_key = yIvSS+rPz3zWhG3685lj6Fw9Si51stlZgx4lYieWF0s=
ssl_port = 6380

terraform destroy -auto-approve


> test using redis-client (run locally)

REDIS_HOST=mredis.redis.cache.windows.net \
REDIS_PORT=6380 \
REDIS_PASS=yIvSS+rPz3zWhG3685lj6Fw9Si51stlZgx4lYieWF0s= \
REDIS_TLS=true \
make go-run

curl -i -XGET localhost:8080/red/ping


> test using redis-client (run using ACI)

make azure-rg

SERVICE_ADDR=80 \
REDIS_HOST=mredis.redis.cache.windows.net \
REDIS_PORT=6380 \
REDIS_PASS=yIvSS+rPz3zWhG3685lj6Fw9Si51stlZgx4lYieWF0s= \
REDIS_TLS=true \
make azure-aci

curl redis-client-d58df48.westeurope.azurecontainer.io/red/home

curl redis-client-d58df48.westeurope.azurecontainer.io/red/ping

make azure-aci-logs

make azure-aci-delete

# use case

User is connecting to Redis-client to connect to Redis-cache.
redis-client is a frontend-service (deployed using App Service).
redis is a backend-service (deployed using ACI in private VNet).

$ az login
$ make azure-rg

Deploy redis-client webapp
webapp

Create the private VNet

$ make azure-vnet-create

Deploy redis using ACI in the private VNet

$ make azure-redis-vnet

Configure VNet integration
More details you can find here.

Select Add VNet: vnetconf1

Specify Subnet Address Block:
vnetconf2

vnetconf3

Configure redis-client (ENV vars)

$ REDISIP=$(az container show --resource-group redisrg --name redis --query ipAddress.ip --output tsv)

$ az webapp config appsettings set --resource-group redisrg --name redis-client --settings \
  SERVICE_ADDR=80 \
  REDIS_HOST=$REDISIP \
  REDIS_PORT=6379 \
  REDIS_PASS="" \
  REDIS_TLS=""

Enable logs

$ az webapp log config --name redis-client --resource-group redisrg --docker-container-logging filesystem

Watch logs

$ az webapp log tail --name redis-client --resource-group redisrg
...

Test connection

$ curl -XGET https://redis-client.azurewebsites.net/red/home

$ curl -XGET https://redis-client.azurewebsites.net/red/ping
PONG

If PONG then there is connection with redis!!

$ curl -i -X POST -d '{"name":"mi","age":10}' https://redis-client.azurewebsites.net/red/setuser
$ curl -i -X POST -d '{"name":"mo","age":20}' https://redis-client.azurewebsites.net/red/setuser

$ curl -XGET -s https://redis-client.azurewebsites.net/red/getuser/1 | jq
{
  "name": "mi",
  "age": 10
}

$ curl -XGET -s https://redis-client.azurewebsites.net/red/getuser/2 | jq
{
  "name": "mo",
  "age": 20
}


# clean ALL

$ make azure-rg-del