Woohan-TDD / book-aws-study

0 stars 0 forks source link

06장. 배포 자동화 #6

Open KS-KIM opened 3 years ago

aegis1920 commented 3 years ago

몇 가지 이슈 정리

서버가 켜질 때마다 nginx.conf 를 바뀌어진 IP로 할당해야하는 이슈

AWS에서 우리가 사용하고 있는 IP는 고정 IP가 아니라 퍼블릭 IP이기 때문에 인스턴스를 껐다 켤때마다 바뀝니다. 인스턴스를 켤 때마다 직접 들어가서 매번 바꿔줘야하는 게 너무 귀찮았습니다.

그래서 shell script로 IP와 DNS 주소를 가지고 올 수 있는 방법을 찾긴 했습니다.

# 퍼블릭 IP
aws_public_ip=$(curl http://169.254.169.254/latest/meta-data/public-ipv4)

# 퍼블릭 DNS IP
aws_public_dns_ip=$(curl http://169.254.169.254/latest/meta-data/public-hostname)

aws_public_ip, aws_public_dns_ip 를 전역변수로 만들고 nginx.conf 안에서 쓰면 되지 않을까 생각했는데 생각보다 잘 되지 않았습니다. 쉘 파일이 아니라 .conf 파일이라서 그런듯합니다.

같이 고민해보면 좋을 것 같아 적습니다 :)

해결 : nginx.conf를 굳이 바꾸지 않아도 인스턴스 안에 nginx와 서버가 켜져있다면 켜진 서버로 알아서 할당해줍니다. 삽질했네요 ㅎㅎ

AWS EC2에 CodeDeploy Agent를 설치 시 /usr/bin/env: ruby: No such file or directory 가 뜨는 이슈

  1. 설치를 진행하다보면 sudo ./install auto 에서
  2. /usr/bin/env: ruby: No such file or directory 가 뜹니다.
  3. 루비로 이뤄져 있는데 루비가 설치되지 않아서 생긴 문제입니다.
  4. sudo yum install ruby 로 루비를 설치하고 다시 실행하면 됩니다.

출처 : https://sarc.io/index.php/aws/1875-error-aws-codedeploy-agent

Spring Boot를 이용하므로 책과 쉘 스크립트가 다른 이슈

# install_dependencies.sh

echo '============================'
echo 'Running install_dependencies'
echo '============================'

source /home/ec2-user/.bash_profile

cd /home/ec2-user/deploy
./gradlew clean build

# restart_server.sh

echo '======================'
echo 'Running restart_server'
echo '======================'

# 여기서 조심해야할 점! 서버가 있다면 종료시켜줘야 합니다!

nohup java -jar /home/ec2-user/deploy/build/libs/aws-exercise-0.0.1-SNAPSHOT.jar /dev/null 2> /dev/null < /dev/null &

sudo service nginx start

# set_owner.sh

echo '================='
echo 'Running set_owner'
echo '================='

chown -R ec2-user /home/ec2-user/deploy

# validate_server.sh

echo '======================='
echo 'Running validate_server'
echo '======================='

result=$(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8080/health)

echo $result

if [[ "$result" =~ "200" ]]; then
  exit 0
else
  exit 1
fi

CodeDeploy에서 &만 붙여서 배포 실행 시 에러가 뜨는 이슈

  1. 스프링 부트의 출력을 그대로 하니까 Script at specified location: scripts/restart_server.sh failed to close STDOUT 에러가 떴습니다.
  2. 공식문서를 보면 &만 추가해서는 백그라운드에서 실행시킬 수 없다고 합니다.
    1. stdout, stderr 및 stdin을 /dev/null로 리디렉션해야한다고 합니다.
  3. 저의 경우, 아래 방식처럼 하니까 됐습니다.
  4. 참고로 배포가 안됐다가 다시 재배포를 하니까 되는 경우도 있었습니다.
nohup java -jar /home/ec2-user/deploy/build/libs/aws-exercise-0.0.1-SNAPSHOT.jar /dev/null 2> /dev/null < /dev/null &

출처 : https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/troubleshooting-deployments.html