먼저 이 문제는 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'라는 책을 실습하는 과정에서 마주친 상황이다.
책은 몇 년 전에 지어진 기준이라 자바나 스프링부트의 버전이 낮게 되어있다. 그렇지만 그 당시 버전보다는 지금 상황에서 안정된 최신 버전으로 변경사항은 고치며 해보고 싶어 최신버전으로 진행했다.
- Spring Boot : 3.1.2
- Java : 17
- Gradle : 8.2.1
EC2 pem키를 ppk파일로 변환
[p.252]
puttygen을 사용해서 pem키를 ppk파일로 변환할 수 있고, 과거에는 그렇게 했다. 이제는 그럴 필요 없이 아래의 그림과 같이 ppk를 받으면 된다!
당연히 이렇게 했겠지만 처음 접한 사람은 무심코 놓칠 수도 있기에 정리했다.
CodeDeploy 에이전트 설치 실패
[p.345]
책에 나온 설치 코드
aws s3 cp s3://aws-codedeploy-ap-northeast-2/latest/install . --region ap-northeast-2
chmod +x ./install && sudo ./install auto
sudo service codedeploy-agent status
를 하고 running 메시지가 출력되면 정상이다.
그 당시 책에 나와있는 명령어로는 CodeDeploy 에이전트를 설치할 수 없었다. 그 당시 OS 이미지와 버전이 달라져서 생긴 이슈인 것 같다.
sudo yum install -y ruby
wget -q https://aws-codedeploy-`curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region`.s3.`curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region`.amazonaws.com/latest/install -O install
wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent status
를 하고 PID가 출력된다면 정상적으로 실행된 것이다.
프로세스 아이디(CURRENT_PID)를 조회할 때 grep jar로 검색하면 PID가 조회되지 않음
[p.359]
배포 자동화를 구성하는 과정 중 deploy.sh 스크립트를 생성하는 곳에서 현재 구동 중인 애플리케이션이 있다면 죽이고 없다면 넘어가는 과정에서 문제가 생겼다. 현재 구동 중인 PID를 구하는 곳에서 jar로 하면 내 애플리케이션을 찾지 못하고 java로 해야 정상적으로 작동했다.
CURRENT_PID=$(pgrep -fl $PROJECT_NAME | grep java | awk '{print $1}')
CodeDeploy 배포 실패
[p.364]
배포 자동화 구성 후 테스트하는 과정에서 travis CI로 S3에는 전달해서 S3에서는 파일을 확인했는데 S3에서 CodeDeploy로 전달하는 과정에서 Access Denied 에러가 발생했다.
액세스가 거부됐다는 Message를 보고 IAM을 확인해야겠다고 생각했다.
먼저, AWS 키를 발급받기 위한 사용자에게는 AmazonS3FullAccess와 AWSCodeDeployFullAccess 권한을, 역할을 추가하는 부분에서 EC2에는 AmazonEC2RoleforAWSCodeDeploy 권한을, CodeDeploy에는 AWSCodeDeployRole 권한을 확인했다. 책에서 제시한 권한으로는 문제가 해결되지 않아서 계속 찾아보다가, 결국 S3 버킷 정책(GetObject)을 설정해 주니 문제가 해결되었다. (책에서는 버킷 정책을 설정하는 부분은 없었다..ㅠㅠ)
[정책 생성 참고] - 참고 URL
AWS Policy Genverator에서 정책을 생성하면 된다.
`GetObject`와 `ListBucket`을 추가해 준다.
언제나 잘못된 설명이나 부족한 부분에 대한 피드백은 환영입니다🤍