Browsing Tag

s3

NCP

[NCP] Object Storage CLI 사용 가이드 (CentOS7)

안녕하세요. ManVSCloud 김수현입니다.

오늘은 네이버 클라우드 플랫폼에서 Object Storage CLI를 사용하는 방법에 대해 포스팅해보겠습니다.


Installation

네이버 클라우드의 Object Storage는 API 친화적입니다.
제공되는 API는 Amazon S3와 호환이 되기때문에 S3를 사용하기 위해서 사용되는 다양한 3rd-party 도구를 사용할 수 있다는 장점이 있습니다.

먼저 오늘은 Object Storage를 CLI로 컨트롤하기 위해 awscli를 설치하고 사용하는 방법에 대해 간단히 알아보겠습니다.

awscli를 설치하기 위해서는 python3.7.x 이상의 버전이 필요합니다.

네이버 클라우드 플랫폼에서 제공하는 CentOS 7.8 이미지 기준으로 설치되어 있는 기본 Python 버전은 2.7.5으로 Python3를 따로 설치해주어야합니다.

하지만 python 3 설치 후 특정 OS 버전에서는 기존 python 2버전을 이용하던 소스들이 오류를 출력하는 문제가 있어 pyenv를 설치하여 OS에 영향이 가지 않도록 하고 가상 환경에서 python3 를 사용할 수 있도록 할 것입니다.

서론이 길었으니 바로 설치를 시작해봅시다.

yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel git -y
yum install gcc openssl-devel libffi-devel bzip2-devel wget xz-devel patch -y
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

Environment Setting & Running

/root/.bash_profile 에 다음과 같이 추가해주자!

vi /root/.bash_profile

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

추가 및 저장 후 source 명령어로 수정된 파일을 바로 적용시켜줍니다.

source /root/.bash_profile

// [참고] pyenv install --list 를 이용하여 설치 가능한 python 버전 리스트를 볼 수 있습니다.
// 해당 포스트에서는 3.7.13 버전을 설치하였습니다.

pyenv install 3.7.13

// 설치 후 pyenv versions 명령어를 이용하여 설치된 버전목록을 볼 수 있습니다.

// obj 이름의 가상 환경을 생성합니다.
pyenv virtualenv 3.7.13 obj

mkdir -p ~/bin/obj
cd ~/bin/obj

// obj 디렉토리에 obj 환경을 적용시킵니다.
pyenv local 3.7.13

// cd로 다른 경로와 obj 경로에서 python --version로 버전을 확인해보면 버전이 다른 것을 확인할 수 있습니다.

// 마지막으로 pip으로 awscli를 설치해줍시다.
pip install awscli==1.15.85
  • awscli 1.16.x 버전은 일부 기능을 미지원하므로 1.15.x 버전 사용을 권장합니다.
  • awscli 1.15.85 버전은 Python 3.8 이하 버전을 지원합니다.
[참고] pyenv local을 해도 python 버전이 변경되지 않을 경우 pyenv activate obj 와 같이 가상환경을 활성화 시켜준 뒤 source deactivate 명령어로 다시 비활성화 한 후 다시 pyenv local로 시도 해보길 바랍니다.

pyenv local은 지정한 디렉토리에서만 가상 환경이 적용되지만 pyenv activate 를 하게되면 어느 경로에서든 변경된 가상 환경의 버전이 적용된다는 차이점이 있습니다. 

Sub Account – Role

awscli를 이용하여 object storage를 컨트롤하기 위해서도 역시 권한이 필요합니다.

aws configure를 이용하여 Access key와 secret key를 등록해주는 방법도 있지만
저는 Sub Account-Roles을 이용하여 “NCP_OBJECT_STORAGE_MANAGER” 권한을 추가하고 Role 소유 리소스에 object storage를 컨트롤할 서버를 추가해주었습니다.

“NCP_OBJECT_STORAGE_MANAGER” 권한을 주지않고 세부적인 권한이 필요할 경우 Policies에서 사용자 정의 정책을 생성하여 필요한 권한만 부여한 뒤 사용할 수도 있습니다.


Cron

권한만 부여했다면 사용 방법은 간단합니다.

