Tuesday, May 3, 2022

Provision Ubuntu 18.0.4 EC2 Instance | How to create EC2 instance in AWS console | Launch Ubuntu 18.0.4 instance in AWS

 How to create EC2 instance in AWS console using new UI experience?

What is EC2 instance? 

It is virtual server provided by AWS. We will be using this EC2 to setup both Jenkins and Tomcat. Please follow the below steps to create an EC2 instance.

Watch here for live demo:

Steps:
1: Login to AWS console by clicking this link -->  https://aws.amazon.com/console/
click on All services, Click on Compute -->  Click on EC2


2. Click on Launch instance


3. Enter Name as EC2 and enter 2 as number of instances


4. Select Ubuntu and choose Ubuntu server 18.0.4 as AMI




5. Enter t2.small as instance type
6. Click on Create new Key Pair


7. Choose the existing key pair if you have one, otherwise create new one, give some name as myJenkinsKey. Make sure you download the key in your local machine. Please do NOT give space or any character while naming the key.



8. Under Network settings, Click Edit



Add port range as 8080 and select AnyWhere as Source Type, that should enter 0.0.0.0/0 as Source

9. Enter 10 GB as storage 
And then make sure in Summary, values appear as below:


10. Click on Launch Instance.

Click on View instances

Now you should be able to view instances in AWS console.


Connect to EC2 instance from local machine:
Please click the below link to understand the steps for connecting to EC2 instance from your local machine - windows or Apple laptop.

http://www.cidevops.com/2018/02/how-to-connect-to-ec2-instance-from.html

Saturday, April 23, 2022

Create Azure Pipeline using YAML | Create Azure YAML Pipeline | Build Pipelines in Azure DevOps to Deploy into Azure Cloud | How to Deploy Java WebApp into Azure Web App in Azure Cloud

 Building pipelines in Azure DevOps is really easy, you can migrate your web applications from any where into Azure Cloud by using Azure pipelines.



Watch the steps in YouTube Channel:

Pre-requistes:


(If you already have a WebApp setup in Azure cloud, move to next step)
You need to create WebApp in Azure Cloud. WebApp is an App service (mostly Platform as a Service) provide by Azure Cloud to migrate any web applications.

Click here to learn how to create WebApp in Azure Portal.

Create Azure Build YAML pipeline in Azure DevOps

Login to Azure DevOps, go to your project dashboard.

Click on Pipelines --> new pipeline


Select GitHub or where ever your source code is 


Select your code repo

Choose the below option --> Maven package Java project web app to Linux on Azure


Choose the azure subscription, click on continue
Enter your Microsoft account details for Azure pipelines to authenticate with Azure cloud for deploying WebApp into App service.

Now choose web app name from the drop down

Click on validate and configure

Now Review Azure pipeline code 
and make sure path of mom.xml is added properly as MyWebApp/pom.xml





Click on Save and Run

Once you save the file, you can confirm by logging into your GitHub repo.


Now Build must be running. Once build is successful, we need to give permission for deployment into Azure. Click on Review






This confirms that webapp is deployed successfully in Azure cloud.


Verify the webapp deployment into Azure cloud

go to App settings of WebApp, copy the URL and enter /MyWebApp

https://enteryourwebappurl/MyWebApp


that's it..that is how you deploy Web App from Azure pipelines into Azure cloud.

Sunday, March 27, 2022

Install Jenkins on Ubuntu 18.0.4 using Docker Compose | Setup Jenkins on AWS EC2 Ubuntu instance | How to setup Jenkins in Ubuntu EC2 instance using Docker?

Please follow the steps to install Jenkins using Docker compose on Ubuntu 18.0.4 instance. 

What is Docker Compose?
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.
 
The purpose of docker-compose is to function as docker cli but to issue multiple commands much more quickly. To make use of docker-compose, you need to encode the commands you were running before into a docker-compose.yml file
 
Run docker-compose up and Compose starts and runs your entire app.

Change Host Name to Jenkins
sudo hostname Jenkins

Perform update first
sudo apt update

Now lets start Docker. compose installation first:

Install Docker-Compose
sudo apt-get install docker-compose -y

Add current user to docker group
sudo usermod -aG docker $USER

Create directory
mkdir ~/jenkins

Jenkins Setup

Create docker-compose.yml
this yml has all configuration for installing Jenkins
sudo vi docker-compose.yml 

version: '3.3'
services:
  jenkins:
    image: jenkins/jenkins:lts
    restart: unless-stopped
    privileged: true
    user: root
    ports:
      - 8080:8080
    container_name: jenkins
    volumes:
      - ~/jenkins:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/local/bin/docker:/usr/local/bin/docker

Now execute the compose file using Docker compose command:
sudo docker-compose up -d 



Make sure Jenkins is up and running
sudo docker-compose logs --follow
You can also get the admin password


How to get Jenkins admin password in another way?
Identify Docker container name

sudo docker ps


Get admin password by executing below command
sudo docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword


Access Jenkins in web browser

Now Go to AWS console. Click on EC2, click on running instances link. Select the checkbox of EC2 you installed Jenkins. Click on Action. Copy the value from step 4 that says --> Connect to your instance using its Public DNS:

Now go to browser. enter public dns name or public IP address with port no 8080.

Unlock Jenkins
You may get screen, enter the below command in Git bash( Ubuntu console)

Copy the password and paste in the browser.
Then click on install suggested plug-ins. 
Also create user name and password.
enter everything as admin. at least user name as admin password as admin
Click on Save and Finish. Click on start using Jenkins. Now you should see a screen like below:



That's it. You have setup Jenkins successfully using Docker compose. 
Please watch the steps in our YouTube channel.

Thursday, March 3, 2022

How to store Terraform state file in Azure Storage | How to manage Terraform state in Azure Blob Storage

