Utilizza passaggi di elaborazione dei file personalizzati - AWS Transfer Family

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à.

Utilizza passaggi di elaborazione dei file personalizzati

Utilizzando una fase di elaborazione dei file personalizzata, è possibile utilizzare la logica di elaborazione dei file Bring Your Own. AWS Lambda All'arrivo dei file, un server Transfer Family richiama una funzione Lambda che contiene una logica di elaborazione dei file personalizzata, come la crittografia dei file, la scansione alla ricerca di malware o il controllo dei tipi di file errati. Nell'esempio seguente, la AWS Lambda funzione target viene utilizzata per elaborare il file di output del passaggio precedente.

Nota

Per un esempio di funzione Lambda, consulta Esempio di funzione Lambda per una fase del flusso di lavoro personalizzata. Ad esempio, eventi (inclusa la posizione dei file passati in Lambda), vedi. Eventi di esempio inviati a al AWS Lambda momento del caricamento del file

Con un passaggio del flusso di lavoro personalizzato, è necessario configurare la funzione Lambda per richiamare l'SendWorkflowStepStateAPIoperazione. SendWorkflowStepStatenotifica all'esecuzione del flusso di lavoro che il passaggio è stato completato con uno stato di successo o di errore. Lo stato dell'SendWorkflowStepStateAPIoperazione richiama un passaggio del gestore delle eccezioni o un passaggio nominale nella sequenza lineare, in base al risultato della funzione Lambda.

Se la funzione Lambda fallisce o scade, il passaggio ha esito negativo e lo vedi StepErrored nei log. CloudWatch Se la funzione Lambda fa parte del passaggio nominale e la funzione risponde SendWorkflowStepState con Status="FAILURE" o scade, il flusso continua con i passaggi del gestore delle eccezioni. In questo caso, il flusso di lavoro non continua a eseguire i passaggi nominali rimanenti (se presenti). Per ulteriori dettagli, consulta Gestione delle eccezioni per un flusso di lavoro.

Quando si richiama l'SendWorkflowStepStateAPIoperazione, è necessario inviare i seguenti parametri:

{ "ExecutionId": "string", "Status": "string", "Token": "string", "WorkflowId": "string" }

È possibile estrarre il ExecutionIdToken, e WorkflowId dall'evento di input che viene passato quando viene eseguita la funzione Lambda (gli esempi sono mostrati nelle sezioni seguenti). Il Status valore può essere o. SUCCESS FAILURE

Per poter richiamare l'SendWorkflowStepStateAPIoperazione dalla funzione Lambda, è necessario utilizzare una versione di AWS SDK quella pubblicata dopo l'introduzione dei flussi di lavoro gestiti.

Utilizzo consecutivo di più funzioni Lambda

Quando si utilizzano più passaggi personalizzati uno dopo l'altro, l'opzione Posizione del file funziona in modo diverso rispetto all'utilizzo di un solo passaggio personalizzato. Transfer Family non supporta il trasferimento del file elaborato da Lambda per utilizzarlo come input del passaggio successivo. Quindi, se avete più passaggi personalizzati tutti configurati per utilizzare l'previous.fileopzione, tutti utilizzano la stessa posizione del file (la posizione del file di input per il primo passaggio personalizzato).

Nota

L'previous.fileimpostazione funziona in modo diverso anche se si dispone di un passaggio predefinito (etichettare, copiare, decrittografare o eliminare) dopo un passaggio personalizzato. Se il passaggio predefinito è configurato per utilizzare l'previous.fileimpostazione, il passaggio predefinito utilizza lo stesso file di input utilizzato dal passaggio personalizzato. Il file elaborato dal passaggio personalizzato non viene passato al passaggio predefinito.

Accesso a un file dopo l'elaborazione personalizzata

Se utilizzi Amazon S3 come storage e se il tuo flusso di lavoro include un passaggio personalizzato che esegue azioni sul file originariamente caricato, i passaggi successivi non possono accedere al file elaborato. In altre parole, nessun passaggio successivo al passaggio personalizzato non può fare riferimento al file aggiornato dall'output del passaggio personalizzato.

Ad esempio, supponiamo di avere i seguenti tre passaggi nel flusso di lavoro.

  • Passaggio 1: carica un file denominatoexample-file.txt.

  • Passaggio 2: richiama una funzione Lambda che example-file.txt cambia in qualche modo.

  • Fase 3 — Tentativo di eseguire ulteriori elaborazioni sulla versione aggiornata di. example-file.txt

