Merge pull request #401 develop into release-v4.4.0

This commit is contained in:
下田雅人 2024-05-27 12:03:53 +09:00
commit 318373a321
14 changed files with 169 additions and 130 deletions

View File

@ -12,87 +12,87 @@ from src.system_var.environments import (CRM_BACKUP_BUCKET, CRM_CONFIG_BUCKET,
RESPONSE_JSON_BACKUP_FOLDER) RESPONSE_JSON_BACKUP_FOLDER)
class S3Resource: class S3Client:
def __init__(self, bucket_name: str) -> None: def __init__(self, bucket_name: str) -> None:
self.__s3_resource = boto3.resource(AWS_RESOURCE_S3) self.__s3_client = boto3.client(AWS_RESOURCE_S3)
self.__s3_bucket = self.__s3_resource.Bucket(bucket_name) self.__s3_bucket = bucket_name
def get_object(self, object_key: str) -> str: def get_object(self, object_key: str) -> str:
response = self.__s3_bucket.Object(object_key).get() response = self.__s3_client.get_object(Bucket=self.__s3_bucket, Key=object_key)
body = response[S3_RESPONSE_BODY].read() body = response[S3_RESPONSE_BODY].read()
return body.decode(S3_CHAR_CODE) return body.decode(S3_CHAR_CODE)
def put_object(self, object_key: str, local_file_path: str) -> None: def put_object(self, object_key: str, local_file_path: str) -> None:
self.__s3_bucket.upload_file(Key=object_key, Filename=local_file_path) self.__s3_client.upload_file(Filename=local_file_path, Bucket=self.__s3_bucket, Key=object_key)
return return
def copy(self, src_bucket: str, src_key: str, dest_bucket: str, dest_key: str) -> None: def copy(self, src_bucket: str, src_key: str, dest_bucket: str, dest_key: str) -> None:
copy_source = {'Bucket': src_bucket, 'Key': src_key} copy_source = {'Bucket': src_bucket, 'Key': src_key}
self.__s3_resource.meta.client.copy(copy_source, dest_bucket, dest_key) self.__s3_client.copy_object(CopySource=copy_source, Bucket=dest_bucket, Key=dest_key)
return return
class ConfigBucket: class ConfigBucket:
__s3_resource: S3Resource = None __s3_client: S3Client = None
def __init__(self) -> None: def __init__(self) -> None:
self.__s3_resource = S3Resource(CRM_CONFIG_BUCKET) self.__s3_client = S3Client(CRM_CONFIG_BUCKET)
def __str__(self) -> str: def __str__(self) -> str:
return CRM_CONFIG_BUCKET return CRM_CONFIG_BUCKET
def get_object_info_file(self) -> str: def get_object_info_file(self) -> str:
return self.__s3_resource.get_object(f'{OBJECT_INFO_FOLDER}/{OBJECT_INFO_FILENAME}') return self.__s3_client.get_object(f'{OBJECT_INFO_FOLDER}/{OBJECT_INFO_FILENAME}')
def get_last_fetch_datetime_file(self, file_key: str) -> str: def get_last_fetch_datetime_file(self, file_key: str) -> str:
return self.__s3_resource.get_object(f'{LAST_FETCH_DATE_FOLDER}/{file_key}') return self.__s3_client.get_object(f'{LAST_FETCH_DATE_FOLDER}/{file_key}')
def put_last_fetch_datetime_file(self, file_key: str, local_file_path: str) -> None: def put_last_fetch_datetime_file(self, file_key: str, local_file_path: str) -> None:
self.__s3_resource.put_object( self.__s3_client.put_object(
f'{LAST_FETCH_DATE_FOLDER}/{file_key}', local_file_path) f'{LAST_FETCH_DATE_FOLDER}/{file_key}', local_file_path)
return return
class DataBucket: class DataBucket:
__s3_resource: S3Resource = None __s3_client: S3Client = None
def __init__(self) -> None: def __init__(self) -> None:
self.__s3_resource = S3Resource(IMPORT_DATA_BUCKET) self.__s3_client = S3Client(IMPORT_DATA_BUCKET)
def __str__(self) -> str: def __str__(self) -> str:
return IMPORT_DATA_BUCKET return IMPORT_DATA_BUCKET
def put_csv(self, file_key: str, local_file_path: str) -> None: def put_csv(self, file_key: str, local_file_path: str) -> None:
object_key = f'{CRM_IMPORT_DATA_FOLDER}/{file_key}' object_key = f'{CRM_IMPORT_DATA_FOLDER}/{file_key}'
self.__s3_resource.put_object(object_key, local_file_path) self.__s3_client.put_object(object_key, local_file_path)
return return
def put_csv_from(self, src_bucket: str, src_key: str): def put_csv_from(self, src_bucket: str, src_key: str):
dest_filename = src_key.split('/')[-1] dest_filename = src_key.split('/')[-1]
self.__s3_resource.copy(src_bucket, src_key, str(self), f'{CRM_IMPORT_DATA_FOLDER}/{dest_filename}') self.__s3_client.copy(src_bucket, src_key, str(self), f'{CRM_IMPORT_DATA_FOLDER}/{dest_filename}')
return return
class BackupBucket: class BackupBucket:
__s3_resource: S3Resource = None __s3_client: S3Client = None
def __init__(self) -> None: def __init__(self) -> None:
self.__s3_resource = S3Resource(CRM_BACKUP_BUCKET) self.__s3_client = S3Client(CRM_BACKUP_BUCKET)
def __str__(self) -> str: def __str__(self) -> str:
return CRM_BACKUP_BUCKET return CRM_BACKUP_BUCKET
def put_response_json(self, file_key: str, local_file_path: str) -> None: def put_response_json(self, file_key: str, local_file_path: str) -> None:
object_key = f'{RESPONSE_JSON_BACKUP_FOLDER}/{file_key}' object_key = f'{RESPONSE_JSON_BACKUP_FOLDER}/{file_key}'
self.__s3_resource.put_object(object_key, local_file_path) self.__s3_client.put_object(object_key, local_file_path)
return return
def put_csv(self, file_key: str, local_file_path: str) -> None: def put_csv(self, file_key: str, local_file_path: str) -> None:
object_key = f'{CRM_IMPORT_DATA_BACKUP_FOLDER}/{file_key}' object_key = f'{CRM_IMPORT_DATA_BACKUP_FOLDER}/{file_key}'
self.__s3_resource.put_object(object_key, local_file_path) self.__s3_client.put_object(object_key, local_file_path)
return return
def put_result_json(self, file_key: str, local_file_path: str) -> None: def put_result_json(self, file_key: str, local_file_path: str) -> None:
object_key = f'{PROCESS_RESULT_FOLDER}/{file_key}' object_key = f'{PROCESS_RESULT_FOLDER}/{file_key}'
self.__s3_resource.put_object(object_key, local_file_path) self.__s3_client.put_object(object_key, local_file_path)
return return

View File

@ -4,7 +4,6 @@ import sys
from datetime import datetime from datetime import datetime
import boto3 import boto3
from common import convert_quotechar, debug_log from common import convert_quotechar, debug_log
from end import end from end import end
from error import error from error import error
@ -41,7 +40,7 @@ LINE_FEED_CODE = {
} }
# クラス変数 # クラス変数
s3_resource = boto3.resource('s3') s3_client = boto3.client('s3')
# チェック例外クラス # チェック例外クラス
@ -74,16 +73,14 @@ def check(bucket_name, target_data_source, target_file_name, settings_key, log_i
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-CHK-01 - チェック処理を開始します') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-CHK-01 - チェック処理を開始します')
# データ読込 # データ読込
settings_obj = s3_resource.Object(bucket_name, settings_key) settings_obj_response = s3_client.get_object(Bucket=bucket_name, Key=settings_key)
settings_response = settings_obj.get()
settings_list = [] settings_list = []
for line in io.TextIOWrapper(io.BytesIO(settings_response["Body"].read()), encoding='utf-8'): for line in io.TextIOWrapper(io.BytesIO(settings_obj_response["Body"].read()), encoding='utf-8'):
settings_list.append(line.rstrip('\n')) settings_list.append(line.rstrip('\n'))
work_key = target_data_source + DIRECTORY_WORK + target_file_name work_key = target_data_source + DIRECTORY_WORK + target_file_name
work_obj = s3_resource.Object(bucket_name, work_key) work_obj_response = s3_client.get_object(Bucket=bucket_name, Key=work_key)
work_response = work_obj.get() work_data = io.TextIOWrapper(io.BytesIO(work_obj_response["Body"].read()), encoding=settings_list[SETTINGS_ITEM["charCode"]], newline=LINE_FEED_CODE[settings_list[SETTINGS_ITEM["lineFeedCode"]]])
work_data = io.TextIOWrapper(io.BytesIO(work_response["Body"].read()), encoding=settings_list[SETTINGS_ITEM["charCode"]], newline=LINE_FEED_CODE[settings_list[SETTINGS_ITEM["lineFeedCode"]]])
work_csv_row = [] work_csv_row = []
for i, line in enumerate(csv.reader(work_data, quotechar=convert_quotechar(settings_list[SETTINGS_ITEM["quotechar"]]), delimiter=settings_list[SETTINGS_ITEM["delimiter"]])): for i, line in enumerate(csv.reader(work_data, quotechar=convert_quotechar(settings_list[SETTINGS_ITEM["quotechar"]]), delimiter=settings_list[SETTINGS_ITEM["delimiter"]])):
# ヘッダあり、かつ、1行目の場合 # ヘッダあり、かつ、1行目の場合
@ -148,3 +145,16 @@ def is_empty_file(work_csv_row: list, settings_list: list):
return len(work_csv_row[1:]) == 0 return len(work_csv_row[1:]) == 0
return len(work_csv_row) == 0 return len(work_csv_row) == 0
# ローカル実行用コード
# 値はよしなに変えてください
# if __name__ == '__main__':
# check(
# bucket_name='バケット名',
# target_data_source='データソース名',
# target_file_name='targetフォルダ内のファイル名',
# settings_key='個別設定ファイル名',
# log_info='Info',
# mode='i'
# )

View File

