Infra DevOps

インフラ構築のナレッジや、運用の自動簡易化に関する記事を書いていこうと思います

APIを利用したOracle Cloudのインスタンス起動、停止

時間単位でOracle Cloudのインスタンスを利用していた際、

決まった時間に停止や起動を行うために作成したスクリプト

十分テストしたうえでご利用ください。

(refer https://docs.oracle.com/cd/E60665_01/dbcs_dbaas/CSDBI/GUID-7DF6020E-01C6-4AC9-9CFD-027EFEA857DE.htm)

第一引数にはインスタンス名、第二引数にはStartかStopの指定が必要です。

 

 

 

# 本スクリプトは、Oracle Cloud Service インタンスの起動、停止自動化を目的とした
# ツールになります。

# ===========================================================================
# 【変数指定】実行環境に合わせて書き換えてください
# ===========================================================================
# -------------------------------------------------------
# 0) 実行日付
export TIMESTAMP=`/bin/date +%Y%m%d`
# -------------------------------------------------------
# 1) 操作対象のインスタンス名を指定
export INSTANCE_NAME=$1
# -------------------------------------------------------
# 2) 操作対象のコマンドを指定(Start 又は stop)
export START_STOP=$2
# -------------------------------------------------------
# 3) Oracle Cloud Service アイデンティティドメイン名を指定
export ID_DOMAIN="アイデンティティドメイン名"
# -------------------------------------------------------
# 4) インスタンス停止権限を持つユーザ、パスワード情報を指定
export USERID="oraclecloudユーザID"
export PASSWD="上記IDのパスワード"
# -------------------------------------------------------
# 5) ログ出力先ディレクトリ、ファイル
export LOG_DIR="このスクリプトのログディレクトリ"
export LOG_FILE="result_auto_stop"
# -------------------------------------------------------
# 6) ログ保存期間
export RETENTION="7"
# -------------------------------------------------------
# 7) シェル格納パス
export CMD_PATH="このシェル置くところのディレクトリ名"


# ===========================================================================
# 以下は変更不要です
# ===========================================================================
# -------------------------------------------------------
# 8) 削除対象となるログファイル日付
export DELFILE_TIMESTAMP=`/bin/date --date "${RETENTION} days ago" +%Y%m%d`

# -------------------------------------------------------
# 事前処理
# -------------------------------------------------------
CMD_NAME=`basename $0`
RETVAL="0"

if [ $# -ne 2 ]; then
  echo "Usage:${CMD_NAME} INSTANCE_NAME [ Start | Stop ] " >> ${LOG_DIR}/${LOG_FILE}_${TIMESTAMP} 2>&1
  exit 1
fi

# -------------------------------------------------------
# メイン処理
# -------------------------------------------------------
echo "${TIMESTAMP} ${CMD_NAME} ${INSTANCE_NAME} start" >> ${LOG_DIR}/${LOG_FILE}_${TIMESTAMP} 2>&1
# -------------------------------
# Oracle Cloud Service インタンス起動、停止
# -------------------------------

curl --include --request POST \
--user "${USERID}:${PASSWD}" \
--header "X-ID-TENANT-NAME:${ID_DOMAIN}" \
--header "Content-Type:application/json" \
--data "{ "lifecycleState" :${START_STOP} }" \
https://dbaas.oraclecloud.com/paas/service/dbcs/api/v1.1/instances/${ID_DOMAIN}/${INSTANCE_NAME} >> ${LOG_DIR}/${LOG_FILE}_${TIMESTAMP} 2>&1

RETVAL=$?
  if [ ${RETVAL} -ne 0 ];then
    echo "NG ${START_STOP} INSTANCE" >> ${LOG_DIR}/${LOG_FILE}_${TIMESTAMP} 2>&1
    exit ${RETVAL}
  fi
    echo "OK ${START_STOP} INSTANCE" >> ${LOG_DIR}/${LOG_FILE}_${TIMESTAMP} 2>&1

# -------------------------------
# 過去ログファイルの削除
# -------------------------------

if [ ! -e "${LOG_DIR}/${LOG_FILE}_${DELFILE_TIMESTAMP}" ]; then
  echo "INFO:LogFile should be deleted no exits" >> ${LOG_DIR}/${LOG_FILE}_${TIMESTAMP} 2>&1
  echo "${TIMESTAMP} ${CMD_NAME} ${INSTANCE_ID} normal end" >> ${LOG_DIR}/${LOG_FILE}_${TIMESTAMP} 2>&1
  exit 0
fi

rm ${LOG_DIR}/${LOG_FILE}_${DELFILE_TIMESTAMP}
RETVAL=$?

  if [ ${RETVAL} -ne 0 ];then
    echo "NG DELETE LOG FILE ${LOG_DIR}/${LOG_FILE}_${DELFILE_TIMESTAMP}" >> ${LOG_DIR}/${LOG_FILE}_${TIMESTAMP} 2>&1
    exit ${RETVAL}
  fi

echo "${TIMESTAMP} ${CMD_NAME} ${INSTANCE_NAME} normal end" >> ${LOG_DIR}/${LOG_FILE}_${TIMESTAMP} 2>&1
exit 0