Skip to content

Instantly share code, notes, and snippets.

@franzwong
Last active October 25, 2018 07:45
Show Gist options
  • Save franzwong/2edcd2628fd5436c72a3fe715e4e46bf to your computer and use it in GitHub Desktop.
Save franzwong/2edcd2628fd5436c72a3fe715e4e46bf to your computer and use it in GitHub Desktop.
Setup aws env

Prerequisite

brew install jq

Setup

# Configuration
VPC_CIDR_BLOCK=10.0.0.0/16
PUBLIC_SUBNET_CIDR_BLOCK=10.0.1.0/24
PRIVATE_SUBNET_CIDR_BLOCK=10.0.2.0/24
KEY_PAIR_NAME=keyPair1
SSH_CIDR=0.0.0.0/0

aws ec2 create-key-pair --key-name $KEY_PAIR_NAME | jq -r '.KeyMaterial' > aws-keyPair1.pem

# Setup VPC and Subnets
VPC_ID=$(aws ec2 create-vpc --cidr-block $VPC_CIDR_BLOCK | jq -r '.Vpc.VpcId')
PUBLIC_SUBNET_ID=$(aws ec2 create-subnet --vpc-id $VPC_ID --cidr-block $PUBLIC_SUBNET_CIDR_BLOCK | jq -r '.Subnet.SubnetId')
PRIVATE_SUBNET_ID=$(aws ec2 create-subnet --vpc-id $VPC_ID --cidr-block $PRIVATE_SUBNET_CIDR_BLOCK | jq -r '.Subnet.SubnetId')
aws ec2 modify-subnet-attribute --subnet-id $PUBLIC_SUBNET_ID --map-public-ip-on-launch

# Setup Internet Gateway
INTERNET_GATEWAY_ID=$(aws ec2 create-internet-gateway | jq -r '.InternetGateway.InternetGatewayId')
aws ec2 attach-internet-gateway --internet-gateway-id $INTERNET_GATEWAY_ID --vpc-id $VPC_ID

# Setup Route Table
ROUTE_TABLE_ID=$(aws ec2 create-route-table --vpc-id $VPC_ID | jq -r '.RouteTable.RouteTableId')
aws ec2 create-route --route-table-id $ROUTE_TABLE_ID --destination-cidr-block 0.0.0.0/0 --gateway-id $INTERNET_GATEWAY_ID
ROUTE_TABLE_ASSOCIATE_ID=$(aws ec2 associate-route-table --route-table-id $ROUTE_TABLE_ID --subnet-id $PUBLIC_SUBNET_ID | jq -r '')

# Setup Security Group
SECURITY_GROUP_ID=$(aws ec2 create-security-group --group-name securityGroup1 --description "Security group 1" --vpc-id $VPC_ID | jq -r '.GroupId')
aws ec2 authorize-security-group-ingress --group-id $SECURITY_GROUP_ID --protocol tcp --port 80 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id $SECURITY_GROUP_ID --protocol tcp --port 22 --cidr $SSH_CIDR

# Setup EC2 Instances
PUBLIC_INSTANCE_ID=$(aws ec2 run-instances \
  --image-id ami-0922553b7b0369273 \
  --instance-type t2.micro \
  --key-name $KEY_PAIR_NAME \
  --subnet-id $PUBLIC_SUBNET_ID \
  --security-group-ids $SECURITY_GROUP_ID \
  --user-data file://ec2-setup.sh \
  --block-device-mappings 'DeviceName=/dev/xvda,Ebs={DeleteOnTermination=true,VolumeSize=8,VolumeType=gp2}' \
  | jq -r '.Instances[0].InstanceId')

Clean up

aws ec2 terminate-instances --instance-ids $PUBLIC_INSTANCE_ID

aws ec2 detach-internet-gateway --internet-gateway-id $INTERNET_GATEWAY_ID --vpc-id $VPC_ID
aws ec2 delete-internet-gateway --internet-gateway-id $INTERNET_GATEWAY_ID

aws ec2 disassociate-route-table --association-id $ROUTE_TABLE_ASSOCIATE_ID
aws ec2 delete-route-table --route-table-id $ROUTE_TABLE_ID

# Should be executed after EC2 instance is terminated
aws ec2 delete-security-group --group-id $SECURITY_GROUP_ID

aws ec2 delete-subnet --subnet-id $PUBLIC_SUBNET_ID
aws ec2 delete-subnet --subnet-id $PRIVATE_SUBNET_ID

aws ec2 delete-vpc --vpc-id $VPC_ID
#!/bin/bash
curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
sudo yum -y install nodejs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment