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