@ -1,7 +1,8 @@
from datetime import datetime from datetime import datetime
import boto3 import boto3
from error import error
from common import debug_log from common import debug_log
from error import error
# 定数 # 定数
LOG_LEVEL = {'i': 'Info', 'e': 'Error'} LOG_LEVEL = {'i': 'Info', 'e': 'Error'}
@ -12,7 +13,6 @@ DIRECTORY_WARNING = '/warning/'
# クラス変数 # クラス変数
s3_client = boto3.client('s3') s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
def end(bucket_name, target_data_source, target_file_name, warning_info, log_info, mode): def end(bucket_name, target_data_source, target_file_name, warning_info, log_info, mode):
@ -45,8 +45,7 @@ def end(bucket_name, target_data_source, target_file_name, warning_info, log_inf
} }
done_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{target_file_name}' done_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{target_file_name}'
done_key = target_data_source + DIRECTORY_DONE + done_file_name done_key = target_data_source + DIRECTORY_DONE + done_file_name
done_obj = s3_resource.Object(bucket_name, done_key) s3_client.copy(CopySource=copy_source, Bucket=bucket_name, Key=done_key)
done_obj.copy(copy_source)
s3_client.delete_object(Bucket=bucket_name, Key=work_key) s3_client.delete_object(Bucket=bucket_name, Key=work_key)
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-02 - workディレクトリの {target_file_name} をdoneディレクトリに移動しました 移動後ファイル名:{done_file_name}') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-02 - workディレクトリの {target_file_name} をdoneディレクトリに移動しました 移動後ファイル名:{done_file_name}')
@ -64,23 +63,20 @@ def end(bucket_name, target_data_source, target_file_name, warning_info, log_inf
# warningファイルの作成 # warningファイルの作成
warning_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{target_file_name}_war.log' warning_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{target_file_name}_war.log'
warning_key = target_data_source + DIRECTORY_WARNING + warning_file_name warning_key = target_data_source + DIRECTORY_WARNING + warning_file_name
warning_obj = s3_resource.Object(bucket_name, warning_key) s3_client.put_object(Bucket=bucket_name, Key=warning_key, Body=bytes(warning_info, 'utf-8'))
warning_obj.put(Body=warning_info)
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-06 - warningディレクトリに {warning_file_name} を作成しました') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-06 - warningディレクトリに {warning_file_name} を作成しました')
# warning処理結果ファイルの作成 # warning処理結果ファイルの作成
result_warning_file_name = target_file_name + '.warning' result_warning_file_name = target_file_name + '.warning'
result_warning_key = target_data_source + DIRECTORY_TARGET + result_warning_file_name result_warning_key = target_data_source + DIRECTORY_TARGET + result_warning_file_name
result_warning_obj = s3_resource.Object(bucket_name, result_warning_key) s3_client.put_object(Bucket=bucket_name, Key=result_warning_key, Body=b'')
result_warning_obj.put(Body='')
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-07 - targetディレクトリに {result_warning_file_name} を作成しました') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-07 - targetディレクトリに {result_warning_file_name} を作成しました')
else: else:
# done処理結果ファイルの作成 # done処理結果ファイルの作成
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-08 - Warning情報は存在しませんでした') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-08 - Warning情報は存在しませんでした')
result_done_file_name = target_file_name + '.done' result_done_file_name = target_file_name + '.done'
result_done_key = target_data_source + DIRECTORY_TARGET + result_done_file_name result_done_key = target_data_source + DIRECTORY_TARGET + result_done_file_name
result_done_obj = s3_resource.Object(bucket_name, result_done_key) s3_client.put_object(Bucket=bucket_name, Key=result_done_key, Body=b'')
result_done_obj.put(Body='')
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-09 - targetディレクトリに {result_done_file_name} を作成しました') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-09 - targetディレクトリに {result_done_file_name} を作成しました')
# ⑤ 終了処理終了ログを出力する # ⑤ 終了処理終了ログを出力する
@ -88,3 +84,17 @@ def end(bucket_name, target_data_source, target_file_name, warning_info, log_inf
except Exception as e: except Exception as e:
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-END-99 - エラー内容:{e}') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-END-99 - エラー内容:{e}')
error(bucket_name, target_data_source, target_file_name, log_info) error(bucket_name, target_data_source, target_file_name, log_info)
# ローカル実行用コード
# 値はよしなに変えてください
# if __name__ == '__main__':
# end(
# bucket_name='バケット名',
# target_data_source='データソース名',
# target_file_name='targetフォルダ内のファイル',
# # warning_info='ワーニング内容', # ワーニングがある場合のテストはこちらを生かす
# warning_info='',
# log_info='Info',
# mode='i'
# )

View File

@ -1,6 +1,7 @@
from datetime import datetime
import boto3
import sys import sys
from datetime import datetime
import boto3
# 定数 # 定数
LOG_LEVEL = {'i': 'Info', 'e': 'Error'} LOG_LEVEL = {'i': 'Info', 'e': 'Error'}
@ -10,7 +11,6 @@ DIRECTORY_ERROR = '/error/'
# クラス変数 # クラス変数
s3_client = boto3.client('s3') s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
def error(bucket_name, target_data_source, target_file_name, log_info): def error(bucket_name, target_data_source, target_file_name, log_info):
@ -34,8 +34,7 @@ def error(bucket_name, target_data_source, target_file_name, log_info):
} }
error_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{target_file_name}' error_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{target_file_name}'
error_key = target_data_source + DIRECTORY_ERROR + error_file_name error_key = target_data_source + DIRECTORY_ERROR + error_file_name
error_obj = s3_resource.Object(bucket_name, error_key) s3_client.copy(CopySource=copy_source, Bucket=bucket_name, Key=error_key)
error_obj.copy(copy_source)
s3_client.delete_object(Bucket=bucket_name, Key=work_key) s3_client.delete_object(Bucket=bucket_name, Key=work_key)
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-02 - workディレクトリの {target_file_name} をerrorディレクトリに移動しました 移動後ファイル名:{error_file_name}') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-02 - workディレクトリの {target_file_name} をerrorディレクトリに移動しました 移動後ファイル名:{error_file_name}')
@ -48,8 +47,7 @@ def error(bucket_name, target_data_source, target_file_name, log_info):
# ④ S3バケット内のtargetディレクトリに、「投入データファイル名.error」ファイルを作成する # ④ S3バケット内のtargetディレクトリに、「投入データファイル名.error」ファイルを作成する
result_error_file_name = target_file_name + '.error' result_error_file_name = target_file_name + '.error'
result_error_key = target_data_source + DIRECTORY_TARGET + result_error_file_name result_error_key = target_data_source + DIRECTORY_TARGET + result_error_file_name
result_error_obj = s3_resource.Object(bucket_name, result_error_key) s3_client.put_object(Bucket=bucket_name, Key=result_error_key, Body=b'')
result_error_obj.put(Body='')
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-04 - targetディレクトリに {result_error_file_name} を作成しました') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-04 - targetディレクトリに {result_error_file_name} を作成しました')
except Exception as e: except Exception as e:
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-ERR-99 - エラー内容:{e}') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-ERR-99 - エラー内容:{e}')
@ -81,16 +79,14 @@ def error_doing_file_exists(bucket_name, target_key, target_data_source, target_
} }
error_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{target_file_name}' error_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{target_file_name}'
error_key = target_data_source + DIRECTORY_ERROR + error_file_name error_key = target_data_source + DIRECTORY_ERROR + error_file_name
error_obj = s3_resource.Object(bucket_name, error_key) s3_client.copy(CopySource=copy_source, Bucket=bucket_name, Key=error_key)
error_obj.copy(copy_source)
s3_client.delete_object(Bucket=bucket_name, Key=target_key) s3_client.delete_object(Bucket=bucket_name, Key=target_key)
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-07 - targetディレクトリの {target_file_name} をerrorディレクトリに移動しました 移動後ファイル名:{error_file_name}') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-07 - targetディレクトリの {target_file_name} をerrorディレクトリに移動しました 移動後ファイル名:{error_file_name}')
# ③ S3バケット内のtargetディレクトリに、「投入データファイル名.exclusive_error」ファイルを作成する # ③ S3バケット内のtargetディレクトリに、「投入データファイル名.exclusive_error」ファイルを作成する
result_error_file_name = target_file_name + '.exclusive_error' result_error_file_name = target_file_name + '.exclusive_error'
result_error_key = target_data_source + DIRECTORY_TARGET + result_error_file_name result_error_key = target_data_source + DIRECTORY_TARGET + result_error_file_name
result_error_obj = s3_resource.Object(bucket_name, result_error_key) s3_client.put_object(Bucket=bucket_name, Key=result_error_key, Body=b'')
result_error_obj.put(Body='')
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-08 - targetディレクトリに {result_error_file_name} を作成しました') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-08 - targetディレクトリに {result_error_file_name} を作成しました')
except Exception as e: except Exception as e:
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-ERR-99 - エラー内容:{e}') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-ERR-99 - エラー内容:{e}')
@ -99,4 +95,25 @@ def error_doing_file_exists(bucket_name, target_key, target_data_source, target_
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-09 - doingファイルが存在した時のエラー処理を終了します') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-09 - doingファイルが存在した時のエラー処理を終了します')
# ⑤ 処理を終了する # ⑤ 処理を終了する
sys.exit() sys.exit()
# ローカル実行用コード
# 値はよしなに変えてください
# if __name__ == '__main__':
# エラー処理
# error(
# bucket_name='バケット名',
# target_data_source='データソース名',
# target_file_name='データソース名/target/ファイル名',
# log_info='Info'
# )
# doingファイルの有無チェック関数
# error_doing_file_exists(
# bucket_name='バケット名',
# target_key='投入データのフルパス',
# target_data_source='投入データのディレクトリ名よりデータソースに該当する部分',
# target_file_name='投入データのファイル名',
# log_info='Info'
# )

