Convertire i file mainframe dal EBCDIC formato al formato delimitato da caratteri in ASCII Amazon S3 utilizzando Lambda AWS - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Convertire i file mainframe dal EBCDIC formato al formato delimitato da caratteri in ASCII Amazon S3 utilizzando Lambda AWS

Creato da Luis Gustavo Dantas () AWS

Archivio di codice: Mainframe Data Utilities

Ambiente: PoC o pilota

Fonte: file IBM EBCDIC

Destinazione: file delimitati ASCII

Tipo R: Replatform

Carico di lavoro: IBM

Tecnologie: mainframe

AWSservizi: AWS CloudShell; AWS Lambda; Amazon S3; Amazon CloudWatch

Riepilogo

Questo modello mostra come avviare una funzione AWS Lambda che converte automaticamente i file mainframe EBCDIC (Extended Binary Coded Decimal Interchange Code) in file delimitati da caratteri ASCII (American Standard Code for Information Interchange). La funzione Lambda viene eseguita dopo che i ASCII file sono stati caricati in un bucket Amazon Simple Storage Service (Amazon S3). Dopo la conversione dei file, puoi leggere i ASCII file su carichi di lavoro basati su x86 o caricare i file in database moderni.

L'approccio alla conversione dei file illustrato in questo modello può aiutarvi a superare le sfide legate all'utilizzo dei EBCDIC file in ambienti moderni. I file codificati in EBCDIC spesso contengono dati rappresentati in formato binario o decimale compresso e i campi sono a lunghezza fissa. Queste caratteristiche creano ostacoli perché i carichi di lavoro o gli ambienti distribuiti moderni basati su x86 generalmente funzionano con ASCII dati codificati e non possono elaborare file. EBCDIC

Prerequisiti e limitazioni

Prerequisiti

  • Un account attivo AWS

  • Un bucket S3

  • Un utente di AWS Identity and Access Management (IAM) con autorizzazioni amministrative

  • AWS CloudShell

  • Python 3.8.0 o successivo

  • Un file flat codificato in EBCDIC e la relativa struttura di dati corrispondente in un quaderno comune in linguaggio orientato al business () COBOL

Nota: questo modello utilizza un file di esempio (. EBCDIC CLIENT EBCDIC.txt) e il COBOL quaderno corrispondente (05.cpy). COBKS Entrambi i file sono disponibili nel repository. GitHub mainframe-data-utilities

Limitazioni

  • COBOLI quaderni di solito contengono più definizioni di layout. Il mainframe-data-utilitiesprogetto può analizzare questo tipo di quaderno ma non può dedurre quale layout prendere in considerazione per la conversione dei dati. Questo perché i quaderni non seguono questa logica (che invece rimane nei programmi). COBOL Di conseguenza, è necessario configurare manualmente le regole per la selezione dei layout dopo aver analizzato il quaderno.

  • Questo modello è soggetto alle quote Lambda.

Architettura

Stack tecnologico di origine

  • IBMz/OS, IBM i e altri sistemi EBCDIC

  • File sequenziali con dati codificati in EBCDIC (come Db2 unloads) IBM

  • COBOLquaderno

stack tecnologico Target

  • Amazon S3

  • Notifica degli eventi di Amazon S3

  • IAM

  • Funzione Lambda

  • Python 3.8 o successivo

  • Utilità per i dati del mainframe

  • JSONmetadati

  • file delimitati da caratteri ASCII

Architettura di destinazione

Il diagramma seguente mostra un'architettura per la conversione dei file mainframe in EBCDIC file. ASCII

Architettura per la conversione dei file mainframe in file EBCDIC ASCII

Il diagramma mostra il flusso di lavoro seguente:

  1. L'utente esegue lo script di analisi del copybook per convertire il COBOL quaderno in un file. JSON

  2. L'utente carica i metadati in un bucket S3JSON. Ciò rende i metadati leggibili dalla funzione Lambda di conversione dei dati.

  3. L'utente o un processo automatizzato carica il EBCDIC file nel bucket S3.

  4. L'evento di notifica S3 attiva la funzione Lambda di conversione dei dati.

  5. AWSverifica le autorizzazioni di lettura/scrittura del bucket S3 per la funzione Lambda.

  6. Lambda legge il file dal bucket S3 e lo converte localmente da a. EBCDIC ASCII

  7. Lambda registra lo stato del processo in Amazon. CloudWatch

  8. Lambda riscrive il ASCII file su Amazon S3.

