ECS 클러스터는 왜 일을 안할까?

2024년 1월 12일 금요일

Today I Learned

날짜

2024년 1월 12일 금요일

내용

타운홀미팅이 있어 오전밖에 시간이 없었다. 딱히 시간이 있었다고 해결이 됐을 것 같진 않지만..

SEO

HTML의 <meta> 태그는 해당 페이지에 대한 다양한 정보를 표현하기 위해 사용한다. 쉬운 부분이라 다들 알겠지만, 나는 속성에 대해 몰랐던 부분이 있었는데,

  • title 속성은 없다. meta가 아니라 head에 title 태그를 추가하면 된다.
  • 최근 keyword 속성은 잘 쓰지 않는다. 너도 나도 이것 저것 추가를 많이 하다보니 알고리즘이 신경쓰지 않는다고 한다.
  • description : 뭔가 읽기 편하고, 간결한게 좋을 것 같지만 사실 최근에는 검색의 핵심이다. 타겟 유저가 검색에 포함할 법한 단어가 포함되어 있는 것이 좋다. 따라서 동어반복은 좋지 않다. 그렇다고, 말이 안되는 단순 단어 나열만 작성하면 알고리즘이 무시한다.

이정도…? 구글 검색 봇의 마음은 참 갈대같다.

ECS Task

Weekly Review Report Email이 여전히 실패중이다. 사실 딱히 조치를 하지 않았으니 당연하긴 하다. 정말 모든 것을 뒤져봤지만 아직 모르겠다.

  • 내가 설정한 Task를 실행하기 위해선 S3 버킷에서 환경변수를 가져와야 한다. 이 부분이 계속 실패의 원인이다.

    ResourceInitializationError: failed to download env files: file download command: non empty error stream: service call has been retried 5 time(s): RequestCanceled: request context canceled caused by: context deadline exceeded

  • 환경변수를 받아오는 요청이 실패하고 있고, 5회를 넘어가면서 Task가 취소되고 중지된다.
  • 이 Task가 실행되는 클러스터의 region은 서울이다. S3 객체는 오하이오다. 혹시나 요청 시간이 너무 오래걸려 취소되는가 싶어 제한 시간을 최댓값인 120초로 늘려줬다(default는 30초). 애초에 요청이 처리되는데 30초가 걸릴리도 없겠다는 생각이 들긴 했지만.. Task Definition을 개정해서 배포했는데 실패했다.
  • Task Definition을 개정한 후 서비스를 다시 배포하니 배포자체가 안됐다. 애초에 배포 단계에서부터 환경변수를 불러오지 못하게 됐다. 사실 이게 당연한 이치긴 한게, 서비스 배포할떄는 받아오고 Task 수행할 떄는 못받아오는게 말이 되나..?
  • 더 이상한 사실은, 내가 새롭게 등록한 Task만 작동이 안된다. 문제는 모든 Task에 발생한다. 기존에 정의되어있는 방식으로 처리하는 예약 Task가 4개였다. 내가 추가해서 5개가 되었는데, 기존 4개도 위에서 처럼 환경변수를 불러오지 못한다는 오류가 계속 발생하고 있었다. 하지만 반복주기가 짧으니(짧게는 5분, 길게는 1시간에서 12시간) 잦은 재시도가 있었고 그 과정에서 성공하는 시도가 존재했다. 정확히 몇 번 시도해야 통과하는지는 확인할 수 없으나 Task가 작동하긴 한다. 내가 예약한 Task는 주기가 주 1회다.
  • 물론 이 주기를 10분으로 짧게 해 반복해서 실행시켜봤지만 여전히 실패한다.
  • 위에서 언급했듯, Task definition에서 startTimeoutstopTimeout 을 최대치로 늘려 개정한 이후에는 배포조차 안되었기 때문에 기존의 개정판으로 다시 배포했다. 그랬더니 또 배포는 된다. 내 Task는 안되고…
  • 우리 서비스의 서버는 2곳이기 때문에 정의된 task도 2개다. 나머지쪽은 위 오류가 발생하긴 하지만 ‘덜’ 발생한다.
  • 두 Task definition을 비교하다가 Task role과 Task excution role이 다르다는 사실을 발견했다. 나머지쪽은 Task role은 지정이 되어있지 않았고 Task excution role만 지정되어 있었다. 지금 문제가 되는 task definition의 경우, 기존에는 지정되지 않았지만 최근 개정때 Task role도 같은 IAM 역할이 지정되었다.
  • Task role은 실행되는 Task 내의 애플리케이션이 AWS 리소스에 접근할 때 사용되고, Task Execution Role은 Task가 AWS 서비스와 상호작용할 때 사용된다.
  • Task role 에 S3 버킷에 접근하여 값을 가져올 권한이 없다면 이 오류가 설명이 될지도 모르겠다.
  • 해당 IAM Role의 정책을 확인해보니 권한은 아주 잘 있다.
  • 이제 진짜 모르겠다. AWS community와 stackoverflow에 질문을 올렸으니 손오공의 원기옥마냥 모두의 지식을 모아 해결되길 빌어야겠다.

DKIM

DMARC는 SPF와 DKIM 중 하나가 인증되었을 때 처리된다. 둘 다 설정이 되어있지 않다면 스팸처리 당한다. 물론 가장 좋은 상황은 둘 다 알맞게 설정해주는 것. 하지만 어제부터 DKIM이 적용되지 않는다.

Amazon SES를 이용하는 계정이 같은 계정에서 도메인을 호스팅한다면 DKIM은 자동적으로 추가되어 큰 문제가 없다. 다만, 우리는 호스팅 계정과 SES 계정이 다르기 떄문에 내가 직접 CNAME 레코드를 추가했다. 근데 안된다. 분명 SES에서도 verifed라고 했는데…

이 적용이 최대 72시간까지 걸릴수도 있다고 하니 주말에 좀 확인을 해봐야겠다. 월요일에 제발 설정좀..

회고

다음주부터 스프린트가 시작되어 빨리 마무리 해야하는데… VSCode를 못 만진지 이틀째.