From 1924b6f7ec85a84daab5db3a7edc7a2a9de1cedb Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Tue, 24 May 2022 21:37:26 +0900 Subject: [PATCH] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF=E5=BE=A9?= =?UTF-8?q?=E5=8F=B7=E5=8C=96=E5=87=A6=E7=90=86=20=E5=8B=95=E4=BD=9C?= =?UTF-8?q?=E7=A2=BA=E8=AA=8D=E6=99=82=E3=81=AB=E7=99=BA=E7=94=9F=E3=81=97?= =?UTF-8?q?=E3=81=9F=E3=82=A8=E3=83=A9=E3=83=BC=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datadecrypt/main.py | 77 +++++++++++-------- 1 file changed, 43 insertions(+), 34 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py index 6f9c76df..11f0260c 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py @@ -1,3 +1,4 @@ +from logging import exception import os import sys import boto3 @@ -36,10 +37,6 @@ TARGET_BUCKET_BY_DATA_SOURCE = { s3_client = boto3.client('s3') s3_resource = boto3.resource('s3') sns_client = boto3.client('sns') -event_bucket_name = '' -event_file_path = '' -event_file_name = '' -event_data_source_name = '' def handler(event, context): @@ -50,7 +47,7 @@ def handler(event, context): print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{today}') except Exception as e: print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_process(EXTENSION_ERROR, 'E-99', e) + error_exit(event, EXTENSION_ERROR, 'E-99', e) # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する try: @@ -66,7 +63,7 @@ def handler(event, context): print_log(LOG_INFO, 'I-02-04', f'データソース名:{event_data_source_name}') except Exception as e: print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_process(EXTENSION_ERROR, 'E-99', e) + error_exit(event, EXTENSION_ERROR, 'E-99', e) # ③ S3から秘密鍵ファイルを読み込む try: @@ -74,8 +71,8 @@ def handler(event, context): s3_client.download_file(SECRET_KEY_FILE_BUCKET_NAME, SECRET_KEY_FILE_PATH, PATH_TEMP_PRIVATE_KEY) print_log(LOG_INFO, 'I-03-02', '秘密鍵ファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-03-01', '秘密鍵ファイルの読み込みに失敗しました') - error_process(EXTENSION_ERROR, 'I-03-01', e) + print_log(LOG_ERROR, 'E-03-01', f'秘密鍵ファイルの読み込みに失敗しました エラー内容:{e}') + error_exit(event, EXTENSION_ERROR, 'I-03-01', e) # ④ S3からPGP暗号化ファイルを読み込む try: @@ -84,7 +81,7 @@ def handler(event, context): print_log(LOG_INFO, 'I-04-02', 'PGP暗号化ファイルを読み込みました') except Exception as e: try: - print_log(LOG_ERROR, 'E-04-01', 'PGP暗号化ファイルの読み込みに失敗しました') + print_log(LOG_ERROR, 'E-04-01', f'PGP暗号化ファイルの読み込みに失敗しました エラー内容:{e}') result_error_file_name = event_file_name + EXTENSION_ERROR result_error_key = event_data_source_name + DIRECTORY_RECV + result_error_file_name @@ -105,7 +102,7 @@ def handler(event, context): sys.exit() except Exception as e: print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_process(EXTENSION_ERROR, 'E-99', e) + error_exit(event, EXTENSION_ERROR, 'E-99', e) # ⑤ 「③」で読み込んだ秘密鍵ファイルをPGPライブラリにインポートを行う try: @@ -115,20 +112,19 @@ def handler(event, context): gpg.import_keys(key_file.read()) print_log(LOG_INFO, 'I-05-02', '秘密鍵ファイルをインポートしました') except Exception as e: - print_log(LOG_ERROR, 'E-05-01', '秘密鍵ファイルのインポートに失敗しました') - error_process(EXTENSION_ERROR, 'E-05-01', e) + print_log(LOG_ERROR, 'E-05-01', f'秘密鍵ファイルのインポートに失敗しました エラー内容:{e}') + error_exit(event, EXTENSION_ERROR, 'E-05-01', e) # ⑥ 「④」で読み込んだPGP暗号化ファイルを「⑤」でインポートした秘密鍵ファイルで復号する try: print_log(LOG_INFO, 'I-06-01', 'PGP暗号化ファイルの復号化') with open(PATH_TEMP_ENCRYPT_FILE, 'rb') as temp_encrypr_file: gpg.decrypt_file(temp_encrypr_file, output=PATH_TEMP_DECRYPT_FILE) - with open(PATH_TEMP_DECRYPT_FILE, 'rb') as temp_decrypt_file: - decrypt_file = temp_decrypt_file + decrypt_file = open(PATH_TEMP_DECRYPT_FILE, 'rb') print_log(LOG_INFO, 'I-06-02', 'PGP暗号化ファイルを復号しました') except Exception as e: - print_log(LOG_ERROR, 'E-06-01', 'PGP暗号化ファイルの復号化に失敗しました') - error_process(EXTENSION_DECRYPT_ERROR, 'E-06-01', e) + print_log(LOG_ERROR, 'E-06-01', f'PGP暗号化ファイルの復号化に失敗しました エラー内容:{e}') + error_exit(event, EXTENSION_DECRYPT_ERROR, 'E-06-01', e) # ⑦ 各ファイルをS3に出力する try: @@ -141,48 +137,61 @@ def handler(event, context): print_log(LOG_INFO, 'I-07-02', f'復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{decrypt_bucket_name}/{decrypt_file_key}') decrypt_file_obj = s3_resource.Object(decrypt_bucket_name, decrypt_file_key) decrypt_file_obj.put(Body=decrypt_file) + decrypt_file.close print_log(LOG_INFO, 'I-07-03', '復号化ファイルをS3に出力しました') except Exception as e: - print_log(LOG_ERROR, 'E-07-01', '復号化ファイルのS3出力に失敗しました') - error_process(EXTENSION_ERROR, 'E-07-01', e) + print_log(LOG_ERROR, 'E-07-01', f'復号化ファイルのS3出力に失敗しました エラー内容:{e}') + error_exit(event, EXTENSION_ERROR, 'E-07-01', e) try: # 「④」で読み込んだPGP暗号化ファイルを以下に移動(コピー削除)する + copy_source = { + 'Bucket': event_bucket_name, + 'Key': event_file_path + } backup_file_key = f'{event_data_source_name}/{today}/{event_file_name}' - print_log(LOG_INFO, 'I-07-04', f'PGP暗号化ファイル出力 ファイル名:{event_file_name} 出力先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') - decrypt_file_obj = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key) - decrypt_file_obj.put(Body=decrypt_file) - print_log(LOG_INFO, 'I-07-05', 'PGP暗号化ファイル出力をS3に出力しました') + print_log(LOG_INFO, 'I-07-04', f'PGP暗号化ファイル移動 移動元:{event_bucket_name}/{event_file_path} 移動先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') + backup_file_obj = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key) + backup_file_obj.copy(copy_source) + s3_client.delete_object(Bucket=event_bucket_name, Key=event_file_path) + print_log(LOG_INFO, 'I-07-05', 'PGP暗号化ファイルをバックアップ用バケットに移動しました') except Exception as e: - print_log(LOG_ERROR, 'E-07-02', 'PGP暗号化ファイルのS3出力に失敗しました') - error_process(EXTENSION_ERROR, 'E-07-02', e) + print_log(LOG_ERROR, 'E-07-02', f'PGP暗号化ファイルのS3出力に失敗しました エラー内容:{e}') + error_exit(event, EXTENSION_ERROR, 'E-07-02', e) # ⑧ 処理終了ログを出力する try: print_log(LOG_INFO, 'I-08-01', '処理終了 SAPデータ復号処理') except Exception as e: print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_process(EXTENSION_ERROR, 'E-99', e) + error_exit(event, EXTENSION_ERROR, 'E-99', e) def print_log(log_level, log_id, msg): try: print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} {log_level} {log_id} {msg}') except Exception as e: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') - error_process('E-99', e) + exception_msg = f'Error E-99 想定外のエラーが発生しました エラー内容:{e}' + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} {exception_msg}') + raise Exception(exception_msg) -def error_process(extension, error_log_id, exception): +def error_exit(event, extension, error_log_id, exception): # ① エラー処理を行う try: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-01 エラー処理開始') + print_log(LOG_ERROR, 'E-ERR-01', 'エラー処理開始') + + s3_event = event["Records"][0]["s3"] + event_bucket_name = s3_event["bucket"]["name"] + event_file_path = s3_event["object"]["key"] + event_file_name = os.path.basename(event_file_path) + event_data_source_name = os.path.dirname(event_file_path).split('/')[0] result_error_file_name = event_file_name + extension result_error_key = event_data_source_name + DIRECTORY_RECV + result_error_file_name result_error_obj = s3_resource.Object(event_bucket_name, result_error_key) result_error_obj.put(Body='') - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-02 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{event_bucket_name}/{result_error_key}') + print_log(LOG_ERROR, 'E-ERR-02', f'recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{event_bucket_name}/{result_error_key}') copy_source = { 'Bucket': event_bucket_name, @@ -193,9 +202,9 @@ def error_process(extension, error_log_id, exception): error_obj = s3_resource.Object(event_bucket_name, error_key) error_obj.copy(copy_source) s3_client.delete_object(Bucket=event_bucket_name, Key=event_file_path) - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 recv_errorディレクトリにファイルを移動しました 移動元:{event_bucket_name}/{event_file_path} 移動先:{event_bucket_name}/{error_key}') + print_log(LOG_ERROR, 'E-ERR-03', f'recv_errorディレクトリにファイルを移動しました 移動元:{event_bucket_name}/{event_file_path} 移動先:{event_bucket_name}/{error_key}') - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-04 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + print_log(LOG_ERROR, 'E-ERR-04', f'処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' params = { 'TopicArn': NDS_NOTICE_TOPIC, @@ -204,8 +213,8 @@ def error_process(extension, error_log_id, exception): } sns_client.publish(**params) - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-05 エラー終了 処理を中断します') + print_log(LOG_ERROR, 'E-ERR-05', 'エラー終了 処理を中断します') sys.exit() except Exception as e: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') + print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') sys.exit()