1
1
#! /bin/bash
2
2
3
- # Check for environment argument
3
+
4
+ # ----------------------------
5
+ # ✅ Input Validation
6
+ # ----------------------------
4
7
if [ -z " $1 " ]; then
5
8
echo " [Error] Usage: $0 <environment>"
6
9
exit 1
7
10
fi
8
11
9
12
ENV=" $1 "
10
13
ENV_LOWER=$( echo " $ENV " | tr ' [:upper:]' ' [:lower:]' )
14
+
15
+ # ----------------------------
16
+ # ✅ Paths
17
+ # ----------------------------
11
18
SCRIPT_DIR=" $( dirname " $( realpath " $0 " ) " ) "
12
- TERRAFORM_DIR=" $SCRIPT_DIR /../terraform"
19
+ ROOT_DIR=" $( realpath " $SCRIPT_DIR /.." ) "
20
+ TERRAFORM_DIR=" $ROOT_DIR /terraform"
21
+ LOGS_DIR=" $ROOT_DIR /mylogs"
13
22
CONFIG_FILE=" ${ENV_LOWER} _config.tfvars"
14
23
15
- # Move to the Terraform directory
16
- cd " $TERRAFORM_DIR " || {
17
- echo " [Error] Failed to change directory to Terraform folder."
18
- exit 1
19
- }
20
-
24
+ # ----------------------------
25
+ # ✅ Terraform: App EC2
26
+ # ----------------------------
27
+ cd " $TERRAFORM_DIR "
21
28
echo " [+] Initializing Terraform..."
22
29
terraform init
23
30
24
- echo " [+] Applying configuration for environment: $ENV "
31
+ echo " [+] Applying config for environment: $ENV "
25
32
terraform apply -var-file=" $CONFIG_FILE " -auto-approve
26
33
27
- echo " [+] Waiting 30 seconds for app to deploy in ec2 instance "
34
+ echo " [+] Waiting for EC2 instance to boot... "
28
35
sleep 30
29
36
30
- # Get the public IP from Terraform output
31
37
RAW_INSTANCE_IP=$( terraform output -raw instance_public_ip)
32
-
33
- echo -e " \n"
34
- echo " [+] Testing app on http://$RAW_INSTANCE_IP :80"
35
- echo -e " \n"
36
-
37
- echo -e " \n"
38
- curl " http://$RAW_INSTANCE_IP :80"
39
- echo -e " \n"
40
- echo -e " \n"
41
-
42
38
echo " [+] Instance Public IP: $RAW_INSTANCE_IP "
43
39
44
- echo " [+] Deploying Log Verification EC2 instance..."
45
- terraform apply -var-file=" $CONFIG_FILE " -target=aws_instance.log_verifier -auto-approve
46
- VERIFIER_IP=$( terraform output -raw verifier_instance_public_ip)
47
-
40
+ echo " [+] Testing app at: http://$RAW_INSTANCE_IP "
41
+ curl -s " http://$RAW_INSTANCE_IP :80" || echo " [Warning] App not responding yet."
48
42
49
- echo " Verified Public IP: $VERIFIER_IP "
43
+ # ----------------------------
44
+ # ✅ Terraform: Log Verifier EC2
45
+ # ----------------------------
46
+ echo " [+] Deploying log verifier EC2..."
47
+ terraform apply -var-file=" $CONFIG_FILE " -target=aws_instance.log_verifier -auto-approve
50
48
49
+ VERIFIER_IP=$( terraform output -raw verifier_instance_public_ip)
50
+ echo " [+] Verifier Public IP: $VERIFIER_IP "
51
51
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"
52
+ # ----------------------------
53
+ # ✅ Wait for Logs to Sync
54
+ # ----------------------------
55
+ echo " [+] Waiting 100s for EC2-2 to sync logs from S3..."
54
56
sleep 100
55
- cd .. # to save logs at root level
57
+
58
+ # ----------------------------
59
+ # ✅ Setup SSH Key
60
+ # ----------------------------
56
61
if [ -n " $GITHUB_ACTIONS " ]; then
57
- PRIVATE_KEY_PATH=" . /ec2_key.pem"
62
+ PRIVATE_KEY_PATH=" $ROOT_DIR /ec2_key.pem"
58
63
else
59
- PRIVATE_KEY_PATH=" /Users/default/CS/DevOps/AWS/ ssh-key -ec2.pem"
64
+ PRIVATE_KEY_PATH=" $HOME /. ssh/your-local -ec2-key .pem" # Change this locally
60
65
fi
61
66
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
67
+ # ----------------------------
68
+ # ✅ Pull Logs from Verifier EC2
69
+ # ----------------------------
70
+ echo " [+] Checking SSH connection..."
71
+ ssh -i " $PRIVATE_KEY_PATH " -o StrictHostKeyChecking=no -q ubuntu@$VERIFIER_IP " echo 'SSH OK'" || {
72
+ echo " [❌] SSH connection failed!"
73
+ exit 1
74
+ }
66
75
67
- echo -e " \n"
68
- echo " [+] Using curl on app at http://$RAW_INSTANCE_IP :80"
69
- echo -e " \n"
70
- curl " http://$RAW_INSTANCE_IP :80"
71
- echo -e " \n"
72
- echo -e " \n"
76
+ echo " [+] Pulling logs from EC2-2..."
77
+ mkdir -p " $LOGS_DIR "
78
+ scp -i " $PRIVATE_KEY_PATH " -o StrictHostKeyChecking=no -r ubuntu@$VERIFIER_IP :/mylogs/* " $LOGS_DIR /"
73
79
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
80
+ # ----------------------------
81
+ # ✅ Re-test app (Optional)
82
+ # ----------------------------
83
+ echo " [+] Rechecking application availability..."
84
+ curl -s " http://$RAW_INSTANCE_IP :80" || echo " [Warning] App still not responding."
77
85
78
- TF_LOG=DEBUG terraform destroy -var-file=" $CONFIG_FILE " -auto-approve
86
+ # ----------------------------
87
+ # ✅ Export Outputs to GitHub Actions
88
+ # ----------------------------
89
+ if [ -n " $GITHUB_ACTIONS " ]; then
90
+ echo " verifier_ip=$VERIFIER_IP " >> " $GITHUB_OUTPUT "
91
+ echo " instance_ip=$RAW_INSTANCE_IP " >> " $GITHUB_OUTPUT "
92
+ fi
0 commit comments