InsightDataScience
ansible-playbook
Python

Ansible playbook to deploy distributed technologies

Last updated Jul 3, 2024
67
Stars
42
Forks
7
Issues
0
Stars/day
Attention Score
41
Language breakdown
No language data available.
Files click to expand
README

Ansible playbook to deploy distributed technologies

This project is a set of Ansible playbooks to easily install a set of distributed technologies on AWS

Table of Contents

* On your local/remote machine * Using Docker container * Launch/Terminate EC2 instances on AWS * Zookeeper * Kafka * Vowpal Wabbit

Supported playbooks

  • EC2
  • Zookeeper
  • Kafka

Supported Commands

~$ ansible-playbook <master-playbook>.yml --extra-vars "<var1>=<value1> <var2>=<value2>" --tags "<tag1>,<tag2>"
  • EC2 playbook is controlled by a yaml file containing variables for the EC2 instances to be acted on. More details below
  • Zookeeper, Kafka, and Vowpal Wabbit playbooks need respective cluster tags to be specified to identify which nodes are in the cluster and need to be acted on. More details below

Setup

On your local/remote machine

~$ mkdir -p /etc/ansible/hosts
  • Clone this repo
~$ git clone https://github.com/InsightDataScience/ansible-playbook.git
  • Copy the ec2.py and ec2.ini files in this repo to /etc/ansible/hosts
  • Update information in ansible_example.cfg and move it to /etc/ansible/ansible.cfg
  • Export AWS credentials as environment variables
export AWSACCESSKEY_ID=XXXXXXXXXXXXXX
  export AWSSECRETACCESS_KEY=XXXXXXXXXXXXXX

Using Docker container

~$ git clone https://github.com/InsightDataScience/ansible-playbook.git
  • Build your docker image locally with the following command - run this from the root folder of this repo
~$ docker build -t ansible-playbook -f conf/Dockerfile .
  • Run the docker container in interactive mode using the script in the repo - runansibleplaybook_container.sh
~$ ./runansibleplaybook_container.sh
  • Update information in /etc/ansible/ansible.cfg config file inside the container
  • Export AWS credentials in ~/.profile inside the container
export AWSACCESSKEY_ID=XXXXXXXXXXXXXX
  export AWSSECRETACCESS_KEY=XXXXXXXXXXXXXX

Playbooks

  • ###EC2
Launch/Start/Stop/Terminate EC2 instances on AWS.

* ####Variable file: Update exampleec2vars.yml as per your requirement

EC2 playbook is controlled by a yaml file with variables defined for the EC2 instances. An example variable file -exampleec2vars.yml - is included in this repo. You can define your own yaml file with the following information:

---
    key_pair: <key-name>
    instance_type: <instance-type>
    region: <region>
    securitygroupid: <security-group-id>
    num_instances: <num-of-instances>
    subnet_id: <subent-id>
    tagkeyvals:
      Name: <cluster-name>
      <custom-tag-key1>: <custom-tag-val1>
      <custom-tag-key2>: <custom-tag-val2>

The Name tag in the tagkeyvals is mandatory to create an identifier for the instances. More tags can be added if needed but are optional.

In your terminal, you will likely also need to add your private key to an ssh agent:

ssh-add </path/to/my.pem>

* ####Launch EC2 instances:

~$ ansible-playbook ./ec2.yml --extra-vars "varsfile=./exampleec2_vars.yml" --tags launch
* ####Stop EC2 instances:
~$ ansible-playbook ./ec2.yml --extra-vars "varsfile=./exampleec2_vars.yml" --tags stop
* ####Start EC2 instances:
~$ ansible-playbook ./ec2.yml --extra-vars "varsfile=./exampleec2_vars.yml" --tags start
* ####Terminate EC2 instances:
~$ ansible-playbook ./ec2.yml --extra-vars "varsfile=./exampleec2_vars.yml" --tags terminate

  • ###Zookeeper
