일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- gke 클러스터 액세스 설정
- dockerfile로 stackdriver-export이미지 생성
- github 사용법
- prometheus 서버 서비스등록
- kubectl 설치
- minikube 설치 및 실행
- Prometheus 서버 설정
- GCP VM
- github
- 방화벽 오픈
- prometheus 연동
- 정적 웹 사이트 호스팅
- 리소스삭제
- 서비스 계정 키 설정
- 리소스전체삭제
- git
- compose.yml로 stackdriver-export 서비스 설정
- vs code로 ssh 접속
- 포트 9255 설정
- GCP 모니터링
- aws-nuke
- ADC 사용자 인증
- Prometheus 서버 설치
- permission denied 에러 발생
- prometheus dockerfile
- stackdriver exporter 설치
- 스위치 4대 기능
- prometheus.yml 파일 설정
- 애플리케이션 기본 사용자 인증 정보
- stackdriver exporter
- Today
- Total
My __ 노트
[ NCP 서버이미지 ] 자동 생성 및 삭제 스크립트 ( python3 ) 본문
서비스 운영 안정성을 위해 서버 백업을 주기적으로 하는 것을 권장합니다. 서버 백업을 하면 장애 발생 시 특정 시점으로 바로 복구하여 서비스 운영 중단을 최소화할 수 있습니다.
NCP에는 디스크를 백업하는 Snapshot 서비스와 특정 시점 서버의 전체 내용과 구조를 백업하는 Server Image 서비스가 있습니다.
하지만 Server Image를 자동 생성 및 스케줄링에 따라 삭제되는 서비스는 없습니다. 하여 해당 글에서는 Python3을 이용하여 Server Image 생성 및 삭제와 더불어 알림 발생까지 받아 볼 수 있게 하는 방법에 대해 작성해 보겠습니다.
목차
▶ 서버이미지 생성
▶ 서버이미지 리스트 확인
▶ 서버이미지 삭제
▶ 서버이미지 생성
서버이미지 생성 : createMemberServerImageInstance 메소드 이용 - 관련 참고 문서 ⬅️
(예시)
ncloud vserver createMemberServerImageInstance --regionCode KR --serverInstanceNo ***4299 --memberServerImageName test-***
def create_image():
####서버이미지 생성할 타겟 인스턴스 넘버, 서버이미지네임
target = ["1234567:server01-auto-img","2345678:server02-auto-img"]
for i in target:
####서버이미지네임에 당일 날짜 추가
image_name = f'{i.split(":")[1]}-{datetime.datetime.now().strftime("%Y%m%d")}'
####createMemberServerImageInstance 메소드를 이용하여 서버이미지 생성
os.system(f'sh ncloud vserver createMemberServerImageInstance --regionCode FKR --serverInstanceNo {i.split(":")[0]} --memberServerImageName {image_name} > /dev/null 2>&1')
####생성한 서버이미지 알림 채널로 보내기
webhook(f"Creating image : {image_name}")
- 서버 이미지를 생성할 target 인스턴스 넘버와 서버네임을 사전에 정의합니다.
- 콘솔에서도 식별이 쉽게 서버 이미지네임에 생성 당일 날짜를 추가해 줬습니다.
- createMemberServerImageInstance 메소드를 이용하여 서버 이미지를 생성합니다.
- 현재 생성되고 있는 서버 이미지네임을 Webhook으로 보내 작업이 시작되었음을 알립니다.
▶ 서버이미지 리스트 확인
서버이미지 리스트 불러오기 : getMemberServerImageInstanceList 메소드 이용 - 관련 참고 문서 ⬅️
(예시)
ncloud vserver getMemberServerImageInstanceList --regionCode KR --memberServerImageInstanceNoList ***5847 --memberServerImageName test-*** --memberServerImageInstanceStatusCode CREAT --platformTypeCodeList LNX64
def get_image_list():
result = []
####getMemberServerImageInstanceList 메소드를 이용하여 서버이미지 리스트 불러오기
####출력결과를 해당 스크립트가 있는 폴더 안에 json 파일로 저장
os.system(f"sh ncloud vserver getMemberServerImageInstanceList --regionCode FKR --memberServerImageInstanceStatusCode CREAT > {os.getcwd()}/server-image-instance-list.json")
####json 파일을 읽기
with open(f'{os.getcwd()}/server-image-instance-list.json', "r") as f:
####json 파일을 파이썬 객체로 역 직렬화
result = json.load(f)
return result
- getMemberServerImageInstanceList 메소드를 이용하여 현재 서버 이미지 리스트들을 json 파일 형태로 저장합니다.
- json 파일을 읽어서 다시 파이썬 객체로 역 직렬화 합니다.
- 아래 해당 결과 값을 재정렬하여 dataframe을 생성합니다.
def rearrange_image_list():
result = []
####memberServerImageInstanceListe안에 내용을 payload 변수에 저장
payload = get_image_list()["getMemberServerImageInstanceListResponse"]["memberServerImageInstanceList"]
####현재날자를 timestamp로 변경
date_now = dateutil.parser.parse(str(datetime.datetime.now().date())).timestamp()
for i in payload:
####서버이미지 네임, 서버이미지 넘버, 생성날짜를 리스트에 저장
r = []
r.append(i["memberServerImageName"])
r.append(i["memberServerImageInstanceNo"])
r.append(i["createDate"])
####당일시간에서 생성시간을 뺀 시간을 저장
r.append(math.floor(int(date_now-dateutil.parser.parse(i["createDate"].split("T")[0]).timestamp())/60/60/24))
result.append(r)
####dataframe을 생성
tmp_f = pd.DataFrame(result, columns=["image_name", "image_id", "create_date", "check"])
####서버이미지 네임중 auto-img가 불포함된 행 삭제
tmp_f = tmp_f.drop(tmp_f[~tmp_f["image_name"].str.contains("auto-img")].index)
return tmp_f
- getMemberServerImageInstanceListResponse 내용 중 memberServerImageInstanceList 의 내용만 사용할 예정이므로 해당 결과 값만 payload에 저장하였습니다. 양식은 아래 "더보기" ⬇️를 확인하세요.
- 당일 날짜를 timestamp로 변경하고 해당 수치에서 서버이미지 생성 시간을 뺀 시간을 저장합니다. 해당 값을 dataframe 생성 시 컬럼명 "check"에 저장합니다.
- 자동으로 만들지 않은 서버이미지가 삭제되는 것을 방지하게 위해 서버이미지 네임 중 auto-img가 불포함된 행은 dataframe에서 삭제합니다.
▶ 서버이미지 삭제
서버 이미지 삭제 : deleteMemberServerImageInstances 메소드 이용 - 관련 참고 문서 ⬅️
(예시)
ncloud vserver deleteMemberServerImageInstances --regionCode KR --memberServerImageInstanceNoList ***5847
def delete_image():
df = rearrange_image_list()
####7일 지난 행만 남겨 둠
df = df.drop(df[df["check"] <= 9].index).reset_index(drop=True)
####이미지 id, 이미지 name을 리스트 형채로 저장
image_id = df["image_id"].tolist()
image_name = df["image_name"].tolist()
####이미지 id 리스트가 비어 있지 않을 경우 deleteMemberServerImageInstances 메소드를 이용하여 해당 이미지 삭제
if len(image_id) != 0:
for i in image_id:
os.system(f"sh ncloud vserver deleteMemberServerImageInstances --regionCode FKR --memberServerImageInstanceNoList {i} > /dev/null 2>&1")
for n in image_name:
webhook(f"Deleting image : {n} ")
else :
webhook("No server-images to delete")
- 생성한지 10일 지난 서버이미지만 dataframe에 남겨놓고 해당 서버이미지의 ID와 네임정보를 변수 값에 저장합니다.
- deleteMemberServerImageInstances 메소드를 이용하여 삭제대상인 서버이미지를 삭제합니다.
- 현재 삭제되고 있는 서버이미지 네임을 Webhook으로 보내 작업이 시작되었음을 알립니다.
글이 길어서 서버이미지 생성 및 삭제 알람 생성 방법은 다음글에 작성하겠습니다.
'클라우드 > NCP(클라우드)' 카테고리의 다른 글
[ NCP 서버이미지 ] 생성 및 삭제 알람 발송하기 ( python3 + slack ) (0) | 2023.11.23 |
---|---|
[ NCP CLI ] 설치 및 실행 (0) | 2023.11.23 |