Skip to content

Commit 78e0b78

Browse files
committed
chore: EC2 진단 워크플로우 업데이트
1 parent e11a7c7 commit 78e0b78

1 file changed

Lines changed: 61 additions & 64 deletions

File tree

.github/workflows/ec2-reboot.yml

Lines changed: 61 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
name: EC2-RECOVERY
1+
name: EC2-DIAGNOSTIC
22

33
on:
44
workflow_dispatch:
55

66
jobs:
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

Comments
 (0)