ECS 설계에서 발생한 원인에 대한 개요

전제지식도 대강대강 도전한 결과
여러 가지 공부에 푹 빠졌으니 간단하게 요약해 봅시다.
자신에게 맞는 부분은 주로 임무를 중심으로 한다.

컨디션


인상은 다음과 같다.
docker-compose

GitHubActions→ESR
+
ecspresso

ALB

ECS
+
EC2

RDS
aws의 관리는terraform에서 진행됩니다.

ECS의 작업 교체 안정화 시간


자기가 선택한 포인트는ecspresso deploy가 실행할 때 왜 아래와 같은지입니다.
작업 정의의 교체가 순환됩니다.
2022/05/02 09:25:49 test-service/sample-ecs-cluster Registering a new task definition...
2022/05/02 09:25:49 test-service/sample-ecs-cluster Task definition is registered test-service:98
2022/05/02 09:25:49 test-service/sample-ecs-cluster service attributes will not change
2022/05/02 09:25:49 test-service/sample-ecs-cluster desired count: 1
2022/05/02 09:25:49 test-service/sample-ecs-cluster Updating service tasks...
2022/05/02 09:25:52 test-service/sample-ecs-cluster Waiting for service stable...(it will take a few minutes)
2022/05/02 09:26:03 test-service/sample-ecs-cluster  PRIMARY test-service:98 desired:1 pending:0 running:1
2022/05/02 09:26:03 test-service/sample-ecs-cluster   ACTIVE test-service:89 desired:1 pending:0 running:1
2022/05/02 09:25:54 (service test-service) has started 1 tasks: (task xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx).
2022/05/02 09:26:13 test-service/sample-ecs-cluster  PRIMARY test-service:98 desired:1 pending:0 running:1
2022/05/02 09:26:13 test-service/sample-ecs-cluster   ACTIVE test-service:89 desired:1 pending:0 running:1
2022/05/02 09:26:04 (service test-service) registered 1 targets in (target-group arn:aws
:elasticloadbalancing:ap-northeast-1:***:targetgroup/sample-http/xxxxxxxxxxxxxxx
)
2022/05/02 09:25:54 (service test-service) has started 1 tasks: (task xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx).
2022/05/02 09:26:23 test-service/sample-ecs-cluster  PRIMARY test-service:98 desired:1 pending:0 running:1
2022/05/02 09:26:23 test-service/sample-ecs-cluster   ACTIVE test-service:89 desired:1 pending:0 running:1
2022/05/02 09:26:04 (service test-service) registered 1 targets in (target-group arn:aws
:elasticloadbalancing:ap-northeast-1:***:targetgroup/sample-http/xxxxxxxxxxxxxxx
)

해결책


단순한ecspresso의config.yaml의 timeout을 기본 10분으로 연장하면
6분 30초가량 잘못 통과하지 않았다.

까닭


아마도 다른 여러 가지 원인이 있을 것이다. 그래서 어느 시점에 타임아웃을 만지작거리는 것이 이 순환의 원인이다.
ecspresso deploy의 해설 페이지에 상세한 내용을 써서 정말 큰 도움이 되었습니다.
https://zenn.dev/fujiwara/articles/b5cb8bc64c83a6c8ca12
'ECS 서비스가 Stable 상태가 될 때까지 기다립니다'라고 적혀있어요.
ECS에서 서비스가 안정되기 전의 시간 timeout을 설정하는 것이 좋습니다.

다른 이유가 될 수 있는 부분.


자신이 체험한 것은 다음과 같은 몇 가지가 있다.

GiitHubAction 환경 변수를 읽지 않았습니다.


rails의 MASTERKEY와 AWS의 KEY 정보는 GiitHubAction의 Action secrets에서
등록을 통해 CI에서 환경 변수로 호출할 수 있지만 설정하지 않았습니다.
(별말씀을요. 이 KEY 정보를 GiitHub 창고에 넣으면 무서워요. 주의하세요)

부하 평형기의 건강 검사


