1
1
#! /bin/bash
2
2
3
+ set -e # Exit on error
4
+
3
5
# Check for environment argument
4
6
if [ -z " $1 " ]; then
5
7
echo " [Error] Usage: $0 <environment>"
6
8
exit 1
7
9
fi
8
10
11
+ # ----------------------------
12
+ # ✅ Path Setup
13
+ # ----------------------------
9
14
ENV=" $1 "
10
15
ENV_LOWER=$( echo " $ENV " | tr ' [:upper:]' ' [:lower:]' )
16
+
11
17
SCRIPT_DIR=" $( dirname " $( realpath " $0 " ) " ) "
12
- TERRAFORM_DIR=" $SCRIPT_DIR /../terraform"
18
+ ROOT_DIR=" $( realpath " $SCRIPT_DIR /.." ) "
19
+ TERRAFORM_DIR=" $ROOT_DIR /terraform"
20
+ LOGS_DIR=" $ROOT_DIR /mylogs"
13
21
CONFIG_FILE=" ${ENV_LOWER} _config.tfvars"
14
22
15
- # Move to the Terraform directory
23
+ # ----------------------------
24
+ # ✅ Terraform Apply
25
+ # ----------------------------
16
26
cd " $TERRAFORM_DIR " || {
17
27
echo " [Error] Failed to change directory to Terraform folder."
18
28
exit 1
@@ -24,55 +34,71 @@ terraform init
24
34
echo " [+] Applying configuration for environment: $ENV "
25
35
terraform apply -var-file=" $CONFIG_FILE " -auto-approve
26
36
27
- echo " [+] Waiting 30 seconds for app to deploy in ec2 instance"
37
+ echo " [+] Waiting 30 seconds for app to deploy in EC2 instance... "
28
38
sleep 30
29
39
30
- # Get the public IP from Terraform output
31
40
RAW_INSTANCE_IP=$( terraform output -raw instance_public_ip)
41
+ echo " [+] Instance Public IP: $RAW_INSTANCE_IP "
32
42
33
- echo -e " \n"
34
- echo " [+] Testing app on http://$RAW_INSTANCE_IP :80"
35
- echo -e " \n"
36
-
37
- echo -e " \n"
43
+ echo -e " \n[+] Testing app on http://$RAW_INSTANCE_IP :80\n"
38
44
curl " http://$RAW_INSTANCE_IP :80"
39
45
echo -e " \n"
40
- echo -e " \n"
41
-
42
- echo " [+] Instance Public IP: $RAW_INSTANCE_IP "
43
46
47
+ # ----------------------------
48
+ # ✅ Deploy Log Verifier EC2
49
+ # ----------------------------
44
50
echo " [+] Deploying Log Verification EC2 instance..."
45
51
terraform apply -var-file=" $CONFIG_FILE " -target=aws_instance.log_verifier -auto-approve
46
- VERIFIER_IP=$( terraform output -raw verifier_instance_public_ip)
47
-
48
-
49
- echo " Verified Public IP: $VERIFIER_IP "
50
52
53
+ VERIFIER_IP=$( terraform output -raw verifier_instance_public_ip)
54
+ echo " [+] Verified Public IP: $VERIFIER_IP "
51
55
52
- # To verify and pull logs from ec2 to local.
53
- echo " Wait 100 seconds for verifier ec2 (read only) to pull the logs from s3 to local environment"
56
+ # ----------------------------
57
+ # ✅ Wait for Logs to Sync
58
+ # ----------------------------
59
+ echo " [+] Waiting 100 seconds for log sync (S3 → EC2)..."
54
60
sleep 100
55
- cd .. # to save logs at root level
61
+
62
+ # ----------------------------
63
+ # ✅ Setup SSH Key Path
64
+ # ----------------------------
56
65
if [ -n " $GITHUB_ACTIONS " ]; then
57
- PRIVATE_KEY_PATH=" . /ec2_key.pem"
66
+ PRIVATE_KEY_PATH=" $ROOT_DIR /ec2_key.pem"
58
67
else
59
- PRIVATE_KEY_PATH=" /Users/default/CS/DevOps/AWS/ssh-key-ec2.pem"
68
+ PRIVATE_KEY_PATH=" /Users/default/CS/DevOps/AWS/ssh-key-ec2.pem" # Change for your local setup
60
69
fi
61
70
62
- # PRIVATE_KEY_PATH="/Users/default/CS/DevOps/AWS/ssh-key-ec2.pem" #change this to your ssh private key path, also make sure to use `chmod 400` on your key before using
63
- echo " trying to scp logs to local"
64
- scp -r -i " $PRIVATE_KEY_PATH " -o StrictHostKeyChecking=no ubuntu@$VERIFIER_IP :/mylogs/ . # to pull logs from readonly ec2 to your local directory /mylogs/
65
- cd $TERRAFORM_DIR # to run destroy need to go to terraform directory
71
+ # ----------------------------
72
+ # ✅ SCP Logs from Verifier EC2
73
+ # ----------------------------
74
+ echo " [+] Checking SSH access..."
75
+ ssh -i " $PRIVATE_KEY_PATH " -o StrictHostKeyChecking=no -q ubuntu@$VERIFIER_IP " echo 'SSH OK'" || {
76
+ echo " [❌] SSH failed. Check key or user."
77
+ exit 1
78
+ }
66
79
67
- echo -e " \n"
68
- echo " [+] Using curl on app at http://$RAW_INSTANCE_IP :80"
69
- echo -e " \n"
80
+ echo " [+] Pulling logs to: $LOGS_DIR "
81
+ mkdir -p " $LOGS_DIR "
82
+ scp -i " $PRIVATE_KEY_PATH " -o StrictHostKeyChecking=no -r ubuntu@$VERIFIER_IP :/mylogs/* " $LOGS_DIR /"
83
+
84
+ # ----------------------------
85
+ # ✅ Re-Test Application (optional)
86
+ # ----------------------------
87
+ echo " [+] Retesting application..."
70
88
curl " http://$RAW_INSTANCE_IP :80"
71
89
echo -e " \n"
72
- echo -e " \n"
73
90
74
- echo " Terraform destroy will run after 5 minutes..."
75
- echo " You can press ctrl+c and do it earlier as well"
76
- sleep 300
91
+ # ----------------------------
92
+ # ✅ GitHub Output Export
93
+ # ----------------------------
94
+ if [ -n " $GITHUB_ACTIONS " ]; then
95
+ echo " verifier_ip=$VERIFIER_IP " >> " $GITHUB_OUTPUT "
96
+ echo " instance_ip=$RAW_INSTANCE_IP " >> " $GITHUB_OUTPUT "
97
+ fi
77
98
78
- TF_LOG=DEBUG terraform destroy -var-file=" $CONFIG_FILE " -auto-approve
99
+ # ----------------------------
100
+ # ❌ Destroy Step (Optional)
101
+ # ----------------------------
102
+ # echo "Terraform destroy will run after 5 minutes..."
103
+ # sleep 120
104
+ # terraform destroy -var-file="$CONFIG_FILE" -auto-approve
0 commit comments