View File

@ -1,12 +1,12 @@
from datetime import datetime
import boto3
import io
import csv import csv
import io
import re import re
import sys import sys
from error import error from datetime import datetime
from error import error_doing_file_exists
import boto3
from common import debug_log from common import debug_log
from error import error, error_doing_file_exists
# 定数 # 定数
LOG_LEVEL = {"i": 'Info', "e": 'Error'} LOG_LEVEL = {"i": 'Info', "e": 'Error'}
@ -17,7 +17,6 @@ DIRECTORY_SETTINGS = '/settings/'
# クラス変数 # クラス変数
s3_client = boto3.client('s3') s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
def init(bucket_name, target_key, target_data_source, target_file_name, log_info, mode): def init(bucket_name, target_key, target_data_source, target_file_name, log_info, mode):
@ -60,8 +59,7 @@ def init(bucket_name, target_key, target_data_source, target_file_name, log_info
try: try:
# ③ S3バケット内のtargetディレクトリに、「投入データファイル名.doing」ファイルを作成する # ③ S3バケット内のtargetディレクトリに、「投入データファイル名.doing」ファイルを作成する
doing_obj = s3_resource.Object(bucket_name, doing_key) s3_client.put_object(Bucket=bucket_name, Key=doing_key, Body=b'')
doing_obj.put(Body='')
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-INI-04 - targetディレクトリに {doing_file_name} を作成しました') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-INI-04 - targetディレクトリに {doing_file_name} を作成しました')
# ④ 投入データファイルをS3バケット内のtargetディレクトリから、workディレクトリに移動(コピー削除)する # ④ 投入データファイルをS3バケット内のtargetディレクトリから、workディレクトリに移動(コピー削除)する
@ -70,8 +68,7 @@ def init(bucket_name, target_key, target_data_source, target_file_name, log_info
'Key': target_key 'Key': target_key
} }
work_key = target_data_source + DIRECTORY_WORK + target_file_name work_key = target_data_source + DIRECTORY_WORK + target_file_name
work_obj = s3_resource.Object(bucket_name, work_key) s3_client.copy(CopySource=copy_source, Bucket=bucket_name, Key=work_key)
work_obj.copy(copy_source)
s3_client.delete_object(Bucket=bucket_name, Key=target_key) s3_client.delete_object(Bucket=bucket_name, Key=target_key)
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-INI-05 - 投入データ {target_file_name} をworkディレクトリに移動しました') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-INI-05 - 投入データ {target_file_name} をworkディレクトリに移動しました')
except Exception as e: except Exception as e:
@ -122,9 +119,8 @@ def init(bucket_name, target_key, target_data_source, target_file_name, log_info
try: try:
# ⑦ 個別設定ファイルを特定する # ⑦ 個別設定ファイルを特定する
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-INI-17 - 個別設定ファイルを検索します') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-INI-17 - 個別設定ファイルを検索します')
mapping_obj = s3_resource.Object(bucket_name, mapping_key) mapping_obj_response = s3_client.get_object(Bucket=bucket_name, Key=mapping_key)
mapping_response = mapping_obj.get() mapping_body = io.TextIOWrapper(io.BytesIO(mapping_obj_response["Body"].read()), encoding='utf-8')
mapping_body = io.TextIOWrapper(io.BytesIO(mapping_response["Body"].read()), encoding='utf-8')
settings_file_name = '' settings_file_name = ''
for row in csv.reader(mapping_body, delimiter='\t'): for row in csv.reader(mapping_body, delimiter='\t'):
if row: if row:
@ -159,3 +155,15 @@ def init(bucket_name, target_key, target_data_source, target_file_name, log_info
except Exception as e: except Exception as e:
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-INI-99 - エラー内容:{e}') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-INI-99 - エラー内容:{e}')
error(bucket_name, target_data_source, target_file_name, log_info) error(bucket_name, target_data_source, target_file_name, log_info)
# ローカル実行用コード
# 値はよしなに変えてください
# if __name__ == '__main__':
# init(
# bucket_name='バケット名',
# target_key='データソース名/target/ファイル名',
# target_data_source='データソース名',
# target_file_name='ファイル名',
# log_info='Info',
# mode='i'
# )

View File

