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 utilizzando. AWS Lambda All'arrivo del 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 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 AWS Lambda al momento del caricamento del file
Con una fase del flusso di lavoro personalizzata, è necessario configurare la funzione Lambda per chiamare l'operazione SendWorkflowStepState API. SendWorkflowStepStatenotifica all'esecuzione del flusso di lavoro che il passaggio è stato completato con esito positivo o negativo. Lo stato dell'operazione SendWorkflowStepState API richiama una fase del gestore delle eccezioni o una fase 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 nei tuoi log. StepErrored CloudWatch Se la funzione Lambda fa parte della fase 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, consultare Gestione delle eccezioni per un flusso di lavoro.
Quando si chiama l'operazione SendWorkflowStepState API, è necessario inviare i seguenti parametri:
{ "ExecutionId": "string", "Status": "string", "Token": "string", "WorkflowId": "string" }
È possibile estrarre il valore 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 uno o. SUCCESS FAILURE
Per poter chiamare l'operazione SendWorkflowStepState API dalla tua funzione Lambda, devi utilizzare una versione dell' AWS SDK 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 a quando si utilizza un solo passaggio personalizzato. Transfer Family non supporta la Lambda-processed restituzione del file per utilizzarlo come input del passaggio successivo. Quindi, se hai più passaggi personalizzati tutti configurati per utilizzare l'previous.fileopzione, utilizzano tutti 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 hai un passaggio predefinito (tag, copia, decrittografa o elimina) 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 il tuo flusso di lavoro include una fase personalizzata che esegue azioni sul file originariamente caricato, i passaggi successivi non possono accedere al file elaborato. In altre parole, qualsiasi 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 cambia
example-file.txtin qualche modo. -
Passaggio 3: tentare di eseguire un'ulteriore elaborazione sulla versione aggiornata di.
example-file.txt
Se si configura sourceFileLocation il passaggio 3${original.file}, il passaggio 3 utilizza la posizione originale del file da quando il server ha caricato il file nello spazio di archiviazione nel passaggio 1. Se utilizzi ${previous.file} la Fase 3, la Fase 3 riutilizza la posizione del file utilizzata dalla Fase 2 come input.
Pertanto, il passaggio 3 causa un errore. Ad esempio, se il passaggio 3 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 dell'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 AWS Lambda al 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 Amazon EFS.
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 chiama l'operazione SendWorkflowStepState API per restituire lo stato al flusso di lavoro per la fase, oppure. SUCCESS FAILURE Prima che la funzione richiami l'operazione SendWorkflowStepState API, puoi configurare Lambda in modo che esegua un'azione in base alla 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) }
Autorizzazioni IAM per un passaggio personalizzato
Per consentire la corretta esecuzione di un passaggio che chiama una Lambda, assicurati che il ruolo di esecuzione del flusso di lavoro contenga le seguenti autorizzazioni.
{ "Sid": "Custom", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:region:account-id:function:function-name" ] }