Document toolboxDocument toolbox

Synapse-Stack-Builder

Introduction

The Synapse-Stack-Builder project contains tools for building an entire Synapse stack of AWS resources.  Currently, the Synapse stack depends on the following AWS resources:

  • Elastic beanstalk - We currently have three environments deployed to Tomcat 7.x
    • Repository Services - The main Synapse REST API.
    • Authentication Services - The REST API for Authentication.
    • Portal - The main Synapse Web site.
  • RDS - All transactional Synapse meta data is stored in a MySQL database.
  • CloudSearch - Search and Query features are currently supported by cloudsearch
  • SNS - All database alarms are currently configured to send emails to the development team.

 

AWS Prerequisites

In order to run the Synapse-Stack-Builder there are few steps need to setup the AWS account.  All passwords and certicates must be upload to an S3 bucket in the AWS account before starting:

  1. Administration level AWS account access key and secret key.
  2. You will need an S3 bucket named: '${stack}-default'.
    1. This bucket should contain the property file with all of your stack's passwords named '${stack}-default.properties
  3. SSL Certificates used for the Elastic Load Balancer must be placed in the S3 bucket named: '${stack}-default'. The following files must be there:
    1. SSL/gd_bundle.crt (from GoDaddy)
    2. SSL/sagebase.org.crt (from GoDaddy)
    3. SSL/private-key-for-ssl-certs-2048.pem (from /work/platform/PasswordsAndCredentials/SshCertificates)

Building a Stack

Get the Code

The first step is to get the Synapse-Stack-Builder jar either from Artifactory or cloning from GitHub.  To clone from GitHub:

git clone https://github.com/Sage-Bionetworks/Synapse-Stack-Builder.git
cd Synapse-Stack-Builder
mvn clean install

Create a configuration property file

There is a minimum amount of configuration information that you must provide to the stack builder.  This is done by passing the path to a java Properties file to the stack builder.  To setup this file start by making a copy of the following file:

Synapse-Stack-Builder/src/main/resources/required-builder.properties

Here is an example of how to fill out this property file:

#The Amazon Web Services access key (id) need to connect to AWS
org.sagebionetworks.aws.access.key=<YOUR_ACCES_KEY>
#The Amazon Web Services secret key (password) need to connect to AWS
org.sagebionetworks.aws.secret.key=<YOUR_SECRET_KEY>
# This encryption key will be used to encrypt all passwords in the settings file
org.sagebionetworks.encryption.key=<YOUR_ENCRYPTION_KEY>
# The name of this stack (prod or dev)
org.sagebionetworks.stack=dev
# The name of this stack instance. The unique id of this instance of the stack.  For example, instance=B would be used to create prodB.
# For a dev stack this should be your last name.  For example, instance=hill would be used to create devhill
org.sagebionetworks.stack.instance=hill
# The version of the portal war to deploy.
org.sagebionetworks.portal.war.version=1.5.3
# The version of the authentication war to deploy.
org.sagebionetworks.auth.war.version=1.4.0
# The version of the repository war to deploy.
org.sagebionetworks.repo.war.version=1.4.0

Build a Stack

Build a stack by running the following:

./build-stack.sh <config.properties_file_path>

You may receive errors when you run the stack builder for the first time.  That is because it takes time to ready RDS and ElasticBeanstalk instances.  Run it again when the instances are ready to get rid of the errors.

CNAME Setup

Currently, there is one extra step need to get the stack ready (we hope to automate this step soon).  To access the new stack you will need to create some CNAMEs in GoDaddy:

HostPoints ToExample
auth-${stack}-${instance}auth-${stack}-${instance}-sagebase-org.elasticbeanstalk.comauth-dev-hill -> auth-dev-hill-sagebase-org.elasticbeanstalk.com
repo-${stack}-${instance}repo-${stack}-${instance}-sagebase-org.elasticbeanstalk.comrepo-dev-hill -> repo-dev-hill-sagebase-org.elasticbeanstalk.com
portal-${stack}-${instance}portal-${stack}-${instance}-sagebase-org.elasticbeanstalk.comportal-dev-hill -> portal-dev-hill-sagebase-org.elasticbeanstalk.com
search-${stack}-${instance}search-${stack}-${instance}-sagebase-org.elasticbeanstalk.comsearch-dev-hill -> search-dev-hill-sagebase-org.elasticbeanstalk.com