blob: 1ace590f67404b0c2c4900e32c5a642457c9e07a [file] [log] [blame] [view]
## Gerrit AWS Templates
Those are a collection of [AWS CloudFormation](https://aws.amazon.com/cloudformation/)
templates and scripts to deploy Gerrit in AWS.
The aim is to provide some guidelines and example on how to deploy different Gerrit
setups in the Cloud using AWS as provider.
## Outline
- [Overview](#overview)
- [Pre-requisites](#pre-requisites)
- [Templates](#templates)
- [External Services](#external-services)
## Overview
The goal of Gerrit AWS Templates is to provide fully-functional Gerrit installations
to helps users deploying Gerrit on AWS by providing out-of-the-box templates.
With Gerrit AWS Templates, developers and administrator can create a production-ready
installation on the cloud in minutes and in a repeatable way, allowing them
to focus on fine tuning of the Gerrit configuration to suit the user needs.
The provided CloudFormation templates automate the entire creation and deployment
of the infrastructure and the application.
## Pre-requisites
To manage your AWS services via command line you will need to install
[AWS CLI](https://aws.amazon.com/cli/) and set it up to point to your account.
To build gerrit and related-components' images
[Docker](https://www.docker.com/)
To manipulate aws cloudformation outputs
[jq](https://stedolan.github.io/jq/)
## Templates
* [Standalone Gerrit primary sandbox with LDAP authentication](/single-primary/README.md)
* [Gerrit primary and replica sandbox with LDAP authentication](/primary-replica/README.md)
* [Gerrit dual-primary in HA sandbox with LDAP authentication](/dual-primary/README.md)
## External services
This is a list of external services that you might need to setup your stack and some suggestions
on how to easily create them.
#### SMTP Server
If you need to setup a SMTP service Amazon Simple Email Service can be used.
Details how setup Amazon SES can be found [here](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-set-up.html).
To correctly setup email notifications Gerrit requires ssl protocol on default port 465 to
be enabled on SMTP Server. It is possible to setup Gerrit to talk to standard SMTP port 25
but by default all EC2 instances are blocking it. To enable port 25 please follow [this](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/) link.
#### LDAP Server
If you need a testing LDAP server you can find details on how to easily
create one in the [LDAP folder](ldap/README.md).
## Logging
All recipes stream every log to CloudWatch. This always includes `sshd_log`,
`httpd_log` and `gc_log`.
## Resource names
When possible AWS resources are explicitly named so that they can be easily
distinguished when querying them via the aws-cli, or the AWS UI console, so that
their intent is clear.
However, AWS requires that resource names be no longer than 32 characters. For
this reason we adopt a naming-convention that trades off a bit of clarity in
favour of a more economical usage of characters.
* R - Replica
* P - Primary
* H - HTTP protocol
* S - SSH protocol
* G - GIT protocol
Some examples:
* In the `Load Balancers` section:
- `production-P-H` stands
for `Load Balancer serving HTTP traffic to the Primary Gerrit`
- `production-R-S` stands
for `Load Balancer serving SSH traffic to the Gerrit Replica`
- `production-Ps-H` stands
for `Load Balancer serving SSH traffic to both Gerrit primary instances`
* In the `Target Groups` section:
- `production-P1-H` stands
for `Target Group registering the Primary1 Gerrit instance listening over HTTP`
- `production-R-GS` stands
for `Target Group registering the Replica Gerrit instances listening over Git and SSH`
#### error_log
The 'error_log' might or might not be available depending on which version of
gerrit is being deployed.
From gerrit 3.3 it will always be available.
Prior to that it will be available from:
* stable-3.0 -> starting from 3.0.13
* stable-3.1 -> starting from 3.1.10
* stable-3.2 -> starting from 3.2.5
When the `error_log` is not available, Gerrit will still output the same content
to standard error. Refer to the [standard error section](#standard-error).
#### Standard error
Different recipes deploy different services to ECS (please refer to the
documentation of each recipe for details on what services are actually deployed).
Every ECS service will stream anything outputted to stderr to cloudwatch, to a
stream name that will take the form of:
```
{environmentName}/{serviceName}/{taskId}
```
For example, given the `gerrit-primary` service running task
`bb21cb504ca44150b770ca05e922e332`, on the `test` environment, the stderr will
be streamed to:
```
test/gerrit-primary/bb21cb504ca44150b770ca05e922e332
```
The task name can be found in the Amazon ECS console's `Task` section.
## Operations
A set of utilities to perform operational tasks is also provided.
Refer to the relevant [documentation](./operations/Operations.md) for details on this.