hdeiner / zipster-Vault-AWS-Lambda-build-environments-on-demand

Deploying A Java microservice using MySQL for backend and Vault for server configuration in AWS Lambda.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Deploying A Java microservice using MySQL for backend and Vault for server configuration in AWS Lambda.

Concept

Why do we use Docker Containers, anyway? We want to be able to create environments, anything from simple short lived and test isolated environments and right through to production, using the same easy to follow techniques that reduce risk that deployments will go bad. We reduce this risk by making deployments (even deployment environments) an everyday occurance, and testing frequently.

This project does all of that, and demonstrates a reference solution that includes secrets management using Vault in the process, so we can elimate the tyranny of decentralized environment configuration, and make system secrets something that systems ask for, rather than being pushed onto an environments surface.

  • Docker containers. Lots of them.
  • Docker Swarm orchestration and load balancing for demonstration and non-functional testing against.
  • Prometheus, Grafana, cAdvisor, Node Exporter, Alert Manager, and Unsee (for environment monitoring and alerting)
  • Portainer (for container management and trouble shooting)
  • Java (for our code)
  • Spark (for running a small REST server)
  • MySQL (for persistence of a zipcode database)
  • FlyWay (to version control the database)
  • Vault is a vital component of this project. We will use it for holding together environments, the endpoints in those environments,and the secrets needed for those environments.

Here's a sample of what zipster does. It searches for post offices within a given radius of a given zipcode. _curl-results-sample


Explanation of the scripts to run.

The scripts which comprise this project are grouped as follows.

  1. creating the Docker Images we need for our Vault, MySQL, and Spark servers
  2. running the images quickly and locally, such as for when we are developing and testing our code (tests are not included in this project for brevity)
  3. running the images in AWS for three variants. Both start with Vault being run and available for everyone.
    • bringing up an "AWS-QA" environment. The name is just to distinguish it from other environments and to hint at the capabilities.
    • bringing up and "AWS-QA-ELB" environment. Again, this name implies how one can put together a clustered environment. Of course, using terraform, adding or removing additional EC2 instances from this are quite easy.
    • bringing up and "AWS-QA-ELB" environment. Again, this name implies how one can put together a clustered environment. Of course, using terraform, adding or removing additional EC2 instances from this are quite easy.
Now, let's go into depth for each script.
createImages

createImages_step_1_create_vault_image_01
createImages_step_1_create_vault_image_02

createImages_step_2_create_mysql_image_01
createImages_step_2_create_mysql_image_02

createImages_step_3_create_spark_image_01
...
createImages_step_3_create_spark_image_02\

run_Locally

runLocally_step_1_bring_up_01
...
runLocally_step_1_bring_up_02

runLocally_step_2_test_01

runLocally_step_3_bring_down_01\

runAWS 01_init

runAWS_01_init_01_terraform_init_01
...
runAWS_01_init_01_terraform_init_02\

runAWS 02_vault

runAWS_02_vault_01_bring_up_01
...
runAWS_02_vault_01_bring_up_02


runAWS_02_vault_01_bring_up_03
runAWS_02_vault_01_bring_up_04
runAWS_02_vault_01_bring_up_05
runAWS_02_vault_01_bring_up_06
[we will bring down Vault at the very end, when everyone is done using it]

runAWS 03_awsqa - one ec2 instance for MYSQL and one ec2 instance for Spark Zipster



Bring Up
runAWS_03_awsqa_01_bring_up_01
...
runAWS_03_awsqa_01_bring_up_02


Bring Up - Effect in AWS
runAWS_03_awsqa_01_bring_up_03


Bring Up - Effect in Vault
runAWS_03_awsqa_01_bring_up_04
runAWS_03_awsqa_01_bring_up_05
runAWS_03_awsqa_01_bring_up_06
runAWS_03_awsqa_01_bring_up_07
runAWS_03_awsqa_01_bring_up_08


Test
runAWS_03_awsqa_02_test_01


Bring Down
runAWS_03_awsqa_03_bring_down_01
Bring Down - Effect in AWS
runAWS_03_awsqa_03_bring_down_02


Bring Down - Effect in Vault
runAWS_03_awsqa_03_bring_down_03
runAWS_03_awsqa_03_bring_down_04
runAWS_03_awsqa_03_bring_down_05\

runAWS 04_awsqa_elb - one ec2 instance for MYSQL, two ec2 instancex for Spark Zipster, one AWS ELB



