Python을 사용하여 AWS에서 EBCDIC 데이터를 ASCII로 변환 및 압축 해제 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Python을 사용하여 AWS에서 EBCDIC 데이터를 ASCII로 변환 및 압축 해제

작성자: Luis Gustavo Dantas(AWS)

코드 리포지토리: 메인프레임 데이터 유틸리티

환경: PoC 또는 파일럿

소스: Mainframe EBCDIC 데이터

대상: 분산 또는 클라우드로 현대화된 ASCII 데이터

R 유형: 리플랫포밍

워크로드: IBM

기술: 메인프레임, 데이터베이스, 스토리지 및 백업, 현대화

AWS 서비스: Amazon EBS, Amazon EC2

요약

메인프레임은 일반적으로 중요한 비즈니스 데이터를 호스팅하므로 데이터를 Amazon Web Services(AWS) 클라우드 또는 기타 미국 정보 교환 표준 코드(ASCII) 환경으로 마이그레이션할 때 데이터를 현대화하는 것이 가장 중요한 작업 중 하나입니다. 메인프레임에서 데이터는 일반적으로 확장 이진 코드 십진 교환 코드(EBCDIC) 형식으로 인코딩됩니다. 데이터베이스, 가상 스토리지 액세스 방법(VSAM) 또는 플랫 파일을 익스포트하면 일반적으로 압축된 바이너리 EBCDIC 파일이 생성되므로 마이그레이션하기가 더 복잡합니다. 가장 일반적으로 사용되는 데이터베이스 마이그레이션 솔루션은 대부분의 경우 데이터 인코딩을 자동으로 변환하는 변경 데이터 캡처(CDC)입니다. 그러나 이러한 데이터베이스, VSAM 또는 플랫 파일에는 CDC 메커니즘을 사용하지 못할 수 있습니다. 이러한 파일의 경우 데이터를 현대화하기 위한 대체 접근 방식이 필요합니다.

이 패턴은 EBCDIC 데이터를 ASCII 형식으로 변환하여 현대화하는 방법을 설명합니다. 변환 후에는 데이터를 분산 데이터베이스에 로드하거나 클라우드의 애플리케이션이 데이터를 직접 처리하도록 할 수 있습니다. 패턴은 저장소의 변환 스크립트와 샘플 파일을 사용합니다. mainframe-data-utilities GitHub

사전 조건 및 제한 사항

사전 조건

제한 사항

  • COBOL 프로그램 내에 정의된 파일 레이아웃은 지원되지 않습니다. 이는 별도로 제공되어야 합니다.

제품 버전

  • Python 버전 3.8 이상

아키텍처

소스 기술 스택

  • 메인프레임의 EBCDIC 데이터

  • COBOL 카피북

대상 기술 스택

  • Virtual Private Cloud(VPC)의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스

  • Amazon Elastic Block Store(Amazon EBS)

  • Python과 그 필수 패키지, JavaScript 객체 표기법 (JSON), sys, 그리고 날짜/시간

  • 최신 애플리케이션에서 읽을 수 있거나 관계형 데이터베이스 테이블에 로드할 수 있는 ASCII 플랫 파일

대상 아키텍처

Python 스크립트와 COBOL 카피북을 사용하여 EC2 인스턴스에서 EBCDIC 데이터를 ASCII로 변환했습니다.

아키텍처 다이어그램은 EC2 인스턴스에서 EBCDIC 파일을 ASCII 파일로 변환하는 프로세스를 보여줍니다.

  1. parse_copybook_to_json.py 스크립트를 사용하여 COBOL 카피북을 JSON 파일로 변환합니다.

  2. JSON 파일과 extract_ebcdic_to_ascii.py 스크립트를 사용하여 EBCDIC 데이터를 ASCII 파일로 변환합니다.

자동화 및 규모 조정

