1- name : EC2-RECOVERY
1+ name : EC2-DIAGNOSTIC
22
33on :
44 workflow_dispatch :
55
66jobs :
7- recover :
8- name : Recover Server
7+ diagnose :
8+ name : Diagnose EC2 Instance
99 runs-on : ubuntu-latest
1010
1111 steps :
@@ -16,84 +16,81 @@ jobs:
1616 aws-secret-access-key : ${{ secrets.AWS_PROD_SECRET_KEY }}
1717 aws-region : ap-northeast-2
1818
19- - name : Check IAM identity
19+ - name : Check IAM identity and permissions
2020 run : |
21- echo "=== IAM ์ ๋ณด ํ์ธ ==="
22- aws sts get-caller-identity || echo "STS ํธ์ถ ์คํจ"
21+ echo "=== IAM ์ ๋ณด ==="
22+ aws sts get-caller-identity 2>&1 || true
2323
24- - name : Check CodeDeploy deployments
24+ echo ""
25+ echo "=== IAM ์ ์ฑ
ํ์ธ ==="
26+ ACCOUNT=$(aws sts get-caller-identity --query Account --output text 2>/dev/null)
27+ USER_NAME=$(aws sts get-caller-identity --query Arn --output text 2>/dev/null | awk -F'/' '{print $NF}')
28+ echo "Account: $ACCOUNT"
29+ echo "User: $USER_NAME"
30+
31+ echo ""
32+ echo "=== Attached Policies ==="
33+ aws iam list-attached-user-policies --user-name "$USER_NAME" 2>&1 || echo "IAM ์ ์ฑ
์กฐํ ๊ถํ ์์"
34+
35+ echo ""
36+ echo "=== Inline Policies ==="
37+ aws iam list-user-policies --user-name "$USER_NAME" 2>&1 || echo "IAM ์ธ๋ผ์ธ ์ ์ฑ
์กฐํ ๊ถํ ์์"
38+
39+ - name : CodeDeploy deployment group info
2540 run : |
26- echo "=== ์ต๊ทผ ๋ฐฐํฌ ์ํ ํ์ธ ==="
27- aws deploy list-deployments \
41+ echo "=== ๋ฐฐํฌ ๊ทธ๋ฃน ์์ธ ==="
42+ aws deploy get-deployment-group \
2843 --application-name runnect-prod-codedeploy \
2944 --deployment-group-name runnect-prod-codedeploy-group \
30- --include-only-statuses "Succeeded,Failed,InProgress" \
31- --query "deployments[:3]" \
32- --output text || echo "๋ฐฐํฌ ๋ชฉ๋ก ์กฐํ ์คํจ"
45+ --output json 2>&1 || echo "๋ฐฐํฌ ๊ทธ๋ฃน ์กฐํ ์คํจ"
3346
47+ - name : Latest deployment details
48+ run : |
49+ echo "=== ์ต๊ทผ ๋ฐฐํฌ ๋ชฉ๋ก ==="
3450 LATEST=$(aws deploy list-deployments \
3551 --application-name runnect-prod-codedeploy \
3652 --deployment-group-name runnect-prod-codedeploy-group \
3753 --query "deployments[0]" \
3854 --output text 2>/dev/null)
55+ echo "Latest deployment: $LATEST"
3956
4057 if [ -n "$LATEST" ] && [ "$LATEST" != "None" ]; then
4158 echo ""
42- echo "=== ์ต์ ๋ฐฐํฌ ์์ธ ==="
43- aws deploy get-deployment --deployment-id "$LATEST" \
44- --query "deploymentInfo.{status:status, createTime:createTime, completeTime:completeTime, errorInfo:errorInformation}" \
45- --output json
59+ echo "=== ๋ฐฐํฌ ์์ธ ==="
60+ aws deploy get-deployment --deployment-id "$LATEST" --output json 2>&1
61+
62+ echo ""
63+ echo "=== ๋ฐฐํฌ ์ธ์คํด์ค ๋ชฉ๋ก ==="
64+ aws deploy list-deployment-instances --deployment-id "$LATEST" --output json 2>&1 || echo "์ธ์คํด์ค ๋ชฉ๋ก ์กฐํ ์คํจ"
65+
66+ echo ""
67+ echo "=== ๋ฐฐํฌ ํ๊ฒ ์์ธ ==="
68+ INSTANCE_IDS=$(aws deploy list-deployment-instances --deployment-id "$LATEST" --query "instancesList" --output text 2>/dev/null)
69+ for INST in $INSTANCE_IDS; do
70+ echo "--- Instance: $INST ---"
71+ aws deploy get-deployment-instance --deployment-id "$LATEST" --instance-id "$INST" --output json 2>&1 || echo "์กฐํ ์คํจ"
72+ done
4673 fi
4774
48- - name : Trigger new CodeDeploy deployment
75+ - name : Check SSM access
4976 run : |
50- echo "=== ์ CodeDeploy ๋ฐฐํฌ ํธ๋ฆฌ๊ฑฐ ==="
51- DEPLOYMENT_ID=$(aws deploy create-deployment \
52- --application-name runnect-prod-codedeploy \
53- --deployment-group-name runnect-prod-codedeploy-group \
54- --file-exists-behavior OVERWRITE \
55- --s3-location bucket=runnect-prod-bucket,bundleType=zip,key=runnect_prod_server.zip \
56- --region ap-northeast-2 \
57- --query "deploymentId" \
58- --output text)
59-
60- echo "Deployment ID: $DEPLOYMENT_ID"
61-
62- echo "๋ฐฐํฌ ์๋ฃ ๋๊ธฐ (์ต๋ 5๋ถ)..."
63- for i in $(seq 1 30); do
64- STATUS=$(aws deploy get-deployment --deployment-id "$DEPLOYMENT_ID" \
65- --query "deploymentInfo.status" --output text 2>/dev/null)
66- echo "[$i/30] Status: $STATUS"
67-
68- if [ "$STATUS" = "Succeeded" ]; then
69- echo "๋ฐฐํฌ ์ฑ๊ณต!"
70- break
71- elif [ "$STATUS" = "Failed" ] || [ "$STATUS" = "Stopped" ]; then
72- echo "๋ฐฐํฌ ์คํจ! ์์ธ ์ ๋ณด:"
73- aws deploy get-deployment --deployment-id "$DEPLOYMENT_ID" \
74- --query "deploymentInfo.errorInformation" --output json
75- break
76- fi
77- sleep 10
78- done
79-
80- - name : Health check
77+ echo "=== SSM ์ธ์คํด์ค ๋ชฉ๋ก ==="
78+ aws ssm describe-instance-information --output json 2>&1 || echo "SSM ๊ถํ ์์"
79+
80+ - name : Try EC2 describe (may fail)
8181 run : |
82- echo "์๋ฒ ํฌ์ค ์ฒดํฌ (์ต๋ 3๋ถ ๋๊ธฐ)..."
83- for i in $(seq 1 18); do
84- HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 --max-time 10 http://3.35.195.11/actuator/health 2>/dev/null || echo "000")
85- echo "[$i/18] HTTP: $HTTP_CODE"
86- if [ "$HTTP_CODE" = "200" ]; then
87- echo "์๋ฒ ๋ณต๊ตฌ ์๋ฃ!"
88- exit 0
89- fi
90- sleep 10
91- done
82+ echo "=== EC2 ์ธ์คํด์ค ์กฐํ ์๋ ==="
83+ aws ec2 describe-instances --output json 2>&1 || echo "EC2 ๊ถํ ์์"
9284
9385 echo ""
94- echo "=== ํฌํธ๋ณ ์ฒดํฌ ==="
95- for PORT in 80 8081 8082; do
96- HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 --max-time 10 http://3.35.195.11:$PORT/actuator/health 2>/dev/null || echo "000")
97- echo "Port $PORT: HTTP $HTTP_CODE"
98- done
99- echo "WARNING: ์๋ฒ๊ฐ ์์ง ์๋ตํ์ง ์์ต๋๋ค."
86+ echo "=== Elastic IP ์กฐํ ์๋ ==="
87+ aws ec2 describe-addresses --public-ips 3.35.195.11 2>&1 || echo "Elastic IP ์กฐํ ์คํจ"
88+
89+ echo ""
90+ echo "=== ๋ณด์ ๊ทธ๋ฃน ์กฐํ ์๋ ==="
91+ aws ec2 describe-security-groups 2>&1 || echo "๋ณด์ ๊ทธ๋ฃน ์กฐํ ์คํจ"
92+
93+ - name : Check S3 bucket
94+ run : |
95+ echo "=== S3 ๋ฒํท ํ์ธ ==="
96+ aws s3 ls s3://runnect-prod-bucket/ 2>&1 || echo "S3 ์ ๊ทผ ์คํจ"
0 commit comments