JUINTINATION

AWS 엘라스틱빈스톡 생성하기 본문

Amazon Web Services

AWS 엘라스틱빈스톡 생성하기

DEOKJAE KWON 2024. 7. 12. 00:59
반응형

엘라스틱빈스톡

AWS Elastic Beanstalk은 Java, .NET, PHP, Node.js, Python, Ruby, Go 및 Docker를 사용하여 개발된 웹 애플리케이션 및 서비스를 Apache, NGinx, Passenger 및 IIS와 같은 친숙한 서버에서 손쉽게 배포하고 확장할 수 있는 서비스이다.

코드를 업로드하기만 하면 Elastic Beanstalk은 지속적인 완전 관리형 패치 및 보안 업데이트를 통해 용량 프로비저닝, 로드 밸런싱, 자동 조정 부터 웹 애플리케이션 상태 모니터링에 이르는 배포 작업을 자동으로 처리한다.

엘라스틱빈스톡을 사용하면 OS 설치나 JDK 설치 과정이 필요하지 않다. EC2가 빈 깡통이라고 한다면 엘라스틱빈스톡은 이미 필요한 소프트웨어들이 설치되어 있고, 많은 설정들이 되어 있다.

우선 엘라스틱빈스톡 테스트를 해보도록 하겠다.

엘라스틱빈스톡 테스트

아무튼 먼저 위와 같이 생성되어 있는 EC2는 종료해야 한다.

 

먼저 위와 같이 Elastic Beanstalk을 검색한다.

 

위와 같은 화면이 뜬다면 애플리케이션 생성 버튼을 클릭한다.

 

환경 티어는 웹 서버 환경을 선택했고, 애플리케이션 이름은 aws-v3로 설정했다. 환경 정보의 환경 이름은 자동으로 생성되었으며 나머지는 건들지 않았다.

 

플랫폼 유형은 관리형 플랫폼을 선택하였고, 플랫폼은 Java, 플랫폼 브랜치는 Corretto 17 running on 64bit Amazon Linux 2를 선택했다. 플랫폼 버전은 책과 좀 다르지만 Recommended인 버전을 선택했다. 사실 그 버전밖에 없었다.

나머지 설정은 위와 같이 따로 건들지 않고 다음 버튼을 눌렀다.

 

책에서는 원래 이러면 바로 환경이 만들어지면서 방금 만든 환경이 뜨는데 테스트 과정에서 오류가 발생했다.. 뭐가 문제인지 전혀 모르겠어서 메타코딩 유튜브를 참고했다. 다행히도 수정된 버전으로 설명해주셨다.

 

먼저 위와 같이 IAM을 검색한다.

 

이후 역할 탭에 들어가 위의 화면에서 역할 생성 버튼을 누른다.

 

신뢰할 수 있는 엔티티 유형으로 AWS 서비스를, 사용 사례로 EC2를 선택하고 다음 버튼을 누른다.

 

그리고 권한 정책에서 위와 같이 AWSElasticBeanstalk을 검색하고 AWSElasticBeanstalkWebTier, AWSElasticBeanstalkWorkerTier, AWSElasticBeanstalkMulticontainerDocker 이렇게 3개를 체크하고 넘어간다.
엘라스틱빈스톡 환경에서 실행되는 아마존 EC2 인스턴스들이 있는데, 그 인스턴스들이 S3 버킷이나 파일 저장소나 다른 곳에 접근할 수 있는 권한 3개라고 한다.

 

이후 역할 이름을 aws-elasticbeanstalk-ec2-role로 설정하고 넘어간다.

 

시간이 좀 지나면 위와 같이 방금 만든 역할이 새롭게 추가된 것을 볼 수 있다.

 

다시 Elastic Beanstalk의 서비스 액세스 구성으로 넘어가 새 서비스 역할 생성 및 사용을 선택하고 EC2 키 페어를 처음 만들었던 EC2를 만들 때 생성한 키를 선택하고 다음 버튼을 누른다.

 

이후에는 검토 단계로 건너뛰기 버튼을 누르고

 

검토 화면에서는 바로 제출 버튼을 누른다.

 

그리고 Elastic Beanstalk의 환경 탭을 보면 방금 만든 환경이 잘 뜨는 것을 확인할 수 있다. 그리고 왼쪽 메뉴에 있는 환경으로 이동을 클릭해보자.

 

그러면 위와 같이 샘플 코드가 실행된 화면을 볼 수 있다.

 

그리고 다시 EC2의 인스턴스 탭으로 들어가보면 자동으로 새로운 EC2가 생성된 것을 볼 수 있다. 처음에 할 때 오류도 발생하고 해서 자고 일어났더니 위와 같은 화면을 볼 수 있었는데, 이와 같이 시간이 생각보다 많이 필요할 수도 있다.

맨 처음에 언급하긴 했지만 프리티어는 인스턴스가 1개보다 많아지면 과금이 발생하기 때문에 전에 사용하던 인스턴스는 삭제하는 것이 좋다.

 

해당 인스턴스의 보안 그룹의 인바운드 규칙을 수정해야 하는데, 위와 같이 5000번 포트를 열어주는 규칙을 추가해야 한다. 그 이유는 엘라스틱빈스톡 내부 구성에 있다.

엘라스틱빈스톡 내부 구성

  • 환경을 생성하면 EC2 서버가 하나 만들어진 후 이 서버 내부에 JDK가 설치되고, NGinX라는 서버도 같이 만들어진다.
    • NGinX와 같은 서버를 대리 서버, 즉 프록시 서버라고 한다
    • EC2에서 2개의 서버가 돌고 있는 것이다.
  • 프록시 서버는 80 포트로 돌고, 샘플 코드가 올라가있는 서버는 5000번 포트로 돌고 있다.
    • 포트 번호는 내부적으로 지정되어 있고, 약속되어 있다.
  • EC2 서버의 앞단에는 로드밸런서가 생성된다.
    • 로드밸런서는 서버에 가해지는 부하를 분산해 주는 장치 또는 기술을 말한다.
    • 한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리해 각각의 서버가 최적의 퍼포먼스를 보일 수 있도록 한다.
    • 로드밸런서는 80 포트로 클라이언트의 요청을 대기한다.
      • 실제로 엘라스틱빈스톡을 생성하면 EC2가 생성되지만, 나는 단일 인스턴스로 생성했기 때문에 로드밸런서는 생성되지 않는다.
  • 외부에서 클라이언트가 EC2 안에 설치되어 있는 NGinX 서버의 80 포트로 접근하게 되면 거부를 당한다.
    • EC2 서버는 외부의 모든 요청을 거부하고 내부의 로드밸런서의 요청만 허용하고 있기 때문이다.
    • 내부의 로드밸런서 요청중에서도 80 포트만 허용하고 있다.
    • EC2 서버의 보안설정에서 80 포트의 인바운드 규칙을 살펴보면 같은 보안그룹만 허용하고 있다는 것을 확인할 수 있다.

결론

책에 나온 내용이랑 좀 많이 달라서 당황했던 기억이 있다. 그건 그렇고 엘라스틱빈스톡을 생성하면 우연히 발견한 것인데 탄력적 ip가 자동으로 등록된다. 그런데 이게 지금 과금 이슈가 있어서 일단은 중지하고 좀 더 알아본 후에 다시 진행할 것 같다. 만약 과금 발생이 불가피하다면.. 다른 방법을 찾거나 눈 딱 감고 돈을 내는 수밖에.. 약간 현타오네.. 학생용 무료 버전같은건 없는 것일까..?

728x90
Comments