첫 번째 수동 파일 변환에 필요한 리소스를 확보한 후 파일 변환을 자동화할 수 있습니다. 이 패턴에는 자동화 지침이 포함되어 있지 않습니다. 여러 가지 방법으로 변환을 자동화할 수 있습니다. 다음 사항은 한 가지 가능한 접근 방식에 대한 개요입니다.

  1. AWS Command Line Interface(AWS CLI) 및 Python 스크립트 명령을 쉘 스크립트로 캡슐화합니다.

  2. 쉘 스크립트 작업을 EC2 인스턴스에 비동기적으로 제출하는 AWS Lambda 함수를 생성합니다. 자세한 내용은 AWS Lambda를 사용한 SSH 작업 예약을 참조하세요.

  3. 레거시 파일이 업로드될 때마다 Lambda 함수를 간접 호출하는 Amazon Simple Storage Service(S3) 트리거를 생성합니다. 자세한 내용은 Amazon S3 트리거를 사용하여 Lambda 함수 간접 호출을 참조하세요.

도구

서비스

  • Amazon Elastic Compute Cloud(Amazon EC2)는 AWS 클라우드에서 규모를 조정할 수 있는 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.

  • Amazon Elastic Block Store(Amazon EBS)는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 사용할 수 있는 블록 스토리지 볼륨을 제공합니다.

  • AWS Command Line Interface(AWS CLI)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.

  • AWS Identity and Access Management(IAM)는 사용자에 대한 인증 및 권한 부여를 제어함으로써 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.

기타 도구

  • GitHub협업 도구와 버전 제어를 제공하는 코드 호스팅 서비스입니다.

  • Python은 고급 프로그래밍 언어입니다.

코드 리포지토리

이 패턴의 코드는 저장소에서 사용할 수 있습니다. mainframe-data-utilities GitHub

에픽

작업설명필요한 기술

EC2 인스턴스를 시작합니다.

EC2 인스턴스에는 아웃바운드 인터넷 액세스가 있어야 합니다. 이렇게 하면 인스턴스가 에서 제공되는 Python 소스 코드에 액세스할 수 GitHub 있습니다. 인스턴스를 생성하는 방법:

  1. https://console.aws.amazon.com/ec2 에서 Amazon EC2 콘솔을 엽니다.

  2. EC2 Linux 인스턴스를 실행합니다. 퍼블릭 IP 주소를 사용하고 포트 22를 통한 인바운드 액세스를 허용합니다. 인스턴스의 스토리지 크기가 EBCDIC 데이터 파일 크기의 두 배 이상인지 확인합니다. 지침은 Amazon EC2 설명서를 참조하세요.

일반 AWS

Git을 설치합니다.

  1. Secure Shell(SSH) 클라이언트를 사용하여 방금 시작한 EC2 인스턴스에 연결합니다. 자세한 내용은 Linux 인스턴스에 연결을 참조하세요.

  2. Amazon EC2 콘솔에서 다음 명령을 실행합니다. EC2 인스턴스에 Git가 설치됩니다.

    sudo yum install git
  3. 다음 명령을 실행하고 Git이 성공적으로 설치되었는지 확인합니다.

    git --version
일반 AWS, Linux

Python을 설치합니다.

  1. Amazon EC2 콘솔에서 다음 명령을 실행합니다. EC2 인스턴스에 Python이 설치됩니다.

    sudo yum install python3
  2. Amazon EC2 콘솔에서 다음 명령을 실행합니다. EC2 인스턴스에 Pip3가 설치됩니다.

    sudo yum install python3-pip
  3. Amazon EC2 콘솔에서 다음 명령을 실행합니다. EC2 인스턴스에 AWS SDK for Python(Boto3)가 설치됩니다.

    sudo pip3 install boto3
  4. Amazon EC2 콘솔에서 다음 명령을 실행합니다. 여기에서 <us-east-1>는 AWS 리전의 코드입니다. 리전 코드의 전체 목록은 Amazon EC2 설명서의 사용 가능한 리전을 참조하세요.

    export AWS_DEFAULT_REGION=<us-east-1>
일반 AWS, Linux

GitHub 리포지토리를 복제합니다.

  1. Amazon EC2 콘솔에서 다음 명령을 실행합니다. 그러면 기본 복사 위치인 home 폴더에서 mainframe-data-utilities리포지토리가 GitHub 복제되고 열립니다.

    git clone https://github.com/aws-samples/mainframe-data-utilities.git
  2. home 폴더에 mainframe-data-utilities 폴더가 있는지 확인합니다.

