패커(Packer)

개요

  • 하나의 설정 소스로부터 여러 플랫폼을 지원하는 머신/컨테이너 이미지를 만드는 도구이다.

구성

  • 이미지 : 머신의 특정한 상태를 그대로 저장하고, 나중에 재사용 가능하도록 준비해둔것

    • 한계
      • 사용중인 가상머신을 그대로 저장하기 때문에 구성하는 과정을 알 수 없다.
      • 현재상태를 구현 하기 힘들다.
      • 최신상태를 저장한 이미지를 만들어 관리해야하기 때문에 비용이 비효율 적이다.
    • 대안
      • 비이스 이미지를 기반으로 프로비저너(Provisioner)를 통해 가성머신에 패키지 설치와 환경설정 작업 진행
      • 프로비저닝(Provisioning) 이 끝난 상태를 빌더(Builder)를 통해서 특정 플랫폼에서 사용 가능한 이미지로 저장
      • 최종 결과물을 저장하는 방식이 아닌, 이미지 생성과정에 대한 모든 정보를 코드로 관리한다.
      • 다양한 플랫폼에서 유사한 이미지를 만들어 사용하는것도 가능하다.
  • 빌더(Builder) : 이미지를 생성하는 작업

    • 지원 서비스 : AWS IAM, Google Compute Engine, Open Stack, Docker ..
  • 프로비저너 (Provisioner) : 이미지를 생성 할때 사용하는 빌드 도구

    • 역할
      • 이미지를 원하는 상태로 만들 수 있다.
    • 지원 서비스 : 원격 셀(Remote Shell), 로컬 셀(Local Shell), 파일 업로드(File Upload), 파워 셀(Power Shell), 윈도우 셀(Window Shell), 엔서블(Ansibie), 셰프(Chef), 퍼핏(Puppet)

파일 기본 포멧

{
    "builders": [{
        // ...
    }],
    "provisioners": [{
        // ...
    }]
}

특징

  • 기본 포멧 에서 볼 수 있듯이 빌더(Builder), 프로비저너(Provisioner) 값을 다수로 설정 할 수 있습니다.

설치

WINDOWS 10

  • 다운로드
    https://releases.hashicorp.com/packer/
  • 압축을 풀어 아래 폴더를 만들고 packer.exe를 위치시킨다.
    C:\packer
  • 환경변수에서 [시스템 변수]-[Path] 에 C:\packer 추가시킨다.

jupyterlab 설치

OS : ubuntu 18

설치

  • apt update
    sudo apt update

 

  • jupyterlab pip 설치
    sudo apt install -y python3-pip jupyter-core

 

  • jupyterlab 설치
    pip3 install jupyterlab

 

  • user profile 재 적용
    source ~/.profile

 

  • config 파일 생성
    jupyter notebook --generate-config
    출력 : Writing default config to: /home/ubuntu/.jupyter/jupyter_notebook_config.py

 

  • jupyter_notebook_config.py 파일 최하단에 아래 내용 추가
    vi /home/ubuntu/.jupyter/jupyter_notebook_config.py

      c = get_config()
      c.NotebookApp.ip = '[내부 IP]'
      예시:
          c = get_config()
          c.NotebookApp.ip = '172.31.24.168'

    ip 확인 방법

      ubuntu@ip-172-31-24-168:~$ ifconfig
      eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
              inet 172.31.24.168  netmask 255.255.240.0  broadcast 172.31.31.255
              inet6 fe80::8e2:ff:fe7e:171c  prefixlen 64  scopeid 0x20<link>
              ether 0a:e2:00:7e:17:1c  txqueuelen 1000  (Ethernet)
              RX packets 99783  bytes 141887383 (141.8 MB)
              RX errors 0  dropped 0  overruns 0  frame 0
              TX packets 13314  bytes 1613233 (1.6 MB)
              TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
              inet 127.0.0.1  netmask 255.0.0.0
              inet6 ::1  prefixlen 128  scopeid 0x10<host>
              loop  txqueuelen 1000  (Local Loopback)
              RX packets 378  bytes 36028 (36.0 KB)
              RX errors 0  dropped 0  overruns 0  frame 0
              TX packets 378  bytes 36028 (36.0 KB)
              TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