Se si configura sourceFileLocation la Fase 3 in modo che sia la Fase 3${original.file}, la Fase 3 utilizza la posizione originale del file da quando il server ha caricato il file nell'archivio nella Fase 1. Se lo utilizzi ${previous.file} per lo Step 3, lo Step 3 riutilizza la posizione del file utilizzata dallo Step 2 come input.

Pertanto, lo Step 3 causa un errore. Ad esempio, se nel passaggio 3 si tenta di copiare l'aggiornamentoexample-file.txt, viene visualizzato il seguente errore:

{ "type": "StepErrored", "details": { "errorType": "NOT_FOUND", "errorMessage": "ETag constraint not met (Service: null; Status Code: 412; Error Code: null; Request ID: null; S3 Extended Request ID: null; Proxy: null)", "stepType": "COPY", "stepName": "CopyFile" },

Questo errore si verifica perché il passaggio personalizzato modifica il tag di entità (ETag) example-file.txt in modo che non corrisponda al file originale.

Nota

Questo comportamento non si verifica se utilizzi Amazon EFS perché Amazon EFS non utilizza tag di entità per identificare i file.

Eventi di esempio inviati a al AWS Lambda momento del caricamento del file

Gli esempi seguenti mostrano gli eventi a cui vengono inviati AWS Lambda quando il caricamento di un file è completo. Un esempio utilizza un server Transfer Family in cui il dominio è configurato con Amazon S3. L'altro esempio utilizza un server Transfer Family in cui il dominio utilizza AmazonEFS.

Custom step that uses an Amazon S3 domain
{ "token": "MzI0Nzc4ZDktMGRmMi00MjFhLTgxMjUtYWZmZmRmODNkYjc0", "serviceMetadata": { "executionDetails": { "workflowId": "w-1234567890example", "executionId": "abcd1234-aa11-bb22-cc33-abcdef123456" }, "transferDetails": { "sessionId": "36688ff5d2deda8c", "userName": "myuser", "serverId": "s-example1234567890" } }, "fileLocation": { "domain": "S3", "bucket": "DOC-EXAMPLE-BUCKET", "key": "path/to/mykey", "eTag": "d8e8fca2dc0f896fd7cb4cb0031ba249", "versionId": null } }
Custom step that uses an Amazon EFS domain
{ "token": "MTg0N2Y3N2UtNWI5Ny00ZmZlLTk5YTgtZTU3YzViYjllNmZm", "serviceMetadata": { "executionDetails": { "workflowId": "w-1234567890example", "executionId": "abcd1234-aa11-bb22-cc33-abcdef123456" }, "transferDetails": { "sessionId": "36688ff5d2deda8c", "userName": "myuser", "serverId": "s-example1234567890" } }, "fileLocation": { "domain": "EFS", "fileSystemId": "fs-1234567", "path": "/path/to/myfile" } }

Esempio di funzione Lambda per una fase del flusso di lavoro personalizzata

La seguente funzione Lambda estrae le informazioni relative allo stato di esecuzione e quindi richiama l'SendWorkflowStepStateAPIoperazione per restituire lo stato al flusso di lavoro per il passaggio, ovvero. SUCCESS FAILURE Prima che la funzione richiami l'SendWorkflowStepStateAPIoperazione, puoi configurare Lambda per eseguire un'azione basata sulla logica del tuo flusso di lavoro.

import json import boto3 transfer = boto3.client('transfer') def lambda_handler(event, context): print(json.dumps(event)) # call the SendWorkflowStepState API to notify the workflow about the step's SUCCESS or FAILURE status response = transfer.send_workflow_step_state( WorkflowId=event['serviceMetadata']['executionDetails']['workflowId'], ExecutionId=event['serviceMetadata']['executionDetails']['executionId'], Token=event['token'], Status='SUCCESS|FAILURE' ) print(json.dumps(response)) return { 'statusCode': 200, 'body': json.dumps(response) }

IAMautorizzazioni per un passaggio personalizzato

Per consentire il completamento di un passaggio che richiama una Lambda, assicurati che il ruolo di esecuzione per il tuo flusso di lavoro contenga le seguenti autorizzazioni.

{ "Sid": "Custom", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:region:account-id:function:function-name" ] }