[AWS] Elastic Beanstalk으로 Node.js 서버 구성 자동화하기

반응형

이번 글에서는 AWS의 서버 구성 자동화 기능을 사용해보겠습니다.

0. 서버 구성 자동화란?

AWS에서 제공하는 템플릿을 사용해 AWS 리소스 생성과 배포를 자동화하는 기능입니다.

자동화에 대한 자세한 내용은 https://velog.io/@minholee_93/series/Jenkins 에서 다뤄보겠습니다.

AWS에는 서버 구성을 자동화해주는 여러 기능들이있습니다. 대표적으로 CloudFormation, Elastic Beanstalk, OpsWorks 등이 있으며 이번 글에서는 ElasticBeanstalk을 다뤄보겠습니다.

예를 한번 들어보겠습니다.

우리는 앞서 EC2, EBS, S3, RDS 등의 인스턴스들을 다뤘습니다. 기본적으로 서버를 구성하기 위해서는 이러한 인스턴스들을 조합해 하나의 서비스를 구성해야합니다. 이러한 인스턴스가 한개라면 문제가 없으나, 만약 대규모 인스턴스들을 사용한다면? 소스코드가 바뀔때마다 각 인스턴스들을 수정해야한다면? 여간 귀찮은 일이아닙니다.

서버 구성 자동화는 시스템 구조(아키텍쳐)를 템플릿으로 제공해 복잡하고 반복적인 작업을 간단히 처리할 수 있도록 도와줍니다.

CloudFormation은 사용자가 직접 템플릿을 작성하며, Elastic Beanstalk은 AWS에서 제공하는 템플릿을 사용합니다.

자세한 내용은 아래의 책을 참고하시길 바랍니다.

 

아마존 웹 서비스를 다루는 기술:실무에서 알아야 할 기술은 따로 있다!

COUPANG

www.coupang.com

1. Elastic Beanstalk이란?

Node.js, PHP, Python, Ruby, Java, .NET 애플리케이션을 실행하고 배포할 수 있는 플랫폼을 제공하는 서비스입니다.

Elastic Beanstalk은 알아서 EC2 인스턴스 유형을 변경하고, Auto Scaling으로 EC2 인스턴스를 늘리고, ELB로 부하를 분산하며 애플리케이션 배포까지 자동으로 해줍니다.

Elastic Beanstalk에서 애플리케이션을 배포할 때는 AWS CLI, AWS API, 언어별 AWS SDK, Eclipse 및 Visual Studio용 AWS 툴킷을 사용하거나 AWS 콘솔에서 직접 업로드 할 수 있습니다. 또한, Git과 Docker도 지원합니다.

또한, Swap Environmnet URLs 기능을 사용하면 애플리케이션의 무중단 배포가 가능합니다.

2. Elastic Beanstalk 환경 생성하기

Elastic Beanstalk에 사용자가 애플리케이션을 업로드하는 공간을 애플리케이션(Application)이라고 합니다. 애플리케이션을 실행하는 플랫폼은 환경(Environment)이라고 합니다.

Node.js 애플리케이션과 환경을 생성해보겠습니다.

Elastic Beanstalk 메인 화면의 우측 상단 Create New Application 버튼을 클릭합니다.

image.png

어플리케이션 이름을 입력후 생성 버튼을 클릭합니다.

image.png

이전에 생성해둔 환경이 없으므로 Create one now를 클릭해 새로운 환경을 생성합니다.

image.png

웹 서버 전용 환경을 선택 후 Select 버튼을 클릭합니다.

image.png

사용할 환경의 이름과 도메인 이름을 입력합니다. 도메인 이름은 유일해야하므로 Check availability 버튼을 클릭해 유일성을 확인합니다.

image.png

Platform에서 Preconfigured platform의 Node.js 환경을 선택합니다. Application code는 AWS에서 제공해주는 Sample application을 사용하겠습니다. 생성 버튼을 클릭합니다.

image.png

아래와 같이 환경이 생성되고 있습니다.

image.png