@ -5,10 +5,9 @@ from datetime import datetime
import boto3 import boto3
import pymysql import pymysql
from pymysql.constants import CLIENT
from common import convert_quotechar, debug_log from common import convert_quotechar, debug_log
from error import error from error import error
from pymysql.constants import CLIENT
# 定数 # 定数
DIRECTORY_WORK = '/work/' DIRECTORY_WORK = '/work/'
@ -47,7 +46,6 @@ INVALID_CONFIG_EXCEPTION_MESSAGE = f'個別設定ファイルのインポート
# クラス変数 # クラス変数
s3_client = boto3.client('s3') s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
def main(bucket_name, target_data_source, target_file_name, settings_key, db_info, log_info, mode): def main(bucket_name, target_data_source, target_file_name, settings_key, db_info, log_info, mode):
@ -91,8 +89,7 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf
# ④ 個別設定ファイルのロードスキーマのテーブル名に記載されているテーブルをTRUNCATEする # ④ 個別設定ファイルのロードスキーマのテーブル名に記載されているテーブルをTRUNCATEする
# 個別設定ファイルの読み込み # 個別設定ファイルの読み込み
settings_obj = s3_resource.Object(bucket_name, settings_key) settings_response = s3_client.get_object(Bucket=bucket_name, Key=settings_key)
settings_response = settings_obj.get()
settings_list = [] settings_list = []
for line in io.TextIOWrapper(io.BytesIO(settings_response["Body"].read()), encoding='utf-8'): for line in io.TextIOWrapper(io.BytesIO(settings_response["Body"].read()), encoding='utf-8'):
settings_list.append(line.rstrip('\n')) settings_list.append(line.rstrip('\n'))
@ -110,8 +107,7 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf
# ⑤ 投入データファイルを1行ごとにループする # ⑤ 投入データファイルを1行ごとにループする
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-MAIN-05 - 投入データ {target_file_name} の読み込みを開始します') print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-MAIN-05 - 投入データ {target_file_name} の読み込みを開始します')
work_key = target_data_source + DIRECTORY_WORK + target_file_name work_key = target_data_source + DIRECTORY_WORK + target_file_name
work_obj = s3_resource.Object(bucket_name, work_key) work_response = s3_client.get_object(Bucket=bucket_name, Key=work_key)
work_response = work_obj.get()
work_data = io.TextIOWrapper(io.BytesIO(work_response["Body"].read()), encoding=settings_list[SETTINGS_ITEM["charCode"]], newline=LINE_FEED_CODE[settings_list[SETTINGS_ITEM["lineFeedCode"]]]) work_data = io.TextIOWrapper(io.BytesIO(work_response["Body"].read()), encoding=settings_list[SETTINGS_ITEM["charCode"]], newline=LINE_FEED_CODE[settings_list[SETTINGS_ITEM["lineFeedCode"]]])
process_count = 0 # 処理件数カウンタ process_count = 0 # 処理件数カウンタ
@ -261,10 +257,9 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf
try: try:
if ex_sql_file_exists: if ex_sql_file_exists:
# 拡張SQLファイルからSQL文生成 # 拡張SQLファイルからSQL文生成
ex_sqls_obj = s3_resource.Object(bucket_name, ex_sql_key) ex_sql_obj_response = s3_client.get_object(Bucket=bucket_name, Key=ex_sql_key)
ex_sql_response = ex_sqls_obj.get()
ex_sql = '' ex_sql = ''
for line in io.TextIOWrapper(io.BytesIO(ex_sql_response["Body"].read()), encoding='utf-8'): for line in io.TextIOWrapper(io.BytesIO(ex_sql_obj_response["Body"].read()), encoding='utf-8'):
ex_sql = f'{ex_sql} {line.rstrip()}' ex_sql = f'{ex_sql} {line.rstrip()}'
# トランザクション開始 # トランザクション開始
@ -358,3 +353,18 @@ def truncate_judge(settings_list):
class InvalidConfigException(Exception): class InvalidConfigException(Exception):
pass pass
# ローカル実行用コード
# 値はよしなに変えてください
# if __name__ == '__main__':
# DB_INFO = {"host": '127.0.0.1', "name": 'org02', "pass": 'user', "user": 'user'}
# main(
# bucket_name='バケット名',
# target_data_source='投入データのディレクトリ名よりデータソースに該当する部分',
# target_file_name='投入データのファイル名',
# settings_key='投入データに該当する個別設定ファイルのフルパス',
# db_info=DB_INFO,
# log_info='info',
# mode='i'
# )

View File

@ -6,12 +6,11 @@ from constants import AWS_RESOURCE_S3, S3_RESPONSE_BODY, UTF8
class S3Resource: class S3Resource:
def __init__(self, bucket_name: str) -> None: def __init__(self, bucket_name: str) -> None:
self.__s3_resource = boto3.resource(AWS_RESOURCE_S3) self.__s3_client = boto3.client(AWS_RESOURCE_S3)
self.__s3_bucket = self.__s3_resource.Bucket(bucket_name) self.__s3_bucket = bucket_name
def get_object(self, object_key: str): def get_object(self, object_key: str):
s3_object = self.__s3_bucket.Object(object_key) response = self.__s3_client.get_object(Bucket=self.__s3_bucket, Key=object_key)
response = s3_object.get()
return response[S3_RESPONSE_BODY].read().decode(UTF8) return response[S3_RESPONSE_BODY].read().decode(UTF8)

View File