일반 AWS, GitHub
작업설명필요한 기술

COBOL 카피북을 JSON 레이아웃 파일로 파싱합니다.

mainframe-data-utilities 폴더 내에서 parse_copybook_to_json.py 스크립트를 실행합니다. 이 자동화 모듈은 COBOL 카피북에서 파일 레이아웃을 읽고 JSON 파일을 생성합니다. JSON 파일에는 소스 파일에서 데이터를 해석하고 추출하는 데 필요한 정보가 들어 있습니다. 그러면 COBOL 카피북에서 JSON 메타데이터가 생성됩니다.

다음 명령은 COBOL 카피북을 JSON 파일로 변환합니다.

python3 parse_copybook_to_json.py \ -copybook LegacyReference/COBPACK2.cpy \ -output sample-data/cobpack2-list.json \ -dict sample-data/cobpack2-dict.json \ -ebcdic sample-data/COBPACK.OUTFILE.txt \ -ascii sample-data/COBPACK.ASCII.txt \ -print 10000

스크립트는 수신된 인수를 인쇄합니다.

----------------------------------------------------------------------- Copybook file...............| LegacyReference/COBPACK2.cpy Parsed copybook (JSON List).| sample-data/cobpack2-list.json JSON Dict (documentation)...| sample-data/cobpack2-dict.json ASCII file..................| sample-data/COBPACK.ASCII.txt EBCDIC file.................| sample-data/COBPACK.OUTFILE.txt Print each..................| 10000 -----------------------------------------------------------------------

인수에 대한 자세한 내용은 GitHub 리포지토리의 README 파일을 참조하십시오.

일반 AWS, Linux

JSON 레이아웃 파일을 검사합니다.

  1. parse_copybook_to_json.py 스크립트에 정의된 출력 경로로 이동합니다.

  2. sample-data/cobpack2-list.json 파일의 생성 시간을 확인하여 적절한 JSON 레이아웃 파일을 선택했는지 확인합니다.

  3. JSON 파일을 검사하여 내용이 다음과 비슷한지 확인합니다.