로드밸런서의 건강검진에서 건강검진용 URL이 준비되지 않아 디버깅이 진행됐다.
결과적으로 임무가 함께 오자마자 반복적으로 떨어지는 현상이 나타났다.
건강검진의 경로와 HTTP 상태 코드 주변(리디렉션 시 등)을 주의하는 것도 원인이다.
다음은 제가 경험하지 못한 것입니다. 후술한 참고 애니메이션에서도 언급했습니다.
물론 AWS 기타 리소스 때문이죠.
왜냐하면 GiitHubAction과ecspresso에서도 오류를 감지할 수 없는 경우가 있어요.
하나하나 확인해야 한다.

보안 그룹


위에서 설명한 대로 서비스 간에 보안 그룹을 설정합니다.
적절하게 설정되지 않은 상황들.예컨대
VPC는 다른 곳에 설치
/포트가 다르다 (이것도 애플리케이션에서 기다리는 것들과 함께 확인해야 한다)
서브넷이 다르다
이렇게 되면 통신이 통하지 않아 오류가 발생할 수 있다.

네트워크 연결


안전팀도 접촉을 했어요.
네트워크 자체도 구성 요소가 증가함에 따라 복잡해지기 때문에 하나하나 진지하게 볼 필요가 있다.
서브넷이 공용인지 개인인지 여부
IWG 부착 여부, ALB를 통한 통신 여부
등등, 컨테이너 없이 통신이 가능한지 먼저 확인할 수도 있다.

데이터베이스


EC2로 직접 통신하면 데이터베이스 주위에 오류가 발생합니다
잘 읽다가 틀리면 아는 경우도 많을 것 같아요.
물론 데이터베이스에 접근할 수 없어 오류가 발생하는 경우도 있다.

IAM 권한 주위


여기에 KEY 관리 확인이 필요합니다.
또한 CI 실행 시 수행 사용자에게 부여된 권한과
(기본 펄스에 설정된 ID 기반 정책)
EC2와 s3 등에 대한 권한
(리소스 기반 정책)
만약 이 두 가지 설정이 모두 정확하지 않다면, 실행할 때 오류가 발생할 것이다.
아이디 기반 정책의 동작 일람은 다음과 같은 내용을 참조할 수 있다.
https://qiita.com/isosa_yama/items/992efdc9e3e74ed421fa

로그 보기


자신의 환경에서 클라우드 워치에 로그 그룹을 만들고 뱉기
GiitHubAction의 실행 로그를 확인했습니다.
일지를 반복해서 보면 해결의 힌트가 떠오른다.

참고 자료


ECS 공식 문서
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/troubleshooting.html
AWS와 ecspresso의 저자가 보여준 귀중한 동영상
https://youtu.be/eUcVfFsbVLI
공식 문서
https://zenn.dev/fujiwara/articles/4847fb822f2820

감상


디자인 주위를 현지에서 정식 공연으로 조정해도
전제 지식이 상당히 필요하다.좀 더 복잡한 환경이 많은 것 같아요.
이번에는 단순한 Rails 어플리케이션 작업에도 다음과 같은 사전 지식을 사용했습니다.
· Linux 릴리즈(Debian, Alpine Linux)
• Linux 명령, 조개 껍질 스크립트
・Docker
・Giit、GiitHub、GiitHub Action
・AWS 관련 지식
 ∟Route53
 ∟Certificate Manager
 ∟CloudWatch
 ∟IAM
 ∟VPC
 ∟ALB
 ∟EC2
 ∟ECS
 ∟ECR
 ∟RDS
· Rails 등 애플리케이션에 대한 지식
 ∟HTML
 ∟CSS
 ∟JavaScript
 ∟Ruby
· DB 설정 주변 지식
 ∟MySQL
 ∟SQLite
ecspresso는 Blue/Green depro와 스크롤 가능
다른 CI공구들하고도 협업하기 편한데.
나는 또 시간을 내서 한번 해 보고 싶다.

좋은 웹페이지 즐겨찾기