약 5분정도의 시간이 지나면 아래와 같이 환경이 정상적으로 생성됩니다. 이제 상단의 URL을 클릭합니다. 해당 URL은 Elastic Beanstalk가 생성한 Node.js 어플리케이션입니다.

image.png

위에서 Application Code를 Sample application을 선택했기 때문에, AWS에서 제공하는 기본 어플리케이션이 실행 중입니다.

image.png

위와 같이 Elastic Beanstalk으로 생성한 어플리케이션은 AWS의 EC2위에서 돌아가고 있습니다. EC2 화면의 Instances 탭으로 들어가면 생성된 EC2 인스턴스를 확인할 수 있습니다. 이 EC2 인스턴스는 삭제하더라도 Elastic Beanstalk가 자동으로 재 생성합니다.

image.png

3. Elastic Beanstalk 애플리케이션 배포하기

이번에는 위에서 생성한 Node.js 환경에 직접 작성한 애플리케이션을 배포해보겠습니다.

먼저, 아래와 같이 간단한 웹 페이지를 작성합니다.

app.js

var express = require('express'),
    http = require('http'),
    app = express();

app.get(['/', '/index.html'], function (req, res) {
    res.send('Hello Elastic Beanstalk');
});

http.createServer(app).listen(process.env.PORT || 3000);

Node.js npm 패키지 사용을 위해 다음과 같이 package.json 파일을 작성합니다.

{
    "name": "hello",
    "description": "Hello Elastic Beanstalk",
    "version": "0.0.1",
    "dependencies": {
        "express": "4.4.x"
    }
}

다음으로 app.js 파일과 package.json 파일을 zip으로 압축합니다. 압축한 파일은 Elastic Beanstalk 환경 Dashboard에서 Upload and Deploy 버튼을 클릭해 업로드합니다.

image.png

파일을 선택해 업로드하고 Deploy 버튼을 클릭합니다.

image.png

업데이트가 시작되었습니다.

image.png

자 이제 업데이트가 완료되었습니다. 화면 상단의 URL을 클릭합니다.

image.png

아래와 같이 app.js 파일이 정상적으로 배포된 것을 확인 할 수 있습니다.

image.png

4. Elastic Beanstalk 환경 삭제하기

Elastic Beanstalk 으로 생성한 환경, 애플리케이션, 애플리케이션 버전은 따로 삭제해야합니다.

한번 순서대로 삭제해보겠습니다. 반드시 아래의 순서를 따라서 삭제해야합니다.

먼저, 삭제하고자 하는 환경의 메인에서 우측 상단의 Action 버튼의 Terminate Environment를 클릭합니다.

image.png

삭제하고자하는 환경의 이름을 입력후 Terminate 버튼을 클릭합니다.

image.png

시간이 지나고나면 아래와 같이 환경이 정상적으로 Terminate 되었습니다.

image.png

다음으로 애플리케이션 버전을 삭제해야합니다. 애플리케이션을 삭제하기전에 애플리케이션 버전을 삭제하지 않으면, 애플리케이션이 저장된 S3 버킷이 계속 남아 있게 됩니다. 우측 상단의 Action 을 눌러 View Application Versions를 클릭합니다.

image.png

여기서 조회된 어플리케이션 버전들을 모두 선택해 Delete 버튼을 눌러 제거합니다.

image.png

제거시에는 Delete versions from Amazon S3을 체크해 S3에 저장되어있는 어플리케이션 버전들도 모두 삭제합니다.

image.png

모든 어플리케이션 버전들이 아래와 같이 삭제되었습니다.

image.png

이제 마지막으로 어플리케이션을 삭제합니다. Elastic BeanstalkAll Applications 화면 우측 상단의 Actions 버튼의 Delete application 을 클릭합니다.

image.png

삭제할 어플리케이션의 이름을 입력한뒤 Delete 버튼을 클릭합니다.

image.png

5. 결론

간편하게 서비스의 환경을 구성하고 그 위에서 애플리케이션을 실행 및 배포하고 싶다면?
-> Elastic Beanstalk를 사용하자.


파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음


반응형

댓글

Designed by JB FACTORY