In this article, We are going to perform Elasticsearch Installation using Ansible on AWS Instance, configuring Elasticsearch, install nginx and configure SSL.
First create a directory:
$ sudo mkdir ansible_workspace
Navigate to ansible directory
$ cd ansible_workspace
Now create a YAML file for ansible playbook.
$ sudo nano deploy_elasticsearch.yaml
Table of Contents
Step 1: Create Inventory
---
- name: Stage instance(s)
hosts: localhost
connection: local
user: root
gather_facts: false
tags:
- stage
Step 2: Create EC2 Instance using Ansible
Create an EC2 instance using Ansible, Insert your keypair name, instance type, security group, AMI image, and instance count
- keypair: EC2KEYPAIRNAME
- instance_type: t1.micro
- security_group: EC2SECURITYGROUPNAME
- image: AMINAME
- instance_count: 2
tasks:
- name: Launch the new EC2 Instance using Ansible
ec2:
instance_type: t2.medium #
group: mahesh-NG #security Group
count: 1
key_name: awskeypair # key pair
image: ami-0fc20dd1da406jkhy #Image ID
region: us-east-2 # EC2 region
vpc_subnet_id: subnet-0b67481hg7v82fc2d5a # subnet ID
wait: yes
assign_public_ip: yes
register: ec2
Step 3: Adding Instance to Deploy Group
Add the newly created host to deploy group to connect
- name: Add the newly created host so that we can further contact it
add_host:
name: "{{ item.public_ip }}"
groups: deploy
with_items: "{{ ec2.instances }}"
Step 4: Connect and Exchange SSH key pair
connect ec2 instance and exchange ssh key pair
- name: Wait for SSH to come up
wait_for:
host: "{{ item.public_ip }}"
port: 22
state: started
with_items: "{{ ec2.instances }}"
- name: accept new ssh fingerprints
shell: ssh-keyscan -H {{ item.public_ip }} >> ~/.ssh/known_hosts
with_items: '{{ ec2.instances }}'
- name: Breathing room (Ansible uses python apt, has issues running directly after boot)
pause: seconds=15
Step 5: Elasticsearch Installation using Ansible
Install OpenJDK 11, set JAVA HOME, install nginx and Elasticsearch installation using ansible.
- name: Configuring ElasticSearch
hosts: deploy
user: ubuntu
become_method: sudo
become: true
gather_facts: false
tags:
- config
- configure
tasks:
- name: update cache and ignore errors in case of problems
become: yes
apt: update_cache=yes
ignore_errors: yes
- name: install nginx
become: yes
apt:
name: nginx
purge: yes
state: present
- name: install java 11
become: yes
apt:
name: openjdk-11-jdk
purge: yes
state: present
- name: Set Java home
shell: sudo echo "JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" >> /etc/environment
- name: export Java home
shell: export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
- name: Download ElasticSearch package
shell: wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
- name: check package list
shell: echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
-name: update cache and ignore errors in case of problems
become: yes
apt: update_cache=yes
ignore_errors: yes
- name: install elasticsearch
become: yes
apt:
name: elasticsearch
purge: yes
state: present
notify: restart elasticsearch
We have covered, Elasticsearch Installation using Ansible on AWS Instance
Step 6: Configure Elasticsearch and Adding SSL
Make below configuration in Elasticsearch and add SSL certificates
- name: Copy over Elasticsearch settings copy: src=./elasticsearch/elasticsearch.yml dest=/etc/elasticsearch/elasticsearch.yml notify: restart elasticsearch - name: Copy over nginx defailt file copy: src=./elasticsearch/default dest=/etc/nginx/sites-available/default notify: restart nginx - name: Copy over chain file copy: src=./elasticsearch/fullchain.pem dest=/etc/nginx/sites-available/fullchain.pem notify: restart nginx - name: Copy over pvt keypair copy: src=./elasticsearch/privkey.pem dest=/etc/nginx/sites-available/privkey.pem notify: restart nginx handlers: - name: restart elasticsearch action: service name=elasticsearch state=restarted - name: restart nginx action: service name=nginx state=restarted
Now Run the Ansible playbook using below command
$ ansible-playbook -i /etc/ansible/ec2.py -vvv deploy_elasticsearch.yml -vv --private-key=/home/mahesh/ansible_workspace/awskp.pem
Make below changes in Elasticsearch configuration file
# ---------------------------------- Network ----------------------------------- # # Set the bind address to a specific IP (IPv4 or IPv6): # network.host: 0.0.0.0 # # Set a custom port for HTTP: # http.port: 9200 # # For more information, consult the network module documentation. # # --------------------------------- Discovery ---------------------------------- # # Pass an initial list of hosts to perform discovery when this node is started: # The default list of hosts is ["127.0.0.1", "[::1]"] # discovery.seed_hosts: [] discovery.type: single-node # # Bootstrap the cluster using an initial set of master-eligible nodes: # #cluster.initial_master_nodes: ["node-1", "node-2"] # # For more information, consult the discovery and cluster formation module documentation.
Overview of Ansible Playbook
Below is complete ansible playbook to install Elasticsearch
---
- name: Stage instance(s)
hosts: localhost
connection: local
user: root
gather_facts: false
tags:
- stage
tasks:
- name: Launch the new EC2 Instance
ec2:
instance_type: t2.medium
group: mahesh-NG
count: 1
key_name: awskeypair
image: ami-0fc20dd1da406jkhy
region: us-east-2
vpc_subnet_id: subnet-0b67481hg7v82fc2d5a
wait: yes
assign_public_ip: yes
register: ec2
- name: Add the newly created host so that we can further contact it
add_host:
name: "{{ item.public_ip }}"
groups: deploy
with_items: "{{ ec2.instances }}"
- name: Wait for SSH to come up
wait_for:
host: "{{ item.public_ip }}"
port: 22
state: started
with_items: "{{ ec2.instances }}"
- name: accept new ssh fingerprints
shell: ssh-keyscan -H {{ item.public_ip }} >> ~/.ssh/known_hosts
with_items: '{{ ec2.instances }}'
- name: Breathing room (Ansible uses python apt, has issues running directly after boot)
pause: seconds=15
- name: Configuring ElasticSearch
hosts: deploy
user: ubuntu
become_method: sudo
become: true
gather_facts: false
tags:
- config
- configure
tasks:
- name: update cache and ignore errors in case of problems
become: yes
apt: update_cache=yes
ignore_errors: yes
- name: install nginx
become: yes
apt:
name: nginx
purge: yes
state: present
- name: install java 11
become: yes
apt:
name: openjdk-11-jdk
purge: yes
state: present
- name: Set Java home
shell: sudo echo "JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" >> /etc/environment
- name: export Java home
shell: export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
- name: Download ElasticSearch package
shell: wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
- name: check package list
shell: echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
- name: update cache and ignore errors in case of problems
become: yes
apt: update_cache=yes
ignore_errors: yes
- name: install elasticsearch
become: yes
apt:
name: elasticsearch
purge: yes
state: present
notify: restart elasticsearch
- name: Copy over Elasticsearch settings
copy: src=./elasticsearch/elasticsearch.yml dest=/etc/elasticsearch/elasticsearch.yml
notify: restart elasticsearch
- name: Copy over nginx defailt file
copy: src=./elasticsearch/default dest=/etc/nginx/sites-available/default
notify: restart nginx
- name: Copy over chain file
copy: src=./elasticsearch/fullchain.pem dest=/etc/nginx/sites-available/fullchain.pem
notify: restart nginx
- name: Copy over pvt keypair
copy: src=./elasticsearch/privkey.pem dest=/etc/nginx/sites-available/privkey.pem
notify: restart nginx
handlers:
- name: restart elasticsearch
action: service name=elasticsearch state=restarted
- name: restart nginx
action: service name=nginx state=restarted
Conclusion:
We have covered, Elasticsearch Installation using Ansible on AWS Instance, configuring Elasticsearch, install nginx and configure SSL in nginx.
Related Articles
How to Install Ansible on Ubuntu 18.04/16.04 LTS
How to Install Netdata using Ansible Playbook
Reference
please share ec2.py file