오라클 클라우드의 '평생 무료' ARM 서버(4 OCPU, 24GB RAM)는 성능이 워낙 뛰어나 인기가 많다 보니, 수동으로는 좀처럼 생성하기가 쉽지 않다. 이를 해결하기 위해 서버가 자리가 날 때까지 자동으로 신청을 반복하는 시스템을 구축하는 전 과정을 정리했다.
1. OCI CLI 설치하기 (서버 대리인 세우기)
가장 먼저 수행할 작업은 내 명령을 오라클에 전달해 줄 '대리인'인 OCI CLI를 설치하는 것이다. 여기서는 별도의 우분투(Ubuntu) 서버를 활용한다고 가정한다.
터미널에 아래 명령어를 입력하여 설치를 시작한다.
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
설치 과정에서 물어보는 질문에는 모두 엔터(Enter)를 쳐서 기본값으로 넘어가면 된다. 설치가 완료되면 oci --version을 입력해 정상 설치 여부를 확인한다.
2. API 키 생성 및 환경 설정 (oci setup config)
이제 오라클 클라우드 계정과 내 서버를 연결해야 한다.
oci setup config
명령어를 치면 여러 정보를 요구하는데, 여기서 두 가지 핵심 OCID가 필요하다.
- User OCID: 오라클 콘솔 오른쪽 상단 [사람 아이콘] → [My Profile]에서 확인할 수 있는 사용자 고유 번호다.
- Tenancy OCID: [사람 아이콘] → [Tenancy: (계정이름)]에서 확인 가능한 계정 전체의 고유 번호다.
설정 마지막에 API Key를 생성하겠냐는 질문(Generate a new API Signing Key?)에는 Y를 입력한다. 그러면 서버에 oci_api_key.pem과 oci_api_key_public.pem 파일이 생성된다.
3. 오라클 콘솔에 API 키 등록하기
서버에서 만든 '인감 도장'의 정보를 오라클 웹사이트에 등록해야 한다.
- 서버 터미널에서
cat ~/.oci/oci_api_key_public.pem을 입력해 내용을 복사한다. - 오라클 콘솔 [My Profile] → 왼쪽 아래 [API Keys] → [Add API Key]를 클릭한다.
- [Paste Public Key]를 선택하고 복사한 내용을 붙여넣은 뒤 추가한다.
- 추가된 후 나타나는 Fingerprint 값이 내 서버의
~/.oci/config파일에 적힌 값과 일치하는지 확인한다.
4. 인증 및 리소스 정보 확인
설정이 잘 되었는지 확인하기 위해 아래 명령어를 입력해 본다. 내 계정 정보가 JSON 형태로 출력된다면 성공이다.
oci iam user get --user-id [본인의_User_OCID]
이제 자동 신청 스크립트에 넣을 Subnet ID를 찾아야 한다. 콘솔의 [Networking] → [Virtual Cloud Networks] → [Subnets] 메뉴에서 'Public Subnet'을 클릭해 OCID를 복사해 둔다.
5. 자동 신청 무한 루프 스크립트 작성
이제 1분마다 서버 생성을 시도하고, 결과를 디스코드로 알려주는 스크립트를 만든다.
nano ~/launch_oracle.sh 명령어로 파일을 열고 아래 내용을 작성한다.
#!/bin/bash
# 설정 정보
DISCORD_URL="본인의_디스코드_웹후크_주소"
COMPARTMENT_ID="본인의_Tenancy_OCID"
SUBNET_ID="본인의_Subnet_OCID"
IMAGE_ID="ocid1.image.oc1.ap-osaka-1.aaaaㅁㅇㄹㄴㅇㄹ7m4ia" # 오사카 기준
PUB_KEY_PATH="$HOME/oracle_key.pub" # 본인의 SSH 공개키 경로
TRY_COUNT=0
while true
do
TRY_COUNT=$((TRY_COUNT + 1))
echo "시도 횟수: $TRY_COUNT | 시도 시간: $(date)"
# 인스턴스 생성 요청
output=$(oci compute instance launch \
--availability-domain "AD-1" \
--compartment-id "$COMPARTMENT_ID" \
--shape "VM.Standard.A1.Flex" \
--shape-config '{"ocpus":4,"memoryInGB":24}' \
--subnet-id "$SUBNET_ID" \
--image-id "$IMAGE_ID" \
--display-name "Main-Compute-Node" \
--ssh-authorized-keys-file "$PUB_KEY_PATH" \
--assign-public-ip true \
2>&1)
# 결과 분석
if [[ $output != *"Out of capacity"* ]]; then
curl -H "Content-Type: application/json" -X POST -d "{\"content\": \"✅ **[성공]** 서버 생성 완료! 시도 횟수: $TRY_COUNT\"}" "$DISCORD_URL"
break
fi
# 10번마다 생존 신고
if [ $((TRY_COUNT % 10)) -eq 0 ]; then
curl -H "Content-Type: application/json" -X POST -d "{\"content\": \"⏳ 현재 $TRY_COUNT 번째 시도 중...\"}" "$DISCORD_URL"
fi
sleep 60
done
6. 백그라운드 실행 및 모니터링
작성한 스크립트에 실행 권한을 주고, 터미널을 닫아도 계속 돌아가도록 실행한다.
chmod +x ~/launch_oracle.sh
nohup ./launch_oracle.sh > oracle_log.txt 2>&1 &
진행 상황은 tail -f oracle_log.txt 명령어로 실시간 확인할 수 있다.
7. 마치며
이 과정을 거치면 더 이상 수동으로 새로고침 버튼을 누를 필요가 없다. 일산 서버가 24시간 내내 오사카 리전의 빈자리를 감시하며, 성공하는 순간 디스코드 알림을 보내줄 것이다. 이제 여유롭게 알림을 기다리며 다른 프로젝트에 집중하면 된다.
제발 되라 제발 되라~~~
'data lab' 카테고리의 다른 글
| Js 니코강의 3 (0) | 2024.07.27 |
|---|---|
| promise, async, await 공부하기 (0) | 2024.07.22 |
| 형님의 Js 화살표함수와 구조분해할당, 얕은복사 깊은복사 개인과외 - 3 (0) | 2024.07.16 |
| 형님의 js 필수 전수업review 과외 2 (0) | 2024.07.15 |
| 형님의 Js 필수 기본개념, 내장 배열 method 개인과외 - 1 (0) | 2024.07.13 |