One of the amazing features of Terraform is, it tracks the infrastructure that you provision. It does this through the means of state. By default, Terraform stores state locally in a file named terraform.tfstate. This does not work well in a team environment where if any developer wants to make a change he needs to make sure nobody else is updating terraform in the same time. You need to use remote storage to store state file.




With remote state, Terraform writes the state data to a remote data store, which can then be shared between all members of a team. Terraform supports storing state in many ways including the below:

  • Terraform Cloud
  • HashiCorp Consul
  • Amazon S3
  • Azure Blob Storage
  • Google Cloud Storage
  • Alibaba Cloud OSS
  • Artifactory or Nexus 

We will learn how to store state file in Azure Blob storage. We will be creating Azure storage account and container.

Watch the steps in YouTube Channel:

Pre-requistes:

Steps:

Configure remote state remote storage account

Before you use Azure Storage as a backend, you must create a storage account. We will create using shell script:

#!/bin/bash
RESOURCE_GROUP_NAME=tfstate
STORAGE_ACCOUNT_NAME=tfstate$RANDOM
CONTAINER_NAME=tfstate
# Create resource group
az group create --name $RESOURCE_GROUP_NAME --location eastus
# Create storage account
az storage account create --resource-group $RESOURCE_GROUP_NAME --name $STORAGE_ACCOUNT_NAME --sku Standard_LRS --encryption-services blob
# Create blob container
az storage container create --name $CONTAINER_NAME --account-name $STORAGE_ACCOUNT_NAME


This should have created resource group, storage account and container.


Configure terraform backend state 

To configure the backend state, you need the following Azure storage information:

    • storage_account_name: The name of the Azure Storage account.
    • container_name: The name of the blob container.
    • key: The name of the state store file to be created.
    • access_key: The storage access key.
    Create backend.tf file

    terraform {
    required_providers {
    azurerm = {
    source = "hashicorp/azurerm"
    version = "=2.63.0"
    }
    }
    backend "azurerm" {
    resource_group_name = "tfstate"
    storage_account_name = "<storage_acct_name>"
    container_name = "tfstate"
    key = "terraform.tfstate"
    }
    }

    provider "azurerm" {
    features {}
    }

    resource "azurerm_resource_group" "demo-rg" {
    name = "demo-rg"
    location = "eastus"
    }


    terraform init



    terraform apply 

    and type yes

    This should have created backend file called terraform.tfstate in a container inside azure storage.

    You can view remote state file info:


    This is how you can store terraform state information remotely. 

    Friday, February 4, 2022

    Create Amazon EKS cluster by eksctl | How to create EKS cluster in AWS cloud using eksctl | Create EKS Cluster in command line using IAM Role

    What is Amazon EKS

    Amazon EKS is a fully managed container orchestration service. EKS allows you to quickly deploy a production ready Kubernetes cluster in AWS, deploy and manage containerized applications more easily with a fully managed Kubernetes service.

    EKS takes care of master node/control plane. We need to create worker nodes.

    EKS cluster can be created in following different ways

    1. AWS console
    2. AWS CLI
    3. eksctl command
    4. using Terraform

    We will create EKS cluster using eksctl command line tool.

    Please watch the steps in YouTube channel:

    Pre-requistes:

    This Lab is using Jenkins EC2 instance. Jenkins EC2 instance needs to have following configured:

    • Install AWS CLI – Command line tools for working with AWS services, including Amazon EKS.

    • Install eksctl – A command line tool for working with EKS clusters that automates many individual tasks.

    • Install kubectl  – A command line tool for working with Kubernetes clusters. 

    Create IAM Role with Administrator Access

    You need to create an IAM role with AdministratorAccess policy.
    Go to AWS console, IAM, click on Roles. create a role


    Select AWS services, Click EC2, Click on Next permissions.
     
     Now search for AdministratorAccess policy and click


    Skip on create tag.
    Now give a role name and create it.

    Assign the role to EC2 instance
    Go to AWS console, click on EC2, select EC2 instance, Choose Security.
    Click on Modify IAM Role



    Choose the role you have created from the dropdown.
    Select the role and click on Apply.

    Switch to Jenkins user
    sudo su - jenkins

    Create EKS Cluster with two worker nodes using eksctl

    eksctl create cluster --name demo-eks --region us-east-2 --nodegroup-name my-nodes --node-type t3.small --managed --nodes 2

    the above command should create a EKS cluster in AWS, it might take 15 to 20 mins. The eksctl tool uses CloudFormation under the hood, creating one stack for the EKS master control plane and another stack for the worker nodes. 

    Once EKS cluster is created, kubeconfig file be created under /var/lib/jenkins/.kube folder.

    you can view the kubeconfig file by entering the below command:

    cat  /var/lib/jenkins/.kube/config

    Connect to EKS cluster using kubectl commands

    To view the list of worker nodes as part of EKS cluster.

    kubectl get nodes

    kubectl get ns

    Deploy Nginx on a Kubernetes Cluster
    Let us run some apps to make sure they are deployed to Kubernetes cluster. The below command will create deployment:

    kubectl create deployment nginx --image=nginx


    View Deployments
    kubectl get deployments

    Delete EKS Cluster using eksctl

    eksctl delete cluster --name demo-eks --region us-east-2 

    the above command should delete the EKS cluster in AWS, it might take a few mins to clean up the cluster.

    Errors during Cluster creation
    If you are having issues when creating a cluster, try to delete the cluster by executing the below command and re-create it.

    eksctl delete cluster --name demo-eks --region us-east-2 


    or Login to AWS console --> AWS Cloud formation --> delete the stack manually.

    you can also delete the cluster under AWS console --> Elastic Kubernetes Service --> Clusters
    Click on Delete cluster