Skip to main content

Unix Bash/Shell script to create Custom VPC in AWS

This article provides you a unix shell script which creates following resources under your AWS account. You can download the script from the link "VPC Setup Script"

AWS Resources Created by the script

  • VPC with CIDR prefix 10.0.0.0/24
  • Public Subnet with CIDR prefix 10.0.0.0/25
  • Private Subnets with CIDR prefix 10.0.0.128/25
  • Internet Gateway 
  • Routing Tables for public and private subnets
  • NAT Gateway
  • Elastic IP
  • EC2 instance 1 of type t2.micro in private subnet
  • EC2 instance 2 of type t2.micro in public subnet
Please ensure to delete these resources when you don't need them or else you will be charged by Amazon as per the pricing policy for these services.




Pre-requisites:

This program uses AWS command line interface. If you do not have it already, then install AWS CLI before running this script. You can download and install AWS CLI using the AWS CLI Installer Link


Linux Shell Script Code: 
  • Copy the below code and put it in a text file. Save the text file with .sh extension.
  • If you want your VPC in different CDR range, then modify the CIDR prefixes at line# 1,5 & 6.
  • During the EC2 instance creation in last 2 lines, change the name of the private key file. This script uses the private key file name as "myec2key"
Contents of shell script vpc_setup.sh

export CIDR=10.0.0.0/24
aws ec2 create-vpc --cidr-block $CIDR > aws_output.txt
cat aws_output.txt
export vpcid=`egrep VpcId aws_output.txt | cut -d":" -f2 | sed 's/"//g' | sed 's/,//g' | cut -d" " -f2`
export CIDRPublic=10.0.0.0/25
export CIDRPrivate=10.0.0.128/25
aws ec2 create-subnet --vpc-id $vpcid --cidr-block $CIDRPublic > aws_output.txt
cat aws_output.txt
export pubsubnetid=`egrep SubnetId aws_output.txt | cut -d":" -f2 | sed 's/"//g' | sed 's/,//g' | cut -d" " -f2`
aws ec2 create-subnet --vpc-id $vpcid --cidr-block $CIDRPrivate > aws_output.txt
cat aws_output.txt
export privsubnetid=`egrep SubnetId aws_output.txt | cut -d":" -f2 | sed 's/"//g' | sed 's/,//g' | cut -d" " -f2`
aws ec2 create-internet-gateway > aws_output.txt
cat aws_output.txt
export IGW=`egrep InternetGatewayId aws_output.txt | cut -d":" -f2 | sed 's/"//g' | sed 's/,//g' | cut -d" " -f2`
aws ec2 attach-internet-gateway --vpc-id $vpcid --internet-gateway-id $IGW
aws ec2 create-route-table --vpc-id $vpcid > aws_output.txt
cat aws_output.txt
export RoutePublic=`egrep RouteTableId aws_output.txt | cut -d":" -f2 | sed 's/"//g' | sed 's/,//g' | cut -d" " -f2`
aws ec2 create-route-table --vpc-id $vpcid > aws_output.txt
cat aws_output.txt
export RoutePrivate=`egrep RouteTableId aws_output.txt | cut -d":" -f2 | sed 's/"//g' | sed 's/,//g' | cut -d" " -f2`
aws ec2 associate-route-table --subnet-id $pubsubnetid --route-table-id $RoutePublic
aws ec2 associate-route-table --subnet-id $privsubnetid --route-table-id $RoutePrivate
aws ec2 modify-subnet-attribute --subnet-id $privsubnetid --map-public-ip-on-launch
aws ec2 create-route --route-table-id $RoutePublic --destination-cidr-block 0.0.0.0/0 --gateway-id $IGW
aws ec2 allocate-address  > aws_output.txt
cat aws_output.txt
export EIP=`egrep AllocationId aws_output.txt | cut -d":" -f2 | sed 's/"//g' | sed 's/,//g' | cut -d" " -f2`
aws ec2 create-nat-gateway --subnet-id $privsubnetid --allocation-id $EIP > aws_output.txt
cat aws_output.txt
export NAT=`egrep NatGatewayId aws_output.txt | cut -d":" -f2 | sed 's/"//g' | sed 's/,//g' | cut -d" " -f2`
while true
do
aws ec2 describe-nat-gateways --nat-gateway-id $NAT > aws_output1.txt
export state=`egrep State aws_output1.txt | cut -d":" -f2 | sed 's/"//g' | sed 's/,//g' | cut -d" " -f2`
if [ "$state" != "pending" ]
then
break
fi
echo "waiting for NAT allocation sleeping for 20s"
sleep 20
done
aws ec2 create-route --route-table-id $RoutePrivate --destination-cidr-block 0.0.0.0/0 --gateway-id $NAT
aws ec2 run-instances --image-id ami-0810abbfb78d37cdf --count 1 --instance-type t2.micro --key-name myec2key --subnet-id $pubsubnetid >aws_output.txt
cat aws_output.txt
aws ec2 run-instances --image-id ami-0810abbfb78d37cdf --count 1 --instance-type t2.micro --key-name myec2key --subnet-id $privsubnetid >aws_output.txt
cat aws_output.txt

Comments

Popular posts from this blog

Configure Oracle ASM Disks on AIX

Configure Oracle ASM Disks on AIX You can use below steps to configure the new disks for ASM after the raw disks are added to your AIX server by your System/Infrastructure team experts: # /usr/sbin/lsdev -Cc disk The output from this command is similar to the following: hdisk9 Available 02-T1-01 PURE MPIO Drive (Fibre) hdisk10 Available 02-T1-01 PURE MPIO Drive (Fibre) If the new disks are not listed as available, then use the below command to configure the new disks. # /usr/sbin/cfgmgr Enter the following command to identify the device names for the physical disks that you want to use: # /usr/sbin/lspv | grep -i none This command displays information similar to the following for each disk that is not configured in a volume group: hdisk9     0000014652369872   None In the above example hdisk9 is the device name and  0000014652369872  is the physical volume ID (PVID). The disks that you want to use may have a PVID, but they must not belong to a volu...

Gitlab installation steps on Redhat Linux

In this blog we will see the steps to install Gitlab on Redhat Enterprise Linux 6. I will be using the virtual machine "gitserver" that I have created on Google Cloud. You can use any server or VM running RHEL 6 and follow these steps. Follow the below steps to install gitlab. Run these steps as root user. # yum install -y curl policycoreutils-python openssh-server cronie # lokkit -s http -s ssh  # yum install postfix  # service postfix start  # chkconfig postfix on  # curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash  # EXTERNAL_URL="http://34.69.44.142" yum -y install gitlab-ee  You will see a screen similar to below, once your gitlab installation is successful. You can now access the gitlab console using the http or https url that you provided during the installation, i.e., http://<ip/server_name> http://gitserver.localdomain.com or  http://34.69.44.142 When you open the c...

Load records from csv file in S3 file to RDS MySQL database using AWS Data Pipeline

 In this post we will see how to create a data pipeline in AWS which picks data from S3 csv file and inserts records in RDS MySQL table.  I am using below csv file which contains a list of passengers. CSV Data stored in the file Passenger.csv Upload Passenger.csv file to S3 bucket using AWS ClI In below screenshot I am connecting the RDS MySQL instance I have created in AWS and the definition of the table that I have created in the database testdb. Once we have uploaded the csv file we will create the data pipeline. There are 2 ways to create the pipeline.  Using "Import Definition" option under AWS console.                    We can use import definition option while creating the new pipeline. This would need a json file which contains the definition of the pipeline in the json format. You can use my Github link below to download the JSON definition: JSON Definition to create the Data Pipeline Using "Edit Architect" ...