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. SendWorkflowStepState
notifica all'esecuzione del flusso di lavoro che il passaggio è stato completato con uno stato di successo o di errore. Lo stato dell'SendWorkflowStepState
APIoperazione 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'SendWorkflowStepState
APIoperazione, è necessario inviare i seguenti parametri:
{ "ExecutionId": "string", "Status": "string", "Token": "string", "WorkflowId": "string" }
È possibile estrarre il ExecutionId
Token
, 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'SendWorkflowStepState
APIoperazione 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.file
opzione, tutti utilizzano la stessa posizione del file (la posizione del file di input per il primo passaggio personalizzato).
Nota
L'previous.file
impostazione 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.file
impostazione, 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 denominato
example-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.
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'SendWorkflowStepState
APIoperazione, 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
" ] }