@ -37,7 +37,6 @@ TARGET_BUCKET_BY_DATA_SOURCE = {
# 変数 # 変数
s3_client = boto3.client('s3') s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
sns_client = boto3.client('sns') sns_client = boto3.client('sns')
# logger設定 # logger設定
@ -125,9 +124,8 @@ def handler(event, context):
decrypt_file_key = f'{execute_date}/{decrypt_file_name}' decrypt_file_key = f'{execute_date}/{decrypt_file_name}'
decrypt_bucket_name = TARGET_BUCKET_BY_DATA_SOURCE[s3_event.data_source_name] decrypt_bucket_name = TARGET_BUCKET_BY_DATA_SOURCE[s3_event.data_source_name]
logger.info(f'I-07-02 復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{decrypt_bucket_name}/{decrypt_file_key}') logger.info(f'I-07-02 復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{decrypt_bucket_name}/{decrypt_file_key}')
decrypt_file_obj = s3_resource.Object(decrypt_bucket_name, decrypt_file_key) s3_client.put_object(Bucket=decrypt_bucket_name, Key=decrypt_file_key, Body=decrypt_file)
decrypt_file_obj.put(Body=decrypt_file) decrypt_file.close()
decrypt_file.close
logger.info('I-07-03 復号化ファイルをS3に出力しました') logger.info('I-07-03 復号化ファイルをS3に出力しました')
except Exception as e: except Exception as e:
logger.exception(f'E-07-01 復号化ファイルのS3出力に失敗しました エラー内容{e}') logger.exception(f'E-07-01 復号化ファイルのS3出力に失敗しました エラー内容{e}')
@ -142,8 +140,7 @@ def handler(event, context):
backup_file_key = f'{s3_event.data_source_name}/{execute_date}/{s3_event.file_name}' backup_file_key = f'{s3_event.data_source_name}/{execute_date}/{s3_event.file_name}'
logger.info( logger.info(
f'I-07-04 PGP暗号化ファイル移動 移動元{s3_event.bucket_name}/{s3_event.file_path} 移動先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') f'I-07-04 PGP暗号化ファイル移動 移動元{s3_event.bucket_name}/{s3_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) s3_client.copy_object(Bucket=SAP_DATA_BACKUP_BUCKET_NAME, Key=backup_file_key, CopySource=copy_source)
backup_file_obj.copy(copy_source)
s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path) s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path)
logger.info('I-07-05 PGP暗号化ファイルをバックアップ用バケットに移動しました') logger.info('I-07-05 PGP暗号化ファイルをバックアップ用バケットに移動しました')
except Exception as e: except Exception as e:
@ -158,8 +155,7 @@ def handler(event, context):
import_file_folder = f'{s3_event.data_source_name}{DIRECTORY_TARGET}' import_file_folder = f'{s3_event.data_source_name}{DIRECTORY_TARGET}'
import_file_key = f'{import_file_folder}{decrypt_file_name}' import_file_key = f'{import_file_folder}{decrypt_file_name}'
logger.info(f'I-07-06 復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{s3_event.bucket_name}/{import_file_folder}') logger.info(f'I-07-06 復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{s3_event.bucket_name}/{import_file_folder}')
import_file_obj = s3_resource.Object(s3_event.bucket_name, import_file_key) s3_client.copy_object(Bucket=s3_event.bucket_name, Key=import_file_key, CopySource=copy_source)
import_file_obj.copy(copy_source)
logger.info(f'I-07-07 復号化ファイルをS3に出力しました') logger.info(f'I-07-07 復号化ファイルをS3に出力しました')
except Exception as e: except Exception as e:
logger.exception(f'E-07-03 復号化ファイルのS3出力に失敗しました エラー内容{e}') logger.exception(f'E-07-03 復号化ファイルのS3出力に失敗しました エラー内容{e}')
@ -186,8 +182,7 @@ def create_status_file(s3_event, extension) -> None:
try: try:
result_error_file_name = s3_event.file_name + extension result_error_file_name = s3_event.file_name + extension
result_error_key = s3_event.data_source_name + DIRECTORY_RECV + result_error_file_name result_error_key = s3_event.data_source_name + DIRECTORY_RECV + result_error_file_name
result_error_obj = s3_resource.Object(s3_event.bucket_name, result_error_key) s3_client.put_object(Bucket=s3_event.bucket_name, Key=result_error_key, Body='')
result_error_obj.put(Body='')
logger.error( logger.error(
f'E-ERR-01 recvディレクトリにエラーファイルを作成しました ファイル名{result_error_file_name} 出力先:{s3_event.bucket_name}/{result_error_key}') f'E-ERR-01 recvディレクトリにエラーファイルを作成しました ファイル名{result_error_file_name} 出力先:{s3_event.bucket_name}/{result_error_key}')
except Exception as e: except Exception as e:
@ -204,8 +199,7 @@ def move_encrypt_file(s3_event) -> None:
} }
error_file_name = f'{datetime.datetime.now():%Y%m%d%H%M%S}_{s3_event.file_name}' error_file_name = f'{datetime.datetime.now():%Y%m%d%H%M%S}_{s3_event.file_name}'
error_key = s3_event.data_source_name + DIRECTORY_RECV_ERROR + error_file_name error_key = s3_event.data_source_name + DIRECTORY_RECV_ERROR + error_file_name
error_obj = s3_resource.Object(s3_event.bucket_name, error_key) s3_client.copy_object(Bucket=s3_event.bucket_name, Key=error_key, CopySource=copy_source)
error_obj.copy(copy_source)
s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path) s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path)
logger.error( logger.error(
f'E-ERR-02 recv_errorディレクトリにファイルを移動しました 移動元{s3_event.bucket_name}/{s3_event.file_path} 移動先:{s3_event.bucket_name}/{error_key}') f'E-ERR-02 recv_errorディレクトリにファイルを移動しました 移動元{s3_event.bucket_name}/{s3_event.file_path} 移動先:{s3_event.bucket_name}/{error_key}')

View File

@ -28,7 +28,6 @@ MAIL_INDENT = '  '
# 変数 # 変数
s3_client = boto3.client('s3') s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
sns_client = boto3.client('sns') sns_client = boto3.client('sns')
# logger設定 # logger設定
@ -69,8 +68,7 @@ def lambda_handler(event, context):
# ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル月次]を読み込む # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル月次]を読み込む
try: try:
logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}')
receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) receive_monthly_file_name_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=RECEIVE_MONTHLY_FILE_NAME_LIST_PATH)
receive_monthly_file_name_response = receive_monthly_file_name_obj.get()
logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました') logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました')
except Exception as e: except Exception as e:
logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容{e}') logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容{e}')

View File

