From 7d7e0640570cf3938c3df099f90f5ae3b09332ec Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 18 Jul 2023 15:23:57 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=E3=82=B9=E3=83=86=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=83=B3=E3=82=B0=E7=92=B0=E5=A2=83=E3=81=A7=E5=AE=9F=E8=A1=8C?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-restore-backup/.gitignore | 3 +- .../src/restore_backup.py | 39 ++++++++----------- .../src/system_var/environment.py | 2 +- 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/ecs/jskult-restore-backup/.gitignore b/ecs/jskult-restore-backup/.gitignore index cf44449e..d9a271c3 100644 --- a/ecs/jskult-restore-backup/.gitignore +++ b/ecs/jskult-restore-backup/.gitignore @@ -8,4 +8,5 @@ __pycache__ # python test .pytest_cache .coverage -.report/ \ No newline at end of file +.report/ +*.gz \ No newline at end of file diff --git a/ecs/jskult-restore-backup/src/restore_backup.py b/ecs/jskult-restore-backup/src/restore_backup.py index da481eaf..439fe4cf 100644 --- a/ecs/jskult-restore-backup/src/restore_backup.py +++ b/ecs/jskult-restore-backup/src/restore_backup.py @@ -33,39 +33,34 @@ def exec(): s3_file_path = environment.JSKULT_BACKUP_DUMP_S3_FILE_PATH # 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: logger.warning('環境変数[JSKULT_BACKUP_DUMP_S3_FILE_PATH]に指定された、S3 URIの形式が不正です。') return constants.BATCH_EXIT_CODE_SUCCESS - # aws s3 cpコマンドを実行してdumpファイルを標準出力に取得する - s3_cp_process = subprocess.Popen(['aws', 's3', 'cp', s3_file_path, '-'], stdout=subprocess.PIPE, 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() - - # パイプラインを実行し、エラーハンドリング + # aws s3 cpコマンドを実行してdumpファイルをローカルにダウンロードする + s3_cp_process = subprocess.Popen(['aws', 's3', 'cp', s3_file_path, './dump.gz'], stderr=subprocess.PIPE) _, error = s3_cp_process.communicate() if s3_cp_process.returncode != 0: logger.error(f'`aws s3 cp`実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}') return constants.BATCH_EXIT_CODE_SUCCESS - _, error = gunzip_process.communicate() - if gunzip_process.returncode != 0: - logger.error(f'`gunzip`実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}') - return constants.BATCH_EXIT_CODE_SUCCESS + # S3コマンドの標準エラーはクローズしておく + s3_cp_process.stderr.close() + + # 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() 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 - logger.info('[NOTICE]実消化&アルトマークダンプ復元スクリプト:終了(正常終了)') return constants.BATCH_EXIT_CODE_SUCCESS diff --git a/ecs/jskult-restore-backup/src/system_var/environment.py b/ecs/jskult-restore-backup/src/system_var/environment.py index 4ab083e0..ee0e9be3 100644 --- a/ecs/jskult-restore-backup/src/system_var/environment.py +++ b/ecs/jskult-restore-backup/src/system_var/environment.py @@ -8,7 +8,7 @@ DB_PASSWORD = os.environ['DB_PASSWORD'] DB_SCHEMA = os.environ['DB_SCHEMA'] # 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')