This set of templates provides all the components to deploy a Gerrit dual-master in HA in ECS. The 2 masters will share the Git repositories via NFS, using EFS.
The following templates are provided in this example:
cf-cluster
: define the ECS cluster and the networking stackcf-service-master
: define the service stack running the gerrit mastercf-dns-route
: define the DNS routing for the servicecf-service-slave
: define the service stack running the gerrit replicacf-service-lb
: define the LBs in front of gerrit masters (this includes haproxy as well as NLB)NOTE: This stack uses EFS in provisioned mode, which is a better setting for large repos (> 1GB uncompressed) since it provides a lower latency compared to the burst mode. However, it has some costs associated. If you are dealing with small repos, you can switch to burst mode.
Follow the steps described in the Prerequisites section
Please refer to the configuration docs to understand how to set up the configuration and what common configuration values are needed. On top of that, you might set the additional parameters, specific for this recipe.
Configuration values affecting deployment environment and cluster properties
SERVICE_MASTER1_STACK_NAME
: Optional. Name of the master 1 service stack. gerrit-service-master-1
by default.SERVICE_MASTER2_STACK_NAME
: Optional. Name of the master 2 service stack. gerrit-service-master-2
by default.MASTER1_SUBDOMAIN
: Optional. Name of the master 1 sub domain. gerrit-master-1-demo
by default.MASTER2_SUBDOMAIN
: Optional. Name of the master 2 sub domain. gerrit-master-2-demo
by default.CLUSTER_DESIRED_CAPACITY
: Optional. Number of EC2 instances composing the cluster. 1
by default.HTTP_HOST_PORT_MASTER1
: Optional. Gerrit Host HTTP port for master1 (must be different from master2). 9080
by default.SSH_HOST_PORT_MASTER1:
: Optional. Gerrit Host SSH port for master1 (must be different from master2). 29418
by default.HTTP_HOST_PORT_MASTER2
: Optional. Gerrit Host HTTP port for master2 (must be different from master1). 9080
by default.SSH_HOST_PORT_MASTER2:
: Optional. Gerrit Host SSH port for master2 (must be different from master1). 29418
by default.SLAVE_SUBDOMAIN
: Mandatory. The subdomain of the Gerrit slave. For example: <AWS_PREFIX>-slave
LB_SUBDOMAIN
: Mandatory. The subdomain of the Gerrit load balancer. For example: <AWS_PREFIX>-dual-master
make [AWS_REGION=a-valid-aws-region] [AWS_PREFIX=some-cluster-prefix] create-all
The optional AWS_REGION
and AWS_REFIX
allow you to define where it will be deployed and what it will be named.
It might take several minutes to build the stack. You can monitor the creations of the stacks in CloudFormation
pem
file on the current directory. To use when ssh-ing into your instances as follow: ssh -i cluster-keys.pem ec2-user@<ec2_instance_ip>
make [AWS_REGION=a-valid-aws-region] [AWS_PREFIX=some-cluster-prefix] delete-all
The optional AWS_REGION
and AWS_REFIX
allow you to specify exactly which stack you target for deletion.
Note that this will not delete:
Get the URL of your Gerrit master instances this way:
aws cloudformation describe-stacks \ --stack-name <SERVICE_MASTER1_STACK_NAME> \ | grep -A1 '"OutputKey": "CanonicalWebUrl"' \ | grep OutputValue \ | cut -d'"' -f 4 aws cloudformation describe-stacks \ --stack-name <SERVICE_MASTER2_STACK_NAME> \ | grep -A1 '"OutputKey": "CanonicalWebUrl"' \ | grep OutputValue \ | cut -d'"' -f 4
Gerrit master instance ports:
8080
29418
If you need to setup some external services (maybe for testing purposes, such as SMTP or LDAP), you can follow the instructions here
Refer to the Docker section for information on how to setup docker or how to publish images