개요
현재 제가 진행하고 있는 프로젝트인 애니프렌즈 백엔드의 개발 환경 배포는 Github Action + AWS S3 + CodeDploey로 이루어집니다. 배포 환경 설정을 위해 ec2 인스턴스에 S3와 CodeDeploy 접근 권한을 가진 역할을 부여하였고 CodeDeploy 역시 기본 생성 시 부여되는 권한을 가지고 있습니다.
문제는 배포까지 성공적으로 이루어졌음에도 애플리케이션이 실행되지 않았습니다.
원인
이유를 찾기 위해서 뒤져볼 로그는 /opt/codedeploy-agent/deployment-root/deployment-logs
디렉터리 하위의 codedeploy-agent-deployments.log
입니다. 로그를 읽기 위해 다음 명령어를 입력해줍니다.
cat codedeploy-agent-deployments.log
배포가 성공한 것을 확인할 수는 있지만 권한 오류가 빵빵 터지면서 정상적으로 로그 파일에 접근하지 못하는 것 또한 확인할 수 있습니다.
이러한 문제가 발생한 원인은 제가 작성한 appspec.yml
때문입니다.
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/app/deploy
hooks:
ApplicationStart:
- location: scripts/deploy.sh
timeout: 60
runas: ec2-user
appspec.yml
은 files, resources, permissions, hooks 4개의 섹션으로 구성되어 있습니다. 이 중 resources는 AWS ECS와 Lambda 전용 섹션이며 permissions는 EC2 전용 섹션입니다.
위 파일의 경우 개인 permissions 섹션이 누락되어있지만 AWS 개인 계정에서 배포시에 정상 작동하는 것을 확인하였습니다. 이번 프로젝트에서도 해당 파일을 그대로 적용하였으나 한 가지 차이점은 IAM 계정을 이용하였다는 것입니다. 따라서 이는 권한 차이로 인해 permission denied 오류가 발생한 것으로 추정됩니다.
해결
이제 원인을 알았으니 누락된 permissions 섹션을 추가해줍니다.
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/app/deploy
permissions:
- object: /
pattern: "**"
owner: ec2-user
group: ec2-user
hooks:
ApplicationStart:
- location: scripts/deploy.sh
timeout: 60
runas: ec2-user
- object: 파일 시스템 객체가 인스턴스로 복사된 후 지정한 권한이 적용되는 파일, 디렉터리입니다.
- pattern: 권한을 적용할 패턴을 지정합니다. 지정하지 않거나 “**”를 사용하면 지정한 권한이 일치하는 모든 파일, 티렉터리에 적용됩니다.
- owner: 지정한 object의 소유자 이름입니다. 지정하지 않으면 원본 파일 또는 디렉터리/폴더 구조에 적용된 기존의 모든 소유자가 복사 작업 후에도 변경되지 않습니다.
- group: 지정한 object의 그룹 이름입니다. owner와 동일하게 생략할 시 복사 작업 후에도 변경되지 않습니다.
나머지 명령의 경우 공식 문서 에서 상세하게 확인 가능합니다.
수정된 appspec.yml
을 가지고 다시 한 번 배포를 진행하면 CodeDeploy를 이용하여 배포한 모든 파일과 디렉터리의 소유자 이름과 그룹이 ec2-user로 변경된 것을 확인할 수 있습니다.
codedeploy-agent-deployments.log
도 다시 확인해보면 다음과 같이 성공적으로 쉘 스크립트에 따라 명령들이 실행된 것을 확인할 수 있습니다.
'백엔드' 카테고리의 다른 글
로그 세팅하기 2탄. 프롬테일, 로키, 그라파나 (1) | 2023.12.02 |
---|---|
존재하지 않는 객체와 협력하기 (1) | 2023.11.20 |
Parameter와 Argument (0) | 2023.06.20 |
[디자인 패턴] 옵저버 패턴 (0) | 2023.06.19 |
[디자인 패턴] 싱글턴 패턴 (0) | 2023.06.11 |