Nota: lo script di analisi dei copybook viene eseguito solo una volta, dopo aver convertito i metadati in un bucket S3 JSON e quindi caricato tali dati in un bucket S3. Dopo la conversione iniziale, qualsiasi EBCDIC file che utilizza lo stesso JSON file caricato nel bucket S3 utilizzerà gli stessi metadati.

Strumenti

AWSstrumenti

  • Amazon ti CloudWatch aiuta a monitorare i parametri delle tue AWS risorse e delle applicazioni su cui esegui AWS in tempo reale.

  • Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.

  • AWS CloudShellè una shell basata su browser che puoi utilizzare per gestire AWS i servizi utilizzando l'interfaccia a riga di AWS comando (AWSCLI) e una gamma di strumenti di sviluppo preinstallati.

  • AWSIdentity and Access Management (IAM) consente di gestire in modo sicuro l'accesso alle AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.

  • AWSLambda è un servizio di elaborazione che ti aiuta a eseguire il codice senza dover effettuare il provisioning o gestire i server. Lambda esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.

Altri strumenti

  • GitHubè un servizio di code-hosting che fornisce strumenti di collaborazione e controllo delle versioni.

  • Python è un linguaggio di programmazione di alto livello.

Codice

Il codice per questo pattern è disponibile nel repository. GitHub mainframe-data-utilities

Best practice

Considerate le seguenti best practice:

  • Imposta le autorizzazioni richieste a livello di Amazon Resource Name (ARN).

  • Concedi sempre le autorizzazioni con il minimo privilegio per le politiche. IAM Per ulteriori informazioni, consulta le migliori pratiche di sicurezza nella documentazione. IAM IAM

Epiche

AttivitàDescrizioneCompetenze richieste

Crea le variabili d'ambiente.

Copiate le seguenti variabili di ambiente <placeholder>in un editor di testo, quindi sostituite i valori dell'esempio seguente con i valori delle risorse:

bucket=<your_bucket_name> account=<your_account_number> region=<your_region_code>

Nota: creerai riferimenti al tuo bucket S3, all'AWSaccount e alla AWS regione in un secondo momento.

Per definire le variabili di ambiente, apri la CloudShell console, quindi copia e incolla le variabili di ambiente aggiornate nella riga di comando.

Nota: è necessario ripetere questo passaggio ogni volta che la CloudShell sessione viene riavviata.

Generale AWS

Crea una cartella di lavoro.

Per semplificare il processo di pulizia delle risorse in un secondo momento, crea una cartella di lavoro CloudShell eseguendo il seguente comando:

mkdir workdir; cd workdir

Nota: è necessario modificare la directory nella directory di lavoro (workdir) ogni volta che si perde la connessione alla CloudShell sessione.

Generale AWS
AttivitàDescrizioneCompetenze richieste

Crea una politica di fiducia per la funzione Lambda.

Il EBCDIC convertitore funziona con una funzione Lambda. La funzione deve avere un IAM ruolo. Prima di creare il IAM ruolo, è necessario definire un documento sulla politica di fiducia che consenta alle risorse di assumere tale politica.

Dalla cartella CloudShell di lavoro, create un documento di policy eseguendo il comando seguente:

E2ATrustPol=$(cat <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF ) printf "$E2ATrustPol" > E2ATrustPol.json
Generale AWS

Crea il IAM ruolo per la conversione Lambda.

Per creare un IAM ruolo, esegui il seguente AWS CLI comando dalla cartella di CloudShell lavoro:

aws iam create-role --role-name E2AConvLambdaRole --assume-role-policy-document file://E2ATrustPol.json
Generale AWS

Crea il documento IAM di policy per la funzione Lambda.

La funzione Lambda deve disporre dell'accesso in lettura/scrittura al bucket S3 e delle autorizzazioni di scrittura per Amazon Logs. CloudWatch

Per creare una IAM policy, esegui il seguente comando dalla cartella di lavoro: CloudShell