Bring Up
runAWS_04_awsqa_elb_01_bring_up_01
...
runAWS_04_awsqa_elb_01_bring_up_02


Bring Up - Effect in AWS
runAWS_04_awsqa_elb_01_bring_up_03
runAWS_04_awsqa_elb_01_bring_up_04


Bring Up - Effect in Vault
runAWS_04_awsqa_elb_01_bring_up_05
runAWS_04_awsqa_elb_01_bring_up_06
runAWS_04_awsqa_elb_01_bring_up_07
runAWS_04_awsqa_elb_01_bring_up_08
runAWS_04_awsqa_elb_01_bring_up_09
runAWS_04_awsqa_elb_01_bring_up_10


Test
runAWS_04_awsqa_elb_02_test_01


Bring Down
runAWS_04_awsqa_elb_03_bring_down_01
...
runAWS_04_awsqa_elb_03_bring_down_02
Bring Down - Effect in AWS
runAWS_04_awsqa_elb_03_bring_down_03


Bring Down - Effect in Vault
runAWS_04_awsqa_elb_03_bring_down_04
runAWS_04_awsqa_elb_03_bring_down_05
runAWS_04_awsqa_elb_03_bring_down_06
runAWS_04_awsqa_elb_03_bring_down_07\

runAWS 05_awsqa_swarm - one ec2 instance for MYSQL, two ec2 instances for Swarm Workers, one ec2 instance for Swarm Manager (plus portainern and prometheus and grafana)



Bring Up
runAWS_05_awsqa_swarm_01_bring_up_01
...
runAWS_05_awsqa_swarm_01_bring_up_02


Bring Up - Effect in AWS
runAWS_05_awsqa_swarm_01_bring_up_03


Bring Up - Effect in Vault
runAWS_05_awsqa_swarm_01_bring_up_04
runAWS_05_awsqa_swarm_01_bring_up_05
runAWS_05_awsqa_swarm_01_bring_up_06
runAWS_05_awsqa_swarm_01_bring_up_07
runAWS_05_awsqa_swarm_01_bring_up_08
runAWS_05_awsqa_swarm_01_bring_up_09
runAWS_05_awsqa_swarm_01_bring_up_10
runAWS_05_awsqa_swarm_01_bring_up_11
runAWS_05_awsqa_swarm_01_bring_up_12
runAWS_05_awsqa_swarm_01_bring_up_13


Test
runAWS_05_awsqa_swarm_02_test_01


Test - Look at Manager Node
runAWS_05_awsqa_swarm_02_test_manager_node_01


Test - Look at Portainer
runAWS_05_awsqa_swarm_02_test_portainer_01
runAWS_05_awsqa_swarm_02_test_portainer_02
runAWS_05_awsqa_swarm_02_test_portainer_03
runAWS_05_awsqa_swarm_02_test_portainer_04
runAWS_05_awsqa_swarm_02_test_portainer_06
runAWS_05_awsqa_swarm_02_test_portainer_06
runAWS_05_awsqa_swarm_02_test_portainer_07


Test - Look at Grafana
runAWS_05_awsqa_swarm_02_test_grafana_01
runAWS_05_awsqa_swarm_02_test_grafana_02
runAWS_05_awsqa_swarm_02_test_grafana_03
runAWS_05_awsqa_swarm_02_test_grafana_04


Bring Down
runAWS_05_awsqa_swarm_03_bring_down_01
...
runAWS_05_awsqa_swarm_03_bring_down_02
Bring Down - Effect in AWS
runAWS_05_awsqa_swarm_03_bring_down_03


Bring Down - Effect in Vault
runAWS_05_awsqa_swarm_03_bring_down_04
runAWS_05_awsqa_swarm_03_bring_down_05
runAWS_05_awsqa_swarm_03_bring_down_06
runAWS_05_awsqa_swarm_03_bring_down_07
runAWS_05_awsqa_swarm_03_bring_down_08
runAWS_05_awsqa_swarm_03_bring_down_09
runAWS_05_awsqa_swarm_03_bring_down_10
runAWS_05_awsqa_swarm_03_bring_down_11\

runAWS 02_vault [bring down]

runAWS_02_vault_03_bring_down_01


runAWS_02_vault_03_bring_down_02

About

Deploying A Java microservice using MySQL for backend and Vault for server configuration in AWS Lambda.


Languages

Language:Shell 45.7%Language:HCL 29.5%Language:Java 18.1%Language:Batchfile 2.4%Language:Dockerfile 2.3%Language:HTML 2.0%