fix: ステージング環境で実行できるように修正

This commit is contained in:
shimoda.m@nds-tyo.co.jp 2023-07-18 15:23:57 +09:00
parent d2d5b5f9b6
commit 7d7e064057
3 changed files with 20 additions and 24 deletions

View File

@ -9,3 +9,4 @@ __pycache__
.pytest_cache .pytest_cache
.coverage .coverage
.report/ .report/
*.gz

View File

@ -33,39 +33,34 @@ def exec():
s3_file_path = environment.JSKULT_BACKUP_DUMP_S3_FILE_PATH s3_file_path = environment.JSKULT_BACKUP_DUMP_S3_FILE_PATH
# S3 URIになっているか確認 # S3 URIになっているか確認
s3_file_path_pattern = r"s3://([\w-]+)/dump/(\d{4})/(\d{2})/(\d{2})/backup_rds_(\d+).gz" s3_file_path_pattern = r"s3://(.+)/dump/(\d{4})/(\d{2})/(\d{2})/backup_rds_src05_(\d+).gz"
if re.match(s3_file_path_pattern, s3_file_path) is None: if re.match(s3_file_path_pattern, s3_file_path) is None:
logger.warning('環境変数[JSKULT_BACKUP_DUMP_S3_FILE_PATH]に指定された、S3 URIの形式が不正です。') logger.warning('環境変数[JSKULT_BACKUP_DUMP_S3_FILE_PATH]に指定された、S3 URIの形式が不正です。')
return constants.BATCH_EXIT_CODE_SUCCESS return constants.BATCH_EXIT_CODE_SUCCESS
# aws s3 cpコマンドを実行してdumpファイルを標準出力に取得する # aws s3 cpコマンドを実行してdumpファイルをローカルにダウンロードする
s3_cp_process = subprocess.Popen(['aws', 's3', 'cp', s3_file_path, '-'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) s3_cp_process = subprocess.Popen(['aws', 's3', 'cp', s3_file_path, './dump.gz'], stderr=subprocess.PIPE)
# gunzipコマンドを実行してdumpファイルを解凍する
gunzip_process = subprocess.Popen(['gzip', '-c'], stdin=s3_cp_process.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# mysqldumpコマンドを実行し、dumpを取得する
mysql_process = subprocess.Popen(
['mysql', f'--defaults-file={my_cnf_path}', '-P', f"{environment.DB_PORT}", environment.DB_SCHEMA],
stdin=gunzip_process.stdout, stderr=subprocess.PIPE
)
# aws s3 cpの標準出力をgunzipに接続したため、標準出力をクローズする
s3_cp_process.stdout.close()
# gunzipの標準出力をaws mysqlに接続したため、標準出力をクローズする
gunzip_process.stdout.close()
# パイプラインを実行し、エラーハンドリング
_, error = s3_cp_process.communicate() _, error = s3_cp_process.communicate()
if s3_cp_process.returncode != 0: if s3_cp_process.returncode != 0:
logger.error(f'`aws s3 cp`実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}') logger.error(f'`aws s3 cp`実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}')
return constants.BATCH_EXIT_CODE_SUCCESS return constants.BATCH_EXIT_CODE_SUCCESS
_, error = gunzip_process.communicate() # S3コマンドの標準エラーはクローズしておく
if gunzip_process.returncode != 0: s3_cp_process.stderr.close()
logger.error(f'`gunzip`実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}')
return constants.BATCH_EXIT_CODE_SUCCESS # gzipコマンドを実行してdumpファイルを解凍する
gzip_process = subprocess.Popen(['gunzip', '-c', './dump.gz'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# mysqlコマンドを実行し、dumpを復元する
mysql_process = subprocess.Popen(
['mysql', f'--defaults-file={my_cnf_path}', '-P', f"{environment.DB_PORT}", environment.DB_SCHEMA],
stdin=gzip_process.stdout, stderr=subprocess.PIPE
)
# gzipの標準出力をmysqlに接続したため、標準出力をクローズする
gzip_process.stdout.close()
_, error = mysql_process.communicate() _, error = mysql_process.communicate()
if mysql_process.returncode != 0: if mysql_process.returncode != 0:
logger.error(f'`mysql`実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}') logger.error(f'コマンド実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}')
return constants.BATCH_EXIT_CODE_SUCCESS return constants.BATCH_EXIT_CODE_SUCCESS
logger.info('[NOTICE]実消化&アルトマークダンプ復元スクリプト:終了(正常終了)') logger.info('[NOTICE]実消化&アルトマークダンプ復元スクリプト:終了(正常終了)')
return constants.BATCH_EXIT_CODE_SUCCESS return constants.BATCH_EXIT_CODE_SUCCESS

View File

@ -8,7 +8,7 @@ DB_PASSWORD = os.environ['DB_PASSWORD']
DB_SCHEMA = os.environ['DB_SCHEMA'] DB_SCHEMA = os.environ['DB_SCHEMA']
# AWS # AWS
JSKULT_BACKUP_DUMP_S3_FILE_PATH = os.environ['JSKULT_BACKUP_DUMP_FILE_PATH'] JSKULT_BACKUP_DUMP_S3_FILE_PATH = os.environ['JSKULT_BACKUP_DUMP_S3_FILE_PATH']
# 初期値がある環境変数 # 初期値がある環境変数
LOG_LEVEL = os.environ.get('LOG_LEVEL', 'INFO') LOG_LEVEL = os.environ.get('LOG_LEVEL', 'INFO')