"input": "extract-ebcdic-to-ascii/COBPACK.OUTFILE.txt", "output": "extract-ebcdic-to-ascii/COBPACK.ASCII.txt", "max": 0, "skip": 0, "print": 10000, "lrecl": 150, "rem-low-values": true, "separator": "|", "transf": [ { "type": "ch", "bytes": 19, "name": "OUTFILE-TEXT" }

JSON 레이아웃 파일의 가장 중요한 속성은 다음과 같습니다.

  • input - 변환할 EBCDIC 파일의 경로 포함

  • output - ASCII 파일이 생성될 경로 정의

  • lrecl - 로직 레코드 길이의 크기를 바이트 단위로 지정

  • transf - 모든 필드와 해당 크기를 바이트 단위로 나열

JSON 레이아웃 파일에 대한 자세한 내용은 리포지토리의 README 파일을 참조하십시오. GitHub

일반 AWS, JSON

ASCII 파일을 생성합니다.

복제된 GitHub 리포지토리에 포함된 extract_ebcdic_to_ascii.py 스크립트를 실행합니다. 이 스크립트는 EBCDIC 파일을 읽고 변환하여 읽을 수 있는 ASCII 파일을 작성합니다.

python3 extract_ebcdic_to_ascii.py -local-json sample-data/cobpack2-list.json

스크립트는 EBCDIC 데이터를 처리할 때 10,000개 레코드의 모든 배치에 대해 메시지를 인쇄합니다. 다음 예를 참조하세요.

------------------------------------------------------------------ 2023-05-15 21:21:46.322253 | Local Json file | -local-json | sample-data/cobpack2-list.json 2023-05-15 21:21:47.034556 | Records processed | 10000 2023-05-15 21:21:47.736434 | Records processed | 20000 2023-05-15 21:21:48.441696 | Records processed | 30000 2023-05-15 21:21:49.173781 | Records processed | 40000 2023-05-15 21:21:49.874779 | Records processed | 50000 2023-05-15 21:21:50.705873 | Records processed | 60000 2023-05-15 21:21:51.609335 | Records processed | 70000 2023-05-15 21:21:52.292989 | Records processed | 80000 2023-05-15 21:21:52.938366 | Records processed | 89280 2023-05-15 21:21:52.938448 Seconds 6.616232

인쇄 빈도를 변경하는 방법에 대한 자세한 내용은 저장소의 README 파일을 참조하십시오. GitHub

일반 AWS

ASCII 파일을 검사합니다.

  1. extract-ebcdic-to-ascii/COBPACK.ASCII.txt 파일의 생성 시간을 확인하여 파일이 최근에 생성되었는지 확인하십시오.

  2. Amazon EC2 콘솔에서 다음 명령을 입력합니다. 그러면 ASCII 파일의 첫 번째 레코드가 열립니다.

    head sample-data/COBPACK.ASCII.txt -n 1| xxd
  3. 첫 번째 레코드의 내용을 살펴보세요. EBCDIC 파일은 일반적으로 바이너리이므로 캐리지 리턴 및 라인 피드(CRLF) 특수 문자가 없습니다. extract_ebcdic_to_ascii.py 스크립트는 스크립트 파라미터에 정의된 열 구분 기호로 파이프 문자를 추가합니다.

제공된 샘플 EBCDIC 파일을 사용한 경우 ASCII 파일의 첫 번째 레코드는 다음과 같습니다.

00000000: 2d30 3030 3030 3030 3030 3130 3030 3030 -000000000100000 00000010: 3030 307c 3030 3030 3030 3030 3031 3030 000|000000000100 00000020: 3030 3030 3030 7c2d 3030 3030 3030 3030 000000|-00000000 00000030: 3031 3030 3030 3030 3030 7c30 7c30 7c31 0100000000|0|0|1 00000040: 3030 3030 3030 3030 7c2d 3130 3030 3030 00000000|-100000 00000050: 3030 307c 3130 3030 3030 3030 307c 2d31 000|100000000|-1 00000060: 3030 3030 3030 3030 7c30 3030 3030 7c30 00000000|00000|0 00000070: 3030 3030 7c31 3030 3030 3030 3030 7c2d 0000|100000000|- 00000080: 3130 3030 3030 3030 307c 3030 3030 3030 100000000|000000 00000090: 3030 3030 3130 3030 3030 3030 307c 2d30 0000100000000|-0 000000a0: 3030 3030 3030 3030 3031 3030 3030 3030 0000000001000000 000000b0: 3030 7c41 7c41 7c0a 00|A|A|.
일반 AWS, Linux

EBCDIC 파일을 평가하세요.

Amazon EC2 콘솔에서 다음 명령을 입력합니다. 그러면 EBCDIC 파일의 첫 번째 레코드가 열립니다.

head sample-data/COBPACK.OUTFILE.txt -c 150 | xxd

샘플 EBCDIC 파일을 사용한 경우 결과는 다음과 같습니다.

00000000: 60f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 f0f0 `............... 00000010: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 ................ 00000020: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 ................ 00000030: f0f0 f0f0 f0f0 d000 0000 0005 f5e1 00fa ................ 00000040: 0a1f 0000 0000 0005 f5e1 00ff ffff fffa ................ 00000050: 0a1f 0000 000f 0000 0c10 0000 000f 1000 ................ 00000060: 0000 0d00 0000 0000 1000 0000 0f00 0000 ................ 00000070: 0000 1000 0000 0dc1 c100 0000 0000 0000 ................ 00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000090: 0000 0000 0000 ......

소스 파일과 대상 파일 간의 동등성을 평가하려면 EBCDIC에 대한 포괄적인 지식이 필요합니다. 예를 들어 샘플 EBCDIC 파일의 첫 문자는 하이픈(-)입니다. EBCDIC 파일의 16진수 표기법에서는 이 문자가 60으로 표시되고 ASCII 파일의 16진수 표기법에서는 이 문자가 2D로 표시됩니다. EBCDIC에서 ASCII로의 변환 표는 IBM 웹사이트의 EBCDIC에서 ASCII로 변환하는 표를 참조하세요.

일반 AWS, Linux, EBCDIC

관련 리소스

참조

자습서