For Zookeeper playbook, a zookeepertag needs to be specified to identify the nodes in the cluster. This zookeepertag can be any tag specified in tagkeyvals in the variable file for EC2 mentioned above was test-cluster, the zookeepertag would be specified as zookeepertag=Nametest-cluster. It doesn't have to be the Name tag but could be any key value pair in tagkeyvals specified as zookeepertag=<key><value>.

* ####Install Zookeeper:

~$ ansible-playbook ./zookeeper.yml --extra-vars "zookeepertag=<clustertag>" --tags install
* ####Start Zookeeper:
~$ ansible-playbook ./zookeeper.yml --extra-vars "zookeepertag=<clustertag>" --tags start
* ####Get info about Zookeeper on the specified cluster:
~$ ansible-playbook ./zookeeper.yml --extra-vars "zookeepertag=<clustertag>" --tags info
* ####Stop Zookeeper:
~$ ansible-playbook ./zookeeper.yml --extra-vars "zookeepertag=<clustertag>" --tags stop
* ####Uninstall Zookeeper:
~$ ansible-playbook ./zookeeper.yml --extra-vars "zookeepertag=<clustertag>" --tags uninstall
  • ###Kafka
Kafka has a dependency on Zookeeper for cluster membership, topic configuration, data partition, etc. For Kafka playbook, a zookeepertag and a kafkatag needs to be specified to identify the nodes in the zookeeper and kafka cluster respectively. The kafkatag and zookeepertag can be any tag specified in tagkeyvals in the variable file for EC2.

The kafkatag and zookeepertag are specifed as <key><value> for one of the tagkeyvals to be used. For example, if the <cluster-name> in the EC2 variable file mentioned above was test-cluster and we had same cluster for Zookeeper and Kafka, the kafkatag and zookeepertag would be specified as zookeepertag=Nametest-cluster and kafkatag=Nametest-cluster respectively. Both Zookeeper and Kafka don't have to be on the same cluster and it doesn't have to be the Name tag but it could be any key value pair in tagkeyvals specified as zookeepertag=<key><value> and kafkatag=<key>_<value>.

####Kafka's dependency on Zookeeper

Kafka's dependency on Zookeeper is taken care of by the Kafka playbook. If you are trying to ssetup Kafka on the cluster specified by kafkatag, the playbook will check that Zookeeper is installed on the cluster zookeepertag and if it is not setup, the playbook will first setup Zookeeper and then Kafka. By default, any operation on Kafka cluster, like start, install, etc., will first be executed on the Zookeeper cluster. However, we would want some of the operations to be executed on the Kafka cluster, like stop, uninstall, etc., not be executed on the Zookeeper cluster. This can be achieved by specifying a flag --skip-tags zookeeper while running the Kafka playbook. Examples for this behavior are shown below in the stop and uninstall operations.

* ####Install Kafka:

~$ ansible-playbook ./kafka.yml --extra-vars "zookeepertag=<clustertag> kafkatag=<clustertag>" --tags install
* ####Start Kafka:
~$ ansible-playbook ./kafka.yml --extra-vars "zookeepertag=<clustertag> kafkatag=<clustertag>" --tags start
* ####Get info about Kafka on the specified cluster:
~$ ansible-playbook ./kafka.yml --extra-vars "zookeepertag=<clustertag> kafkatag=<clustertag>" --tags info
* ####Stop Kafka:
~$ ansible-playbook ./kafka.yml --extra-vars "zookeepertag=<clustertag> kafkatag=<clustertag>" --tags stop --skip-tags zookeeper
* ####Uninstall Kafka:
~$ ansible-playbook ./kafka.yml --extra-vars "zookeepertag=<clustertag> kafkatag=<clustertag>" --tags uninstall --skip-tags zookeeper

* #### Vowpal Wabbit

Vowpal Wabbit is a fast out-of-core Machine Learning system. Installation can take upwards of 10 minutes on micro instances, as it compiles a lot of C++ with high optimization levels using Clang.

* ####Install Vowpal Wabbit:

~$ ansible-playbook ./vw.yml --extra-vars "vwtag=classvw" --tags install
🔗 More in this category

© 2026 GitRepoTrend · InsightDataScience/ansible-playbook · Updated daily from GitHub