aws --endpoint-url=https://kr.object.ncloudstorage.com s3 ls

위와 같은 명령어로 버킷 목록을 조회할 수 있습니다.

여기서 주의할 점은 –endpoint-url 추가 시 민간존, 금융존, 공공존의 URL이 모두 다르다는 점입니다.
가끔 제가 스크립트를 만들어 배포하는 것도 동일합니다.
제가 기본적으로 제공해드리는 것은 민간존 기준으로 배포를 해드리고 있고 금융, 공공존이라면 URL 수정이 필요합니다.

자 간단한 사용 방법은 여기서 마치고 하나의 시나리오를 가정해봅시다.
물론 위와 같은 명령어로 Object Storage를 컨트롤 할 수 있는데 매번 이 명령어를 입력하기가 귀찮고 특정 시간마다 자동으로 실행됐으면 좋겠다 이거죠.

그럼 스크립트를 생성하고 cron에서 실행되도록 해봅시다.

우선 스크립트는 아래와 같이 만들었습니다.

vi obj-cp.sh

#!/bin/bash
export PYENV_VIRTUALENV_DISABLE_PROMPT=1
source ~/.bash_profile
pyenv activate obj

aws --endpoint-url=https://kr.object.ncloudstorage.com s3 cp /home/test/dir s3://manvscloud-logs/dir --recursive

위와 같이 스크립트를 생성하고 chmod 700 obj-cp.sh 명령어로 권한을 주었습니다.

스크립트는 간단합니다.

  1. export PYENV_VIRTUALENV_DISABLE_PROMPT=1
    : 크게 의미 없는 부분입니다. 그냥 프롬프트가 변경돼서 제거됐으니 export 해라 라는 문구가 뜨는 부분이 있어서 추가 해준 것입니다.
  2. source ~/.bash_profile
    : pyenv 설치 시 ~/.bash_profile 에 추가했던 export PATH=”$HOME/.pyenv/bin:$PATH”, eval “$(pyenv init -)”, eval “$(pyenv virtualenv-init -)” 를 적용하기 위함입니다.
  3. pyenv activate obj
    : python 3.7.13 을 활성화 해주기 위해 사용됐습니다.
    (질문) 스크립트 파일이 pyenv local로 지정해준 obj 디렉토리에 존재하면 되지 않나요?
    (답변) 네 안됩니다. pyenv local로 지정해준 obj 디렉토리에서 작업 시에만 python 3.7.13의 영향을 받기때문에 activate를 사용했습니다.
  4. aws –endpoint-url=https://kr.object.ncloudstorage.com s3 cp /home/test/dir s3://manvscloud-logs/dir –recursive
    : cp를 사용했습니다. 즉 /home/test/dir 디렉토리를 s3://manvscloud-logs/dir 로 복사하겠다는 의미인데 –recursive는 왜 추가했느냐? –recursive 옵션 사용 시 하위 파일들도 모두 복사가 되기 때문!

마지막으로 crontab에 스크립트를 추가 해줍니다.

vi /etc/crontab

## Object Storage로 복사 cron 일정은 원하는 조건에 맞춰서 사용
* 1 * * * root /root/bin/obj/obj-cp.sh

이제 매일 새벽 1시마다 스크립트가 실행되겠군요.


Personal Comments

오늘은 간단하지만 많이 사용되는 Object Storage CLI 사용 방법을 포스팅하였습니다.

Object Storage CLI 사용은 이미 네이버 클라우드 가이드에서도 잘 나와있는데 왜 이 포스팅을 하게 되었냐면 python 버전 때문입니다.

awscli를 설치하다 python 버전에 막히고 무작정 시도하다가 OS에 영향이 생겨 포기하는..

물론 다른 방법들을 생각해내고 해결하시는 분들도 많겠지만 그렇지 않았던 6~7년 전의 나와 같은 신입들이 조금이라도 편하게 찾아서 해결하고 성장하여 다양한 정보를 나눌 수 있는 동료가 되길 바라는 마음으로 작성하게 되었네요.
(ManVSCloud 블로그에 A to Z 포스팅과 TMI가 많은 이유…)

긴 글 읽어주셔서 감사합니다.