실행

  • jupyter lab 실행
    jupyter lab --allow-root

      ubuntu@ip-172-31-24-168:~$ jupyter lab --allow-root
      [I 11:32:14.547 LabApp] Writing notebook server cookie secret to /home/ubuntu/.local/share/jupyter/runtime/notebook_cookie_secret
      [W 11:32:14.843 LabApp] JupyterLab server extension not enabled, manually loading...
      [I 11:32:14.847 LabApp] JupyterLab extension loaded from /home/ubuntu/.local/lib/python3.6/site-packages/jupyterlab
      [I 11:32:14.847 LabApp] JupyterLab application directory is /home/ubuntu/.local/share/jupyter/lab
      [I 11:32:14.849 LabApp] Serving notebooks from local directory: /home/ubuntu
      [I 11:32:14.849 LabApp] The Jupyter Notebook is running at:
      [I 11:32:14.850 LabApp] http://localhost:8888/?token=7b8f33048569544c7aa237ee485698eb21d7c7e7182b9c12
      [I 11:32:14.850 LabApp]  or http://127.0.0.1:8888/?token=7b8f33048569544c7aa237ee485698eb21d7c7e7182b9c12
      [I 11:32:14.850 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
      [W 11:32:14.854 LabApp] No web browser found: could not locate runnable browser.
      [C 11:32:14.854 LabApp]
          To access the notebook, open this file in a browser:
              file:///home/ubuntu/.local/share/jupyter/runtime/nbserver-7550-open.html
          Or copy and paste one of these URLs:
              http://localhost:8888/?token=7b8f33048569544c7aa237ee485698eb21d7c7e7182b9c12
           or http://127.0.0.1:8888/?token=7b8f33048569544c7aa237ee485698eb21d7c7e7182b9c12
  • 위 출력 내용에 IP를 외부 IP를 입력한다.
    http://[외부 IP]:8888/?token=7b8f33048569544c7aa237ee485698eb21d7c7e7182b9c12

 

  • 빙화벽 AWS 라면 보안그룹에 8888 포트를 연다.

 

  • 백그라운드 실행 및 소유권 포기 (ssh 접속을 끊어도 서비스를 유지하는 방법)
    단축 키 입력 : Ctrl +Z
    cmd 입력 : bg
    cmd 입력 : disown -h

1. 테라폼이란?

terraform 은 Hashicorp에서 오픈소스로 제공하는 ICA(Infrastructure as Code)이다.
서비스가 되는 환경을 구성하는 프로비저닝 도구로 분류되며, Cloud 환경에 제약없이 사용이 가능하다.
terraform은 GUI(Graphical user interface)나 웹 콘솔을 이용해 관리하던 것을 Code로 관리할 수 있게해준다.
이로써 구성을 버젼 관리가 쉬워지고 수작업으로 인한 실수가 적어진다.

특징

  • Infrastructure ad Code : 코드 베이스
  • Execution Plans : 사전 테스트
  • Resource Graph : 리소스 의존관계 처리
  • Change Automation : 변경사항 자동화 가능하다.

2. Cloud 별 ICA

종류

  • AWS : AWS Cloud Formation
  • GCP : Google Cloud Deployment Manager

장점

  • Cloud 별 ICA
    Cloud의 신규 서비스 대응이 빠르다.
  • terraform
    Cloud에 종속되지 않는다.

단점

  • Cloud 별 ICA
    Cloud에 종속 된다.
  • terraform
    Cloud의 신규 서비스 대응이 상대적으로 느리다.

3. 기본 용어 정리

프로비저닝 (Provisioning)

  • 서비스를 실행 하기위한 준비단계
  • 네트워크, 컴퓨팅 자원을 준비 작업 & 준비된 컴퓨팅 자원에 사이트 패키지나 어플리케이션 의존성을 준비하는 단계
  • terraform은 전자에 치우쳐 있다.

프로바이더 (Provider)

  • 외부 서비스를 연결해주는 기능을 하는 모듈
  • AWS, GCP 등등이 프로바이더(Provider)로 있다.

리소스 (Resource)

  • 프로바이더가 제공하는 제품의 최소 단위.
    ex> EC2 Instance, Public IP 등등

HCL (Hashicorp Configration Language)

  • Terraform 에서 사용하는 언어
  • 확장자는 .tf를 사용

계획 (Plan)

  • .tf 파일의 내용이 실제 적용이 가능한지 확인 작업
  • 리소스에 어떤 영향(create, update, delete 등)을 미칠지 보여준다.

적용 (Apply)

  • 계획 (Plan)을 실제 서비스에서 수행하는 단계

4. 설치

Ubuntu

WINDOWS 10

  • 다운로드
    https://www.terraform.io/downloads.html
  • 압축을 풀어 아래 폴더를 만들고 terraform.exe를 위치시킨다.
    C:\terraform
  • 환경변수에서 [시스템 변수]-[Path] 에 C:\terraform을 추가시킨다.

+ Recent posts