Allow group compute-onoff to use instances in compartment [구획이름]
이번 실습에서는 특정 구획 하위에 존재하는 모든 컴퓨트 인스턴스를 중지/시작하기 때문에 가급적이면 작업하고자 하는 구획이 아닌 다른 구획을 생성하여 관리하는 것을 권장합니다. 하지만 부득이 동일한 구획에 생성하시는 경우 컴퓨트 인스턴스의 이름을 “compute-onoff”로 지정하여 생성할 경우 해당 인스턴스는 스킵됩니다.
스크립트 파일을 실행하기 위해서는 2가지 파라미터가 필요합니다.
./compute-onoff.sh STOP ocid1.compartment.oc1..~~~~~~~~~~
스크립트 파일의 내용은 다음과 같습니다. 파일 다운로드는 다운로드를 클릭하여 다운로드할 수 있습니다. VM에서 다운로드 하기 위해서는 아래 명령어를 입력하여 다운로드 가능합니다.
wget https://the-team-oasis.github.io/assets/files/infrastructure/2023/compute-onoff.sh
#!/bin/bash
set -e
action=$1
compartmentId=$2
if [ "$action" == "START" ]; then
echo "START command received"
elif [ "$action" == "STOP" ]; then
echo "STOP command received"
else
echo "Invalid parameter. Please enter 'START' or 'STOP'"
echo "./compute-onoff.sh [START or STOP] [enter CompartmentID]"
exit 1
fi
echo "action: $action"
if [ -z "$compartmentId" ]; then
echo "Error: compartmentId parameter is required"
echo "./compute-onoff.sh [START or STOP] [enter CompartmentID]"
exit 1
fi
# compartmentId parameter is present, continue with the script
echo "compartmentId: $compartmentId"
computeList=$(eval "oci compute instance list --compartment-id $compartmentId")
for i in $(echo "$computeList" | jq '.data | keys | .[]'); do
echo "loop: $i"
ID=$(echo "$computeList" | jq -r ".data[$i].\"id\"")
displayName=$(echo "$computeList" | jq -r ".data[$i].\"display-name\"")
lifecycleState=$(echo "$computeList" | jq -r ".data[$i].\"lifecycle-state\"")
echo "ID: $ID"
echo "displayName: $displayName"
echo "lifecycleState: $lifecycleState"
echo "****"
if [ "$displayName" == "compute-onoff" ]; then
echo "skip compute-onoff instance"
continue
fi
if [ "$1" == "START" ] && [ "$lifecycleState" == "STOPPED" ]; then
echo "start instance $displayName"
oci compute instance action --action START --instance-id $ID
elif [ "$1" == "STOP" ] && [ "$lifecycleState" == "RUNNING" ]; then
echo "stop instance $displayName"
oci compute instance action --action STOP --instance-id $ID
else
echo "Nothing to do"
fi
done
crontab -e
0 9 * * 1-5 /bin/bash /home/opc/scripts/compute-onoff.sh START [compartmentId]
0 18 * * 1-5 /bin/bash /home/opc/scripts/compute-onoff.sh STOP [compartmentId]
위 스케쥴은 평일(월요일부터 금요일까지) 오전 9시와 오후 6시에 실행하도록 설정되어 있습니다. 스크립트의 경로와 컴파트먼트 ID를 실제 값으로 대체해야 합니다. 위 스케쥴은 다음과 같이 해석됩니다.
위의 설정대로 스케쥴을 추가하면, 지정된 시간에 스크립트가 실행됩니다.
크론탭이 스케쥴을 입력 후 실행 결과를 확인하기 위해서 아래 경로의 로그의 내용을 확인하여 실행 결과를 확인할 수 있습니다.
sudo vi /var/log/cron
이번 포스팅에서는 크론탭 + OCI CLI를 사용하여 특정 구획의 컴퓨트 인스턴스를 자동으로 중지/시작하는 방법에 대해 알아보았습니다. 아무쪼록 도움이 되셨으면 좋겠습니다.
이 글은 개인적으로 얻은 지식과 경험을 작성한 글로 내용에 오류가 있을 수 있습니다. 또한 글 속의 의견은 개인적인 의견으로 특정 회사를 대변하지 않습니다.
Younghwan Cho INFRASTRUCTURE
oci infrastructure compute crontab autostop autostart schedule