E2APolicy=$(cat <<EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "Logs", "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:CreateLogStream", "logs:CreateLogGroup" ], "Resource": [ "arn:aws:logs:*:*:log-group:*", "arn:aws:logs:*:*:log-group:*:log-stream:*" ] }, { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::%s/*", "arn:aws:s3:::%s" ] } ] } EOF ) printf "$E2APolicy" "$bucket" "$bucket" > E2AConvLambdaPolicy.json
Generale AWS

Allega il documento di IAM policy al IAM ruolo.

Per allegare la IAM policy al IAM ruolo, esegui il seguente comando dalla tua cartella CloudShell di lavoro:

aws iam put-role-policy --role-name E2AConvLambdaRole --policy-name E2AConvLambdaPolicy --policy-document file://E2AConvLambdaPolicy.json
Generale AWS
AttivitàDescrizioneCompetenze richieste

Scarica il codice sorgente della EBCDIC conversione.

Dalla cartella CloudShell di lavoro, esegui il seguente comando per scaricare il codice mainframe-data-utilities sorgente da GitHub:

git clone https://github.com/aws-samples/mainframe-data-utilities.git mdu
Generale AWS

Crea il ZIP pacchetto.

Dalla cartella di CloudShell lavoro, esegui il comando seguente per creare il ZIP pacchetto che crea la funzione Lambda per EBCDIC la conversione:

cd mdu; zip ../mdu.zip *.py; cd ..
Generale AWS

Creazione della funzione Lambda

Dalla cartella di CloudShell lavoro, esegui il seguente comando per creare la funzione Lambda per EBCDIC la conversione:

aws lambda create-function \ --function-name E2A \ --runtime python3.9 \ --zip-file fileb://mdu.zip \ --handler extract_ebcdic_to_ascii.lambda_handler \ --role arn:aws:iam::$account:role/E2AConvLambdaRole \ --timeout 10 \ --environment "Variables={layout=$bucket/layout/}"

Nota: il layout della variabile di ambiente indica alla funzione Lambda dove risiedono i JSON metadati.

Generale AWS

Crea la politica basata sulle risorse per la funzione Lambda.

Dalla cartella di CloudShell lavoro, esegui il comando seguente per consentire alla notifica degli eventi di Amazon S3 di attivare la funzione Lambda per la conversione: EBCDIC

aws lambda add-permission \ --function-name E2A \ --action lambda:InvokeFunction \ --principal s3.amazonaws.com \ --source-arn arn:aws:s3:::$bucket \ --source-account $account \ --statement-id 1
Generale AWS
AttivitàDescrizioneCompetenze richieste

Crea il documento di configurazione per la notifica degli eventi di Amazon S3.

La notifica degli eventi di Amazon S3 avvia la funzione di conversione EBCDIC Lambda quando i file vengono inseriti nella cartella di input.

Dalla cartella di CloudShell lavoro, esegui il seguente comando per creare il JSON documento per la notifica degli eventi di Amazon S3:

{ "LambdaFunctionConfigurations": [ { "Id": "E2A", "LambdaFunctionArn": "arn:aws:lambda:%s:%s:function:E2A", "Events": [ "s3:ObjectCreated:Put" ], "Filter": { "Key": { "FilterRules": [ { "Name": "prefix", "Value": "input/" } ] } } } ] } EOF ) printf "$S3E2AEvent" "$region" "$account" > S3E2AEvent.json
Generale AWS

Crea la notifica degli eventi di Amazon S3.

Dalla cartella di CloudShell lavoro, esegui il seguente comando per creare la notifica degli eventi di Amazon S3:

aws s3api put-bucket-notification-configuration --bucket $bucket --notification-configuration file://S3E2AEvent.json
Generale AWS
AttivitàDescrizioneCompetenze richieste

Analizza il COBOL quaderno.

Dalla cartella di CloudShell lavoro, esegui il seguente comando per analizzare un COBOL quaderno di esempio in un JSON file (che definisce come leggere e suddividere correttamente il file di dati):

python3 mdu/parse_copybook_to_json.py \ -copybook mdu/LegacyReference/COBKS05.cpy \ -output CLIENT.json \ -output-s3key CLIENT.ASCII.txt \ -output-s3bkt $bucket \ -output-type s3 \ -print 25
Generale AWS

Aggiungi la regola di trasformazione.

Il file di dati di esempio e il COBOL quaderno corrispondente sono un file a più layout. Ciò significa che la conversione deve suddividere i dati in base a determinate regole. In questo caso, i byte nelle posizioni 3 e 4 in ogni riga definiscono il layout.

Dalla cartella CloudShell di lavoro, modificate il CLIENT.json file e modificate il contenuto nel "transf-rule": [], modo seguente:

"transf-rule": [ { "offset": 4, "size": 2, "hex": "0002", "transf": "transf1" }, { "offset": 4, "size": 2, "hex": "0000", "transf": "transf2" } ],
GeneraleAWS, IBM Mainframe, Cobol

Carica i JSON metadati nel bucket S3.

Dalla cartella di CloudShell lavoro, esegui il seguente AWS CLI comando per caricare i JSON metadati nel tuo bucket S3:

aws s3 cp CLIENT.json s3://$bucket/layout/CLIENT.json
Generale AWS
AttivitàDescrizioneCompetenze richieste

Invia il EBCDIC file al bucket S3.

Dalla cartella di CloudShell lavoro, esegui il seguente comando per inviare il EBCDIC file al bucket S3:

aws s3 cp mdu/sample-data/CLIENT.EBCDIC.txt s3://$bucket/input/

Nota: ti consigliamo di impostare cartelle diverse per i file di input (EBCDIC) e output (ASCII) per evitare di richiamare nuovamente la funzione di conversione Lambda quando il ASCII file viene caricato nel bucket S3.

Generale AWS

Controlla l'output.

Dalla cartella di CloudShell lavoro, esegui il seguente comando per verificare se il ASCII file è generato nel tuo bucket S3:

awss3 ls s3://$bucket/

Nota: la conversione dei dati può richiedere diversi secondi. Ti consigliamo di controllare il ASCII file alcune volte.

Una volta che il ASCII file è disponibile, esegui il seguente comando per scaricare il file dal bucket S3 nella cartella corrente:

aws s3 cp s3://$bucket/CLIENT.ASCII.txt .

Controlla il contenuto del ASCII file:

head CLIENT.ASCII.txt
Generale AWS
AttivitàDescrizioneCompetenze richieste

(Facoltativo) Prepara le variabili e la cartella.

Se perdete la connessione con CloudShell, riconnettetevi ed eseguite il seguente comando per spostare la directory nella cartella di lavoro:

cd workdir

Assicuratevi che le variabili di ambiente siano definite:

bucket=<your_bucket_name> account=<your_account_number> region=<your_region_code>
Generale AWS

Rimuovi la configurazione di notifica per il bucket.

Dalla cartella di CloudShell lavoro, esegui il seguente comando per rimuovere la configurazione di notifica degli eventi di Amazon S3:

aws s3api put-bucket-notification-configuration \ --bucket=$bucket \ --notification-configuration="{}"
Generale AWS

Elimina la funzione Lambda.

Dalla cartella di CloudShell lavoro, esegui il seguente comando per eliminare la funzione Lambda per il EBCDIC convertitore:

awslambdadelete-function--function-nameE2A
Generale AWS

Eliminare il IAM ruolo e la politica.

Dalla cartella di CloudShell lavoro, esegui il comando seguente per rimuovere il ruolo e la politica del EBCDIC convertitore:

aws iam delete-role-policy --role-name E2AConvLambdaRole --policy-name E2AConvLambdaPolicy aws iam delete-role --role-name E2AConvLambdaRole
Generale AWS

Elimina i file generati nel bucket S3.

Dalla cartella di CloudShell lavoro, esegui il seguente comando per eliminare i file generati nel bucket S3:

aws s3 rm s3://$bucket/layout --recursive aws s3 rm s3://$bucket/input --recursive aws s3 rm s3://$bucket/CLIENT.ASCII.txt
Generale AWS

Eliminare la cartella di lavoro.

Dalla cartella di CloudShell lavoro, esegui il seguente comando per rimuovere workdir e rimuovere il relativo contenuto:

cd ..; rm -Rf workdir
Generale AWS

Risorse correlate