@ -34,7 +34,6 @@ MAIL_INDENT = '  '
# 変数 # 変数
s3_client = boto3.client('s3') s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
sns_client = boto3.client('sns') sns_client = boto3.client('sns')
# logger設定 # logger設定
@ -69,8 +68,7 @@ def lambda_handler(event, context):
# 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む # 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む
try: try:
logger.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') logger.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}')
non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) non_business_day_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NON_BUSINESS_DAY_LIST_PATH)
non_business_day_response = non_business_day_obj.get()
logger.info('I-02-03 非営業日設定ファイルを読み込みました') logger.info('I-02-03 非営業日設定ファイルを読み込みました')
except Exception as e: except Exception as e:
logger.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') logger.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}')
@ -102,8 +100,7 @@ def lambda_handler(event, context):
# ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル日次]を読み込む # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル日次]を読み込む
try: try:
logger.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') logger.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}')
receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) receive_daily_file_name_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=RECEIVE_DAILY_FILE_NAME_LIST_PATH)
receive_daily_file_name_response = receive_daily_file_name_obj.get()
logger.info('I-03-02 日次I/Fファイルネーム設定ファイルを読み込みました') logger.info('I-03-02 日次I/Fファイルネーム設定ファイルを読み込みました')
except Exception as e: except Exception as e:
logger.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容{e}') logger.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容{e}')
@ -115,10 +112,10 @@ def lambda_handler(event, context):
# 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する
logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/')
object_prefix = f'{execute_date}/' object_prefix = f'{execute_date}/'
object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) object_list = s3_client.list_objects_v2(Bucket=CHECK_BUCKET_NAME, Prefix=object_prefix)
file_list = [] file_list = []
for obj in object_list: for obj in object_list.get('Contents', []):
obj_key = obj.key.rsplit('/', INDEX_SPLIT_NUM) obj_key = obj['Key'].rsplit('/', INDEX_SPLIT_NUM)
file_list.append(obj_key[INDEX_LAST]) file_list.append(obj_key[INDEX_LAST])
# 2.日次I/Fファイルチェック処理 # 2.日次I/Fファイルチェック処理
@ -126,7 +123,8 @@ def lambda_handler(event, context):
logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します')
receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8')
match_count = 0 match_count = 0
row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_obj.get()["Body"].read())) receive_daily_file_name_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=RECEIVE_DAILY_FILE_NAME_LIST_PATH)
row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_response["Body"].read()))
for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): for row in csv.reader(receive_daily_file_name_body, delimiter='\t'):
file_exists = False file_exists = False
for file_name in file_list: for file_name in file_list:

View File

@ -34,7 +34,6 @@ MAIL_INDENT = '  '
# 変数 # 変数
s3_client = boto3.client('s3') s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
sns_client = boto3.client('sns') sns_client = boto3.client('sns')
# logger設定 # logger設定
@ -71,8 +70,8 @@ def lambda_handler(event, context):
# 1.設定ファイル[チェック処理実施指定日ファイル]を読み込む # 1.設定ファイル[チェック処理実施指定日ファイル]を読み込む
try: try:
logger.info(f'I-02-02 チェック処理実施指定日ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{MONTHLY_CEHCK_DAY_LIST_PATH}') logger.info(f'I-02-02 チェック処理実施指定日ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{MONTHLY_CEHCK_DAY_LIST_PATH}')
monthly_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, MONTHLY_CEHCK_DAY_LIST_PATH) monthly_day_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=MONTHLY_CEHCK_DAY_LIST_PATH)
monthly_day_response = monthly_day_obj.get()
logger.info('I-02-03 チェック処理実施指定日ファイルを読み込みました') logger.info('I-02-03 チェック処理実施指定日ファイルを読み込みました')
except Exception as e: except Exception as e:
logger.error(f'E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました エラー内容:{e}') logger.error(f'E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました エラー内容:{e}')
@ -104,8 +103,8 @@ def lambda_handler(event, context):
# ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル月次]を読み込む # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル月次]を読み込む
try: try:
logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}')
receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) receive_monthly_file_name_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=RECEIVE_MONTHLY_FILE_NAME_LIST_PATH)
receive_monthly_file_name_response = receive_monthly_file_name_obj.get()
logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました') logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました')
except Exception as e: except Exception as e:
logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容{e}') logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容{e}')
@ -117,10 +116,10 @@ def lambda_handler(event, context):
# 1.SAP保管用バケットの処理稼働月に該当するサブフォルダにあるファイル一覧を取得する # 1.SAP保管用バケットの処理稼働月に該当するサブフォルダにあるファイル一覧を取得する
logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_month}/') logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_month}/')
object_prefix = f'{execute_month}/' object_prefix = f'{execute_month}/'
object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) object_list = s3_client.list_objects_v2(Bucket=CHECK_BUCKET_NAME, Prefix=object_prefix)
file_list = [] file_list = []
for obj in object_list: for obj in object_list.get('Contents', []):
obj_key = obj.key.rsplit('/', INDEX_SPLIT_NUM) obj_key = obj['Key'].rsplit('/', INDEX_SPLIT_NUM)
file_list.append(obj_key[INDEX_LAST]) file_list.append(obj_key[INDEX_LAST])
# 2.月次I/Fファイルチェック処理 # 2.月次I/Fファイルチェック処理
@ -128,7 +127,8 @@ def lambda_handler(event, context):
logger.info('I-04-04 取得したオブジェクトリストと月次I/Fファイルネーム設定ファイルの突き合わせを開始します') logger.info('I-04-04 取得したオブジェクトリストと月次I/Fファイルネーム設定ファイルの突き合わせを開始します')
receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8')
match_count = 0 match_count = 0
row_count = sum(1 for line in io.BytesIO(receive_monthly_file_name_obj.get()["Body"].read())) receive_monthly_file_name_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=RECEIVE_MONTHLY_FILE_NAME_LIST_PATH)
row_count = sum(1 for line in io.BytesIO(receive_monthly_file_name_response["Body"].read()))
for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'): for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'):
file_exists = False file_exists = False
for file_name in file_list: for file_name in file_list:

View File

@ -28,7 +28,6 @@ MAIL_INDENT = '  '
# 変数 # 変数
s3_client = boto3.client('s3') s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
sns_client = boto3.client('sns') sns_client = boto3.client('sns')
# logger設定 # logger設定
@ -69,8 +68,7 @@ def lambda_handler(event, context):
# ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル月次]を読み込む # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル月次]を読み込む
try: try:
logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}')
receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) receive_monthly_file_name_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=RECEIVE_MONTHLY_FILE_NAME_LIST_PATH)
receive_monthly_file_name_response = receive_monthly_file_name_obj.get()
logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました') logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました')
except Exception as e: except Exception as e:
logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容{e}') logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容{e}')

View File

@ -34,7 +34,6 @@ MAIL_INDENT = '  '
# 変数 # 変数
s3_client = boto3.client('s3') s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
sns_client = boto3.client('sns') sns_client = boto3.client('sns')
# logger設定 # logger設定
@ -69,8 +68,7 @@ def lambda_handler(event, context):
# 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む # 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む
try: try:
logger.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') logger.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}')
non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) non_business_day_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NON_BUSINESS_DAY_LIST_PATH)
non_business_day_response = non_business_day_obj.get()
logger.info('I-02-03 非営業日設定ファイルを読み込みました') logger.info('I-02-03 非営業日設定ファイルを読み込みました')
except Exception as e: except Exception as e:
logger.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') logger.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}')
@ -102,8 +100,7 @@ def lambda_handler(event, context):
# ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル日次]を読み込む # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル日次]を読み込む
try: try:
logger.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') logger.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}')
receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) receive_daily_file_name_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=RECEIVE_DAILY_FILE_NAME_LIST_PATH)
receive_daily_file_name_response = receive_daily_file_name_obj.get()
logger.info('I-03-02 日次I/Fファイルネーム設定ファイルを読み込みました') logger.info('I-03-02 日次I/Fファイルネーム設定ファイルを読み込みました')
except Exception as e: except Exception as e:
logger.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容{e}') logger.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容{e}')
@ -115,10 +112,10 @@ def lambda_handler(event, context):
# 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する
logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/')
object_prefix = f'{execute_date}/' object_prefix = f'{execute_date}/'
object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) object_list = s3_client.list_objects_v2(Bucket=CHECK_BUCKET_NAME, Prefix=object_prefix)
file_list = [] file_list = []
for obj in object_list: for obj in object_list.get('Contents', []):
obj_key = obj.key.rsplit('/', INDEX_SPLIT_NUM) obj_key = obj['Key'].rsplit('/', INDEX_SPLIT_NUM)
file_list.append(obj_key[INDEX_LAST]) file_list.append(obj_key[INDEX_LAST])
# 2.日次I/Fファイルチェック処理 # 2.日次I/Fファイルチェック処理
@ -126,7 +123,8 @@ def lambda_handler(event, context):
logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します')
receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8')
match_count = 0 match_count = 0
row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_obj.get()["Body"].read())) receive_daily_file_name_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=RECEIVE_DAILY_FILE_NAME_LIST_PATH)
row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_response["Body"].read()))
for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): for row in csv.reader(receive_daily_file_name_body, delimiter='\t'):
file_exists = False file_exists = False
for file_name in file_list: for file_name in file_list:

View File

@ -71,8 +71,7 @@ def lambda_handler(event, context):
# 1.設定ファイル[チェック処理実施指定日ファイル]を読み込む # 1.設定ファイル[チェック処理実施指定日ファイル]を読み込む
try: try:
logger.info(f'I-02-02 チェック処理実施指定日ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{MONTHLY_CEHCK_DAY_LIST_PATH}') logger.info(f'I-02-02 チェック処理実施指定日ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{MONTHLY_CEHCK_DAY_LIST_PATH}')
monthly_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, MONTHLY_CEHCK_DAY_LIST_PATH) monthly_day_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=MONTHLY_CEHCK_DAY_LIST_PATH)
monthly_day_response = monthly_day_obj.get()
logger.info('I-02-03 チェック処理実施指定日ファイルを読み込みました') logger.info('I-02-03 チェック処理実施指定日ファイルを読み込みました')
except Exception as e: except Exception as e:
logger.error(f'E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました エラー内容:{e}') logger.error(f'E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました エラー内容:{e}')
@ -104,8 +103,7 @@ def lambda_handler(event, context):
# ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル月次]を読み込む # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル月次]を読み込む
try: try:
logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}')
receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) receive_monthly_file_name_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=RECEIVE_MONTHLY_FILE_NAME_LIST_PATH)
receive_monthly_file_name_response = receive_monthly_file_name_obj.get()
logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました') logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました')
except Exception as e: except Exception as e:
logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容{e}') logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容{e}')
@ -117,10 +115,10 @@ def lambda_handler(event, context):
# 1.SAP保管用バケットの処理稼働月に該当するサブフォルダにあるファイル一覧を取得する # 1.SAP保管用バケットの処理稼働月に該当するサブフォルダにあるファイル一覧を取得する
logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_month}/') logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_month}/')
object_prefix = f'{execute_month}/' object_prefix = f'{execute_month}/'
object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) object_list = s3_client.list_objects_v2(Bucket=CHECK_BUCKET_NAME, Prefix=object_prefix)
file_list = [] file_list = []
for obj in object_list: for obj in object_list.get('Contents', []):
obj_key = obj.key.rsplit('/', INDEX_SPLIT_NUM) obj_key = obj['Key'].rsplit('/', INDEX_SPLIT_NUM)
file_list.append(obj_key[INDEX_LAST]) file_list.append(obj_key[INDEX_LAST])
# 2.月次I/Fファイルチェック処理 # 2.月次I/Fファイルチェック処理
@ -128,7 +126,8 @@ def lambda_handler(event, context):
logger.info('I-04-04 取得したオブジェクトリストと月次I/Fファイルネーム設定ファイルの突き合わせを開始します') logger.info('I-04-04 取得したオブジェクトリストと月次I/Fファイルネーム設定ファイルの突き合わせを開始します')
receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8')
match_count = 0 match_count = 0
row_count = sum(1 for line in io.BytesIO(receive_monthly_file_name_obj.get()["Body"].read())) receive_monthly_file_name_response = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=RECEIVE_MONTHLY_FILE_NAME_LIST_PATH)
row_count = sum(1 for line in io.BytesIO(receive_monthly_file_name_response["Body"].read()))
for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'): for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'):
file_exists = False file_exists = False
for file_name in file_list: for file_name in file_list: