cloud-init를 이용한 자동화 구성

OCI Compute 서비스로 Compute 인스턴스(VM 혹은 Baremetal)를 만들 때, cloud-init를 사용하면 Compute 인스턴스 배포하고 수작업으로 진행하는 여러가지 작업(소프트웨어 설치/패치, 보안 설정) 작업을 자동화할 수 있습니다. Compute 인스턴스를 프로비저닝할 때 cloud-init를 적용하는 방법을 소개합니다.

HOL: cloud-init

이번 Hands-on Lab에서는 OCI Console을 이용하여 OCI Linux VM 인스턴스를 생성하는 과정에서 cloud-init를 적용하는 방법을 소개합니다. cloud-init 사용하면 Compute 인스턴스를 배포한 다음에 SSH로 접속하여 진행하는 작업을 자동화할 수 있습니다. 이번 Hands-on Lab은 다음과 같은 순서로 진행됩니다.

이번 Hands-on Lab을 통해서 다음과 같은 VM 인스턴스를 만들 수 있습니다.

이번 Hands-on Lab은 다음과 같은 목차로 구성됩니다.

cloud-init 개요

cloud-init는 가상 머신 초기화 설정을 자동화하는 도구입니다. cloud-init를 이용하면 호스트 이름, 네트워크 인터페이스, 그리고 인증키를 설정, 소프트웨어 설치 및 패치와 같은 작업을 가상 머신 생성 과정에 포함 시킬 수 있습니다.

OCI Compute가 제공하는 Image에는 cloud-init가 적용돼 있습니다. 따라서 cloud-init에 쉘 스크립트를 설정하여 인스턴스를 커스터마이징할 수 있습니다.

선행 Hand-on Lab

이번 Hands-on Lab을 진행하기 전에 다음 Hand-on Lab이 선행되어야 합니다.

Hands-on Lab 실습 환경

Hands-on Lab은 OCI 일반 사용자인 demo.admin 사용자로 OCI IAM 로그인하여 진행합니다. 이번 Hands-on Lab에서 사용할 OCI 사용자와 컴파트먼트는 다음과 같습니다.

OCI User 작업 Compartment
demo.admin root/sandbox/hol-prod

사전 준비

OCI Compute 인스턴스를 만들기 위해서는 다음과 같은 준비 작업이 필요합니다.

사용 가능한 자원 확인

OCI Compute 인스턴스를 어떤 자원(OCPU)로 만들지 결정해야 합니다. 가용한 자원을 확인하는 기능은 Limits, Quotas and Usage 페이지에서 확인할 수 있습니다. 추가 권한 설정을 하지 않은 경우에, OCI 관리자 ID만이 이 페이지에 접근할 수 있습니다. 가용한 자원을 확인하는 작업은 Oracle Cloud 계정의 관리자 ID(taewanme@gmail.com)으로 로그인하여 진행합니다.

(OCI 콘솔 왼쪽 위 햄버그 버튼) Governance Limits, Quotas and Usage

Limits, Quotas and Usage 페이지에서 Scope 항목에서 AD를 지정하면, 현재 사용 가능한 자원 규모가 출력됩니다. 아래 이미지는 Oracle Cloud Trial 계정에 기본 할당된 자원 규모입니다. 아래 결과를 확인하고 이번 Hands-on Lab에서는 VM.Standard.E2.2를 사용하기로 결정합니다.

이제 OCI 관리자 ID를 로그아웃 하고, OCI 일반 사용자인 demo.admin 사용자로 OCI IAM 로그인하여 다음 과정을 진행합니다.

OCI Compute 인스턴스 생성

OCI Console에 demo.admin ID로 OCI IAM 옵션으로 로그인합니다. 그리고 Compute 인스턴스를 생성하기 위해서 다음과 같은 메뉴 패스로 이동합니다.

(OCI 콘솔 왼쪽 위 햄버그 버튼) Compute Instances


Compute 인스턴스 관리 페이지에서 Compartment를 root/sandbox로 설정하고 Create Instance 버튼을 클릭합니다.

Create Instance 버튼을 클릭하면 Compute 인스턴스 생성 폼이 출력됩니다. 다음과 같은 작업을 진행합니다.

항목 설정값 설명
Name demo_linux_vm_cloud_init 인스턴스 이름
Image or operating system Oracle Linux 7.7 - Change Image 버튼을 클릭하고 선택
-오라클 리눅스 7.X는 CentOs7.x/RedHat7.x와 완전한 호환성 제공

두 항목을 입력하고, Compute 인스턴스 생성 폼에서 Show Shape, Network and Storage Options 링크를 클릭합니다.


AD를 다음과 같이 선택합니다.

설정 항목 설정값 비고
Availability Domain AD 1

그리고 Change Shape 버튼을 클릭합니다.

Shape을 선택하는 화면이 출력됩니다. Shape 선택에 다음과 같이 설정하고 Select Shape 버튼을 클릭합니다.


Shape을 선택하면 VM.Standard.E2.2 (Virutal Machine)이 출력됩니다.


다음과 같이 Networking 항목을 설정합니다.

설정 항목 설정값 설명
Virtual Cloud Network Compartment hol-prod 선택
Virtual Cloud Network demo-vcn 선택
Subnet Compartment hol-prod 선택
Subnet Public Subnet-demo-vcn(Regional) 선택
Assign a public address 체크


Boot VolumeAdd SSh Keys 항목은 별도 설정 없이 넘어갑니다. 이번 Hands-on Lab에서는 VM에 ssh 접근을 하지 않은 것 입니다. 따라서 ssh 공개 키를 등록할 필요가 없습니다.


Show Advanced Options을 클릭하고 다음 cloud-init 스크립트를 등록합니다. 그리고 Create 버튼을 클릭합니다.

#!/bin/sh
sudo yum install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
sudo firewall-offline-cmd --zone=public --add-service=http
sudo systemctl enable firewalld 
sudo systemctl restart firewalld


Compute 인스턴스 생성 폼 입력을 마치고 Create 버튼을 클릭하면, demo-linux-vm-cloud-init 인스턴스의 상세 페이지로 이동합니다. 인스턴스 생성 중에 아이콘은 주황색이고 인스턴스 프로비저닝이 완료되면 아이콘은 초록색으로 변경됩니다.

demo-linux-vm-cloud-init 인스턴스의 상세 페이지에서 공개 IP가 140.238.18.120으로 설정됨을 확인할 수 있습니다.

공개 IP 브라우저 접근

demo-linux-vm Compute 인스턴스의 공개 IP인 140.238.18.120에 브라우저로 접근합니다. 브라우저로 접근하면 다음과 같은 화면이 출력됩니다.

Hands-on Lab 요약

demo-linux-vm-cloud-init 인스턴스가 만들어질 때, cloud-init에 다음과 같은 스크립트를 등록했습니다.

#!/bin/sh
sudo yum install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
sudo firewall-offline-cmd --zone=public --add-service=http
sudo systemctl enable firewalld 
sudo systemctl restart firewalld

demo-linux-vm-cloud-init 인스턴스가 만들어지고 프로비저닝을 완료하기 전에 위 스크립트가 실행되면서 다음과 같은 작업이 진행됩니다.

cloud-init을 통해서 Compute 인스턴스 생성 후, 후속 조치를 자동화 할 수 있습니다.

참고문서

  • 문서 생성: 2020-04-02 12:11 / 최종 문서 수정: 2020-04-02 12:11
  • 김태완 avatar
  • 작성자: 김태완
  • 사랑하는 민수와 데이터 관리, 데이터 분석 & 클라우드에 집중하고 있습니다.
  • E-mail: taewan.me@gmail.com
  • Disclaimer
    이 저작물은 Oracle과 관계없이 개인으로서 개인의 시간을 할애하여 작성된 글 입니다. 본 글의 내용, 입장, 예측은 Oracle을 공식적으로 절대 대변하지 않습니다.