grep

Engineering

Image Builder 서비스 소개

NHN

2022년 1월 20일

원문에서 보기 ↗

클라우드 환경에서 가상 머신 인스턴스를 만들기 위해서는 기본 디스크로 사용할 이미지가 필요합니다. OS와 기본 보안 설정이 포함된 기본 OS 이미지를 사용할 수도 있고, 기본 OS 이미지에 애플리케이션과 필수 패키지를 미리 설치한 이미지를 사용하기도 합니다. NHN Cloud는 기본 OS 이미지와 여러 가지 애플리케이션이 사전 설치된 이미지를 제공하고 있습니다. 그러나 사용자의 서비스를 위해서는 제공되는 이미지만으로는 부족할 수 있습니다. 예를 들어 웹 애플리케이션과 DB 서버를 분리하지 않고 하나의 서버에서 구동하고 싶다면 Apache Tomcat과 MySQL이 모두 설치된 이미지가 필요합니다. 필요한 애플리케이션을 직접 설치할 수도 있지만, NHN Cloud Image Builder 서비스를 이용하면 이러한 개인 이미지(Custom Image)를 간편하게 만들 수 있습니다.

이미지 생성 과정

먼저 가상 머신 인스턴스(이하 인스턴스)로부터 개인 이미지를 만드는 전통적인 방식을 살펴보겠습니다. 개인 이미지는 사용자 인스턴스의 블록 스토리지를 기반으로 만들 수 있습니다. NHN Cloud가 제공하고 있는 기본 이미지를 이용해 인스턴스를 만듭니다. 인스턴스가 만들어지면 인스턴스에 접속해 애플리케이션과 필요한 패키지를 설치합니다. 모든 설치가 끝나면 접속을 종료하고 인스턴스를 중지합니다. 이 후 이미지 생성 요청을 하면 개인 이미지가 만들어집니다.

image-builder-01.png

이처럼 인스턴스로부터 개인 이미지를 만들기 위해서는 여러 단계의 작업을 수행해야 합니다. 게다가 사용자가 직접 인스턴스에 접속해 애플리케이션과 패키지를 설치하는 과정이 수반됩니다. 사용자의 수작업이 완벽하게 진행될 수도 있지만, 실수의 가능성은 언제나 존재하기 때문에 깨끗한 골든 이미지를 만들려면 여러 번의 시행착오가 필요할 수도 있습니다.

하지만 이미지 빌더가 출동하면 어떨까요?

NHN Cloud Image Builder(이하 이미지 빌더)를 이용해 이미지를 만드는 과정은 다음과 같습니다. NHN Cloud가 제공하는 애플리케이션 설치 구성 요소를 선택하고 사용자 스크립트를 추가해 이미지 템플릿을 만듭니다. 이미지 템플릿을 선택해 베이스 이미지를 지정하고 빌드를 시작하면 더는 사용자의 작업이 필요하지 않습니다. 이후 모든 작업은 자동으로 진행됩니다. 원하는 애플리케이션과 패키지가 설치된 깨끗한 이미지를 손쉽게 만들 수 있습니다.

image-builder-02.png

이미지 빌더로 이미지 만들기

간단한 예시를 통해 이미지 빌더로 이미지를 만드는 방법을 알아봅시다. 이 예시에서는 Node.js 패키지와 Node.js로 만든 간단한 웹 서버가 포함된 이미지를 만들고, 만든 이미지로 인스턴스를 만들어 웹 서버를 실행해 보겠습니다.

이미지 빌더로 이미지를 만들기 위해서는 먼저 이미지 템플릿을 만들어야 합니다. 이미지 템플릿은 설치할 애플리케이션 설치 구성 요소와 이미지를 사용해 만들 인스턴스의 최소 블록 스토리지 용량, 사용자 스크립트로 구성되어 있습니다. 이미지 템플릿 이름을 입력하고 애플리케이션 설치 구성 요소 목록에서 Node.js를 선택합니다. 사용자 스크립트에는 다음과 같이 미리 만들어둔 웹 서버 코드를 다운로드하는 내용을 추가합니다.

#!/bin/bash -e 
mkdir -p /home/centos/myservice
cd /home/centos/myservice
wget https://example.com/foo/bar/myserver.js

image-template-creation.png

사용할 Node.js 웹 서버 코드는 다음과 같습니다. 적당한 위치에 업로드해놓고 사용자 스크립트의 다운로드 URL을 변경해 사용해주세요.

// myserver.js
var http = require('http');

var server = http.createServer(function(request,response){
    response.writeHead(200,{'Content-Type':'text/html'});
    response.end('Hello node.js!!');
});

server.listen(8080, function(){
    console.log('Server is running...');
});

이미지 템플릿을 만들었으니 이제 이미지를 빌드해 보겠습니다. 이미지 템플릿을 선택하고 이미지 빌드 버튼을 클릭하면 이미지 빌드 창이 나타납니다. 이미지 이름을 입력하고, 베이스 이미지로 사용할 OS 이미지인 CentOS 7.8을 선택한 다음 확인을 클릭합니다.

image-build.png

이제 잠시 기다리면 이미지가 만들어집니다. 만들어진 이미지는 NHN Cloud Image 서비스에서 개인 이미지로 관리할 수 있습니다.

private_image.png

이제 방금 만든 따끈따끈한 개인 이미지로 인스턴스를 만들고 설치한 웹 서버를 실행해 봅시다. 개인 이미지에 설치된 웹 서버는 8080 포트를 사용하고 있습니다. 인스턴스를 만들기 전에 미리 보안 그룹(Security Group)에서 8080 포트 수신 허용 규칙을 추가해주세요. 인스턴스를 만들 때 다음과 같이 예약 스크립트를 입력하면 웹 서버가 바로 실행됩니다.

#!/bin/bash
nohup /home/centos/apps/node-v16.13.0/bin/node /home/centos/myservice/myserver.js > /home/centos/myservice/myserver.log 2>&1 &

instance_creation.png

잠시 후 인스턴스가 만들어졌으면 플로팅 IP를 통해 웹 서버에 접속해 봅시다. Hello node.js!!라는 메시지가 반갑게 맞아줄 겁니다.

server.png

어때요? 참 쉽죠?

마치며

이미지 빌더 서비스를 이용해 필요한 이미지를 간편하게 만드는 방법을 알아보았습니다. 정리해보면, 이미지 빌더 서비스를 이용해 얻을 수 있는 이점은 다음과 같습니다.

1. 사용자의 수작업을 통해 진행되던 애플리케이션 설치 과정이 자동화되어 사용자의 실수로 인한 오류를 최소화할 수 있습니다. 
2. NHN Cloud가 제공하는 기본 OS 이미지와 검증된 애플리케이션 설치 구성 요소, 사용자 스크립트를 조합해 다양한 용도의 개인 이미지를 간편하게 만들 수 있습니다. 
3. 지속해서 관리되는 기본 OS 이미지와 애플리케이션 설치 구성 요소가 제공되기 때문에, 사용자는 보안 위협으로부터 안전한 이미지를 만들 수 있습니다.

이미지 빌더로 만든 개인 이미지와 Auto Scale, Deploy 서비스 등을 연계하면 더욱더 유연하게 클라우드 인프라를 관리할 수 있으리라 생각합니다.

NHN Cloud가 제공하는 애플리케이션 설치 구성 요소에 대해서는 이미지 빌더의 설치 구성 요소 가이드를 참고해주세요.