

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# AWS Transfer Family flujos de trabajo gestionados
<a name="transfer-workflows"></a>

 AWS Transfer Family admite flujos de trabajo gestionados para el procesamiento de archivos. Con los flujos de trabajo administrados, puede iniciar un flujo de trabajo después de transferir un archivo a través de SFTP, FTPS, FTP. Con esta función, puede cumplir de forma segura y rentable sus requisitos de conformidad para el intercambio de archivos business-to-business (B2B) mediante la coordinación de todos los pasos necesarios para el procesamiento de archivos. Además, se beneficia de la end-to-end auditoría y la visibilidad.

![\[Diagrama de flujo que muestra cómo los flujos de trabajo administrados ayudan al procesamiento de archivos.\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-diagram.png)


Al organizar las tareas de procesamiento de archivos, los flujos de trabajo administrados lo ayudan a preprocesar los datos antes de que los consuman las aplicaciones posteriores. Estas tareas de procesamiento de archivos pueden incluir lo siguiente:
+ Mover archivos a carpetas específicas del usuario.
+ Descifrado de archivos como parte de un flujo de trabajo.
+ Etiquetado de archivos.
+ Realizar un procesamiento personalizado creando y adjuntando una AWS Lambda función a un flujo de trabajo.
+ Enviar notificaciones cuando un archivo ha sido transferido correctamente. (Para ver una entrada de blog que detalle este caso de uso, consulte [Personalizar las notificaciones de entrega de archivos mediante flujos de trabajo AWS Transfer Family gestionados](https://aws.amazon.com/blogs/storage/customize-file-delivery-notifications-using-aws-transfer-family-managed-workflows/)).

Para replicar y estandarizar rápidamente las tareas comunes de procesamiento de archivos posteriores a la carga que abarcan varias unidades de negocio de su organización, puede implementar flujos de trabajo mediante la infraestructura como código (IaC). Puede especificar que se inicie un flujo de trabajo administrado en los archivos que se carguen en su totalidad. También puede especificar que se inicie un flujo de trabajo administrado diferente en los archivos que se hayan cargado solo parcialmente debido a una desconexión prematura de la sesión. La gestión de excepciones integrada le ayuda a reaccionar rápidamente ante los resultados del procesamiento de archivos y, al mismo tiempo, le ofrece el control sobre cómo administrar los errores. Además, cada paso del flujo de trabajo produce registros detallados, que puede auditar para rastrear el linaje de datos.

Para comenzar, realice los siguientes pasos:

1. Configure su flujo de trabajo para que contenga las acciones de preprocesamiento, como copiar, etiquetar y otros pasos, en función de sus necesidades. Para obtener más información, consulte [Crear un flujo de trabajo](create-workflow.md).

1. Configure un rol de ejecución, que Transfer Family utilizará para ejecutar el flujo de trabajo. Para obtener más información, consulte [Políticas de IAM para flujos de trabajo](workflow-execution-role.md).

1. Asigne el flujo de trabajo a un servidor para que, al llegar el archivo, las acciones especificadas en este flujo de trabajo se evalúen y se inicien en tiempo real. Para obtener más información, consulte [Configuración y ejecución de un flujo de trabajo](create-workflow.md#configure-workflow).

**Información relacionada**
+ Para supervisar las ejecuciones del flujo de trabajo, consulte [Uso de CloudWatch métricas para servidores Transfer Family](metrics.md).
+ Para obtener registros de ejecución detallados e información sobre la solución de problemas, consulte [Solucionar errores relacionados con el flujo de trabajo con Amazon CloudWatch](workflow-issues.md#workflows-cloudwatch-errors).
+ Transfer Family ofrece una entrada de blog y un taller que lo guiarán a través de la creación de una solución de transferencia de archivos. Esta solución aprovecha los SFTP/FTPS puntos AWS Transfer Family de conexión gestionados y Amazon Cognito y DynamoDB para la gestión de usuarios. 

  La entrada del blog está disponible en [Uso de Amazon Cognito como proveedor de identidad con Amazon AWS Transfer Family S3](https://aws.amazon.com/blogs/storage/using-amazon-cognito-as-an-identity-provider-with-aws-transfer-family-and-amazon-s3/). Puede ver los detalles del taller [aquí.](https://catalog.workshops.aws/transfer-family-sftp/en-US) 
+ En el siguiente video, se ofrece una breve introducción a los flujos de trabajo administrados por Transfer Family.  
[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/t-iNqCRospw/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/t-iNqCRospw)
+ [El siguiente taller ofrece laboratorios prácticos para crear flujos de trabajo totalmente automatizados y basados en eventos que implican la transferencia de archivos hacia o desde servidores SFTP externos a Amazon S3, y el procesamiento previo y posterior común de esos archivos: taller de MFT basado en eventos.](https://catalog.us-east-1.prod.workshops.aws/workshops/e55c90e0-bbb0-47e1-be83-6bafa3a59a8a/en-US)

  En este vídeo se ofrece un recorrido por este taller.  
[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/oojopisG4lA/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/oojopisG4lA)

**Topics**
+ [Crear un flujo de trabajo](create-workflow.md)
+ [Utilice pasos predefinidos](nominal-steps-workflow.md)
+ [Uso de pasos de procesamiento de archivos personalizados](custom-step-details.md)
+ [Políticas de IAM para flujos de trabajo](workflow-execution-role.md)
+ [Gestión de excepciones para un flujo de trabajo](#exception-workflow)
+ [Monitoreo de la ejecución del flujo](cloudwatch-workflow.md)
+ [Creación de un flujo de trabajo a partir de una plantilla](workflow-template.md)
+ [Eliminación de un flujo de trabajo de un servidor de Transfer Family](#remove-workflow-association)
+ [Restricciones y limitaciones de los flujos de trabajo administrados](#limitations-workflow)

Para obtener más ayuda sobre cómo empezar a utilizar los flujos de trabajo administrados, consulte los siguientes recursos: 
+ AWS Transfer Family vídeo de demostración [de flujos de trabajo gestionados](https://www.youtube.com/watch?v=t-iNqCRospw)
+ Entrada de blog [sobre cómo crear una plataforma de transferencia de archivos nativa de la nube mediante AWS Transfer Family flujos de trabajo](https://aws.amazon.com/blogs/architecture/building-a-cloud-native-file-transfer-platform-using-aws-transfer-family-workflows/)

# Crear un flujo de trabajo
<a name="create-workflow"></a>

Puede crear un flujo de trabajo gestionado mediante el Consola de administración de AWS, tal y como se describe en este tema. Para simplificar al máximo el proceso de creación de flujos de trabajo, existen paneles de ayuda contextual disponibles para la mayoría de las secciones de la consola.

Un flujo de trabajo consta de dos tipos de pasos:
+ **Pasos nominales**: los pasos nominales son pasos de procesamiento de archivos que desea aplicar a los archivos entrantes. Si selecciona más de un paso nominal, cada paso se procesa en una secuencia lineal.
+ Pasos **de gestión de excepciones: los controladores de excepciones son pasos** de procesamiento de archivos que se AWS Transfer Family ejecutan en caso de que algún paso nominal falle o provoque errores de validación.

**Crear un flujo de trabajo**

1. [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)Abra la consola en. AWS Transfer Family 

1. En el panel de navegación izquierdo, seleccione **Flujos de trabajo**.

1. En la página **Flujos de trabajo**, seleccione **Crear flujo de trabajo**.

1. En la página **Crear flujo de trabajo**, escriba una descripción. Esta descripción aparece en la página **Flujos de trabajo**.

1. En la sección **Pasos nominales**, seleccione **Añadir paso**. Añada uno o más pasos.

   1. Elija un tipo de paso entre las opciones disponibles. Para obtener más información acerca de los diferentes tipos de paso, consulte [Utilice pasos predefinidos](nominal-steps-workflow.md).

   1. Seleccione **Siguiente** y, a continuación, configure los parámetros del paso. 

   1. Seleccione **Siguiente** y, a continuación, revise los detalles del paso. 

   1. Seleccione **Crear paso** para añadir el paso y continuar.

   1. Siga añadiendo los pasos que necesite. El número máximo de pasos en un flujo de trabajo es 8.

   1. Tras añadir todos los pasos nominales necesarios, desplácese hacia abajo hasta la sección **Controladores de excepciones: *opcional*** y seleccione **Añadir paso**. 
**nota**  
Para estar informado de los errores en tiempo real, le recomendamos que configure los controladores de excepciones y los pasos que se ejecuten cuando se produzca un error en el flujo de trabajo.

1. Para configurar los controladores de excepciones, añada los pasos de la misma manera que se describió anteriormente. Si un archivo provoca que algún paso genere una excepción, los controladores de excepciones se invocan uno por uno. 

1. (Opcional) Desplácese hacia abajo hasta la sección **Etiquetas** y añada etiquetas a su flujo de trabajo.

1. Revise la configuración y seleccione **Crear flujo de trabajo**. 
**importante**  
Una vez que haya creado un flujo de trabajo, no podrá editarlo, así que asegúrese de revisar la configuración detenidamente.

## Configuración y ejecución de un flujo de trabajo
<a name="configure-workflow"></a>

Antes de poder ejecutar un flujo de trabajo, debe asociarlo a un servidor de Transfer Family.

**Configuración de Transfer Family para ejecutar un flujo de trabajo en los archivos cargados**

1. Abra la AWS Transfer Family consola en [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/).

1. En el panel de navegación izquierdo, seleccione **Servidores**. 
   + Para añadir el flujo de trabajo a un servidor existente, seleccione el servidor que desee utilizar para el flujo de trabajo.
   + También puede crear un servidor nuevo y agregarle el flujo de trabajo. Para obtener más información, consulte [Configuración de un punto final de servidor SFTP, FTPS o FTP](tf-server-endpoint.md).

1. En la página de detalles del servidor, desplácese hacia abajo hasta la sección **Detalles adicionales** y, a continuación, seleccione **Editar**. 
**nota**  
 De forma predeterminada, los servidores no tienen ningún flujo de trabajo asociado. Utilice la sección **Detalles adicionales** para asociar un flujo de trabajo al servidor seleccionado. 

1. En la página **Editar detalles adicionales**, en la sección **Flujos de trabajo administrados**, seleccione un flujo de trabajo para que se ejecute en todas las cargas.
**nota**  
Si aún no tiene un flujo de trabajo, seleccione **Crear un nuevo flujo de trabajo** para crear uno.

   1. Elija el ID del flujo de trabajo que desee utilizar. 

   1. Seleccione un rol de ejecución. Este es el rol que asume Transfer Family al ejecutar los pasos del flujo de trabajo. Para obtener más información, consulte [Políticas de IAM para flujos de trabajo](workflow-execution-role.md). Seleccione **Save**.  
![\[La pantalla de flujos de trabajo gestionados, que muestra los valores del flujo de trabajo y del rol de ejecución.\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-addtoserver.png)

**nota**  
Si ya no desea que un flujo de trabajo esté asociado al servidor, puede eliminar la asociación. Para obtener más información, consulte [Eliminación de un flujo de trabajo de un servidor de Transfer Family](transfer-workflows.md#remove-workflow-association).

**Ejecución de un flujo de trabajo**

Para ejecutar un flujo de trabajo, debe cargar un archivo en un servidor de Transfer Family que haya configurado con un flujo de trabajo asociado.

**nota**  
Cada vez que elimine un flujo de trabajo de un servidor y lo reemplace por uno nuevo o actualice la configuración del servidor (lo que afecta al rol de ejecución del flujo de trabajo), debe esperar, aproximadamente, 10 minutos antes de ejecutar el nuevo flujo de trabajo. El servidor de Transfer Family almacena en caché los detalles del flujo de trabajo y tarda 10 minutos en actualizar su caché.  
Además, debe cerrar sesión en cualquier sesión de SFTP activa y volver a iniciarla después del período de espera de 10 minutos para ver los cambios.

**Example**  

```
# Execute a workflow
> sftp bob@s-1234567890abcdef0.server.transfer.us-east-1.amazonaws.com

Connected to s-1234567890abcdef0.server.transfer.us-east-1.amazonaws.com.
sftp> put doc1.pdf
Uploading doc1.pdf to /amzn-s3-demo-bucket/home/users/bob/doc1.pdf
doc1.pdf                                                                    100% 5013KB 601.0KB/s   00:08    
sftp> exit
>
```

Una vez cargado el archivo, la acción definida se lleva a cabo en su archivo. Por ejemplo, si su flujo de trabajo contiene un paso de copiado, el archivo se copia en la ubicación que definió en ese paso. Puede usar Amazon CloudWatch Logs para realizar un seguimiento de los pasos que se ejecutaron y su estado de ejecución.

## Visualización de flujos de trabajo
<a name="view-details-workflow"></a>

Puede ver los detalles de los flujos de trabajo creados anteriormente o de las ejecuciones de los flujos de trabajo. Para ver estos detalles, puede usar la consola o el AWS Command Line Interface (AWS CLI). 

------
#### [ Console ]

**Visualización de flujos de trabajo**

1. Abre la AWS Transfer Family consola en [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/).

1. En el panel de navegación izquierdo, seleccione **Flujos de trabajo**. 

1. En la página **Flujos de trabajo**, elija un flujo de trabajo. 

   Se abrirá la página de detalles del flujo de trabajo.   
![\[La pantalla de detalles de los flujos de trabajo de Transfer Family, en la que se muestran la descripción, los pasos, los gestores de excepciones y las ejecuciones en curso.\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-overview.png)

------
#### [ CLI ]

Para ver los detalles del flujo de trabajo, utilice el comando de la CLI `describe-workflow`, tal y como se muestra en el siguiente ejemplo. Reemplace el ID del flujo de trabajo `w-1234567890abcdef0` con su propio valor. Para obtener más información, consulte [describe-workflow](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/transfer/describe-workflow.html) en la *Referencia de comando de AWS CLI *.

```
# View Workflow details
> aws transfer describe-workflow --workflow-id w-1234567890abcdef0
{
    "Workflow": {
        "Arn": "arn:aws:transfer:us-east-1:111122223333:workflow/w-1234567890abcdef0",
        "WorkflowId": "w-1234567890abcdef0",
        "Name": "Copy file to shared_files",
        "Steps": [
            {
                "Type": "COPY",
                "CopyStepDetails": {
                "Name": "Copy to shared",
                "FileLocation": {
                    "S3FileLocation": {
                        "Bucket": "amzn-s3-demo-bucket",
                        "Key": "home/shared_files/"
                    }
                }
                }
            }
        ],
        "OnException": {}
    }
}
```

------

Si tu flujo de trabajo se creó como parte de una AWS CloudFormation pila, puedes gestionarlo mediante la CloudFormation consola ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)).

![\[La pantalla de detalles de los flujos de trabajo de un flujo de trabajo que forma parte de una AWS CloudFormation pila, muestra el mensaje en el que se indica que se gestiona este flujo de trabajo. CloudFormation\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-cloudformation-link.png)


# Utilice pasos predefinidos
<a name="nominal-steps-workflow"></a>

Al crear un flujo de trabajo, puede optar por añadir uno de los siguientes pasos predefinidos que se describen en este tema. También puede optar por agregar sus propios pasos de procesamiento de archivos personalizados. Para obtener más información, consulte [Uso de pasos de procesamiento de archivos personalizados](custom-step-details.md).

**Topics**
+ [Copiar archivo](#copy-step-details)
+ [Descifrar el archivo](#decrypt-step-details)
+ [Etiquetado de archivos](#tag-step-details)
+ [Eliminar archivo](#delete-step-details)
+ [Variables con nombre para los flujos de trabajo](#workflow-named-variables)
+ [Ejemplo de flujo de trabajo de etiquetado y eliminación](#sourcefile-workflow)

## Copiar archivo
<a name="copy-step-details"></a>

El paso de copiar archivo crea una copia del archivo cargado en una nueva ubicación de Amazon S3. Actualmente, solo puede utilizar el paso de copiar archivos con Amazon S3.

En el siguiente paso de copiar archivos, se copian los archivos en la `test` carpeta de. *amzn-s3-demo-destination-bucket* 

Si el paso de copiar el archivo no es el primer paso del flujo de trabajo, puede especificar la **ubicación del archivo**. Al especificar la ubicación del archivo, puede copiar el archivo que se utilizó en el paso anterior o el archivo original que se cargó. Puede utilizar esta característica para realizar varias copias del archivo original y, al mismo tiempo, mantener intacto el archivo de origen para archivarlos y conservar los registros. Para ver un ejemplo, consulta [Ejemplo de flujo de trabajo de etiquetado y eliminación](#sourcefile-workflow).

![\[Pantalla de flujo de trabajo con Copia el archivo creado en el paso anterior... botón seleccionado.\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-step-copy.png)


### Proporcione el bucket y los detalles de la clave
<a name="copy-provide-bucket"></a>

Debe proporcionar el nombre del bucket y una clave para el destino del paso de copiar el archivo. La clave puede ser un nombre de ruta o un nombre de archivo. El hecho de que la clave se trate como un nombre de ruta o como un nombre de archivo depende de si termina la clave con la barra inclinada (`/`).

Si el último carácter es `/`, el archivo se copia en la carpeta, y su nombre no cambia. Si el último carácter es alfanumérico, se cambiará el nombre del archivo cargado al valor clave. En este caso, si ya existe un archivo con ese nombre, el comportamiento depende de la configuración del campo **Sobrescribir existente**.
+ Si se selecciona **Sobrescribir existente**, el archivo existente se reemplaza por el archivo que se está procesando.
+ Si no se selecciona **Sobrescribir existente**, no ocurre nada, y el procesamiento del flujo de trabajo se detiene.
**sugerencia**  
Si se ejecutan escrituras simultáneas en la misma ruta de archivo, es posible que se produzca un comportamiento inesperado al sobrescribir los archivos.

Por ejemplo, si el valor de la clave es `test/`, los archivos cargados se copian en la carpeta `test`. Si el valor de la clave es `test/today` (y la opción **Sobrescribir existente** está seleccionada), todos los archivos que cargue se copiarán en un archivo llamado `today` en la carpeta `test` y cada archivo posterior sobrescribirá al anterior.

**nota**  
Amazon S3 admite buckets y objetos y no existe jerarquía. Sin embargo, puede usar prefijos y delimitadores en los nombres de las claves de los objetos para establecer una jerarquía y organizar sus datos de forma similar a las carpetas.

### Utilizar una variable con nombre en el paso de copiar un archivo
<a name="named-variable-copy"></a>

En el paso de copiar un archivo, puede utilizar una variable para copiar, dinámicamente, los archivos en carpetas específicas del usuario. Actualmente, puede usar `${transfer:UserName}` o `${transfer:UploadDate}` como una variable para copiar archivos a una ubicación de destino para el usuario en concreto que carga los archivos o según la fecha actual.

En el siguiente ejemplo, si el usuario `richard-roe` carga un archivo, se copia en la carpeta `amzn-s3-demo-destination-bucket/richard-roe/processed/`. En el siguiente ejemplo, si el usuario `mary-major` carga un archivo, queda copiado en la carpeta `amzn-s3-demo-destination-bucket/mary-major/processed/`.

![\[Pantalla de parámetros para un paso de copia, que muestra el cubo y la clave, parametrizados mediante. UserName\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-step-copy-dynamic.png)


Del mismo modo, se puede utilizar `${transfer:UploadDate}` como variable para copiar los archivos a una ubicación de destino con el nombre de la fecha actual. En el siguiente ejemplo, si establece el destino `${transfer:UploadDate}/processed` en el 1 de febrero de 2022, los archivos cargados se copiarán en la carpeta `amzn-s3-demo-destination-bucket/2022-02-01/processed/`.

![\[Pantalla de parámetros para un paso de copia, que muestra el cubo y la clave, parametrizados mediante. UploadDate\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-step-copy-dynamic-date.png)


También puede utilizar estas dos variables juntas al combinar sus funciones. Por ejemplo, puede establecer el **prefijo de la clave de destino** en**folder/\$1\$1transfer:UserName\$1/\$1\$1transfer:UploadDate\$1/**, lo que crearía carpetas anidadas, por ejemplo. `folder/marymajor/2023-01-05/`

### Permisos de IAM para el paso de copiado
<a name="copy-step-iam"></a>

Para permitir que un paso de copiado se realice correctamente, asegúrese de que el rol de ejecución de su flujo de trabajo contenga los siguientes permisos.

```
{
    "Sid": "ListBucket",
    "Effect": "Allow",
    "Action": "s3:ListBucket",
    "Resource": [
        "arn:aws:s3:::amzn-s3-demo-destination-bucket"
    ]
}, {
    "Sid": "HomeDirObjectAccess",
    "Effect": "Allow",
    "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObjectVersion",
        "s3:DeleteObject",
        "s3:GetObjectVersion"
    ],
    "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
}
```

**nota**  
El permiso `s3:ListBucket` solo es necesario si no selecciona **Sobrescribir existente**. Este permiso comprueba el bucket para verificar si ya existe un archivo con el mismo nombre. Si ha seleccionado **Sobrescribir existente**, el flujo de trabajo no necesita comprobar el archivo y puede escribirlo sin más.  
Si sus archivos de Amazon S3 tienen etiquetas, debe añadir uno o dos permisos a su política de IAM.  
Añada `s3:GetObjectTagging` para un archivo de Amazon S3 que no tenga versiones.
Añada `s3:GetObjectVersionTagging` para un archivo de Amazon S3 que tenga versiones.

## Descifrar el archivo
<a name="decrypt-step-details"></a>

El blog sobre AWS almacenamiento tiene una entrada que describe cómo descifrar archivos de forma sencilla sin escribir ningún código mediante los flujos de trabajo gestionados por Transfer Family, [cifrar y descifrar archivos con PGP](https://aws.amazon.com/blogs/storage/encrypt-and-decrypt-files-with-pgp-and-aws-transfer-family/) y. AWS Transfer Family

### Algoritmos de cifrado simétrico compatibles
<a name="symmetric-algorithms"></a>

Para el descifrado PGP, Transfer Family admite algoritmos de cifrado simétrico que se utilizan para cifrar los datos reales de los archivos dentro de los archivos PGP.
+ Para obtener información detallada sobre los algoritmos de cifrado simétrico compatibles, consulte. [Algoritmos de cifrado simétrico PGP](key-management.md#pgp-symmetric-algorithms)
+ Para obtener información sobre los algoritmos de key pair de PGP que se utilizan con estos algoritmos simétricos, consulte. [Algoritmos de key pair PGP](key-management.md#pgp-key-algorithms)

### Utilizar el descifrado PGP en su flujo de trabajo
<a name="configure-decryption"></a>

Transfer Family cuenta con compatibilidad integrada para el descifrado Pretty Good Privacy (PGP). Puede utilizar el descifrado PGP en los archivos que se carguen mediante SFTP, FTPS o FTP a Amazon Simple Storage Service (Amazon S3) o Amazon Elastic File System (Amazon EFS). 

Para utilizar el descifrado PGP, debe crear y almacenar las claves privadas de PGP que se utilizarán para descifrar sus archivos. Por ello, los usuarios pueden cifrar los archivos mediante las claves de cifrado PGP correspondientes antes de cargarlos en el servidor de Transfer Family. Después de recibir los archivos cifrados, puede descifrarlos en su flujo de trabajo. Para ver un tutorial detallado, consulte [Configuración de un flujo de trabajo gestionado para descifrar un archivo](workflow-decrypt-tutorial.md).

Para obtener información sobre los algoritmos y recomendaciones de PGP compatibles, consulte. [Algoritmos de cifrado y descifrado PGP](key-management.md#pgp-encryption-algorithms)

**Uso del descifrado PGP en su flujo de trabajo**

1. Identifique un servidor de Transfer Family para alojar su flujo de trabajo o cree uno nuevo. Debe tener el ID del servidor antes de poder almacenar sus claves PGP en AWS Secrets Manager con el nombre secreto correcto.

1. Guarde su clave PGP AWS Secrets Manager con el nombre secreto requerido. Para obtener más información, consulte [Administración de claves PGP](manage-pgp-keys.md). Los flujos de trabajo pueden localizar, automáticamente, la clave PGP correcta que se utilizará para el descifrado en función del nombre secreto en Secrets Manager.
**nota**  
Cuando guardas secretos en Secrets Manager, Cuenta de AWS incurres en cargos. Para obtener más información acerca de los precios, consulte [AWS Secrets Manager Precios](https://aws.amazon.com/secrets-manager/pricing).

1. Cifre un archivo con su par de claves PGP. (Si desea obtener una lista de los clientes compatibles, consulte [Clientes PGP admitidos](pgp-key-clients.md).) Si está utilizando la línea de comando, utilice el siguiente comando. Para usar este comando, reemplace `username@example.com` por la dirección de correo electrónico que usó para crear el par de claves PGP. Reemplace `testfile.txt` por el nombre del archivo que desea cifrar. 

   ```
   gpg -e -r username@example.com testfile.txt
   ```
**importante**  
Al cifrar archivos para usarlos con AWS Transfer Family flujos de trabajo, asegúrese siempre de especificar un destinatario no anónimo mediante el parámetro. `-r` El cifrado anónimo (sin especificar un destinatario) puede provocar errores de descifrado en el flujo de trabajo, ya que el sistema no podrá identificar qué clave utilizar para el descifrado. La información sobre la depuración de este problema está disponible en. [Solucione problemas de cifrado de destinatarios anónimos](workflow-issues.md#workflows-decrypt-anonymous) 

1. Suba el archivo cifrado a su servidor de Transfer Family.

1. Configure un paso de descifrado en su flujo de trabajo. Para obtener más información, consulte [Añada un paso de descifrado](#decrypt-step-procedure).

### Añada un paso de descifrado
<a name="decrypt-step-procedure"></a>

Un paso de descifrado descifra un archivo cifrado que se cargó en Amazon S3 o Amazon EFS como parte de su flujo de trabajo. Para obtener información detallada sobre la configuración del cifrado, consulte [Utilizar el descifrado PGP en su flujo de trabajo](#configure-decryption).

Al crear el paso de descifrado para un flujo de trabajo, debe especificar el destino de los archivos descifrados. También debe seleccionar si desea sobrescribir los archivos existentes si ya existe un archivo en la ubicación de destino. Puede supervisar los resultados del flujo de trabajo de descifrado y obtener los registros de auditoría de cada archivo en tiempo real mediante Amazon CloudWatch Logs.

Tras elegir el tipo de **archivo de descifrado** para el paso, aparecerá la página de **configuración de parámetros**. Complete los valores de la sección **Configuración de parámetros de descifrado de PGP**.

Las opciones disponibles son las siguientes:
+ **Nombre del paso**: escriba un nombre descriptivo para el paso.
+ **Ubicación del archivo**: al especificar la ubicación del archivo, puede cifrar el archivo utilizado en el paso anterior o el archivo original que se cargó. 
**nota**  
Este parámetro no está disponible si este paso es el primero del flujo de trabajo.
+ **Destino de los archivos descifrados**: elija un bucket de Amazon S3 o un sistema de archivos Amazon EFS como destino del archivo descifrado.
  + Si elige Amazon S3, debe proporcionar un nombre de bucket de destino y un prefijo de clave. Para establecer los parámetros del prefijo de la clave de destino por nombre de usuario, introduzca **\$1\$1transfer:UserName\$1** como el **prefijo de la clave de destino**. De igual manera, para establecer los parámetros del prefijo de la clave de destino por fecha de carga, introduzca **\$1\$1Transfer:UploadDate\$1** para **el prefijo de la clave de destino**.
  + Si elige Amazon EFS, debe proporcionar una ruta y un sistema de archivos de destino.
**nota**  
La opción de almacenamiento que elija aquí debe coincidir con el sistema de almacenamiento que utilice el servidor de Transfer Family al que está asociado este flujo de trabajo. De lo contrario, se producirá un error al intentar ejecutar este flujo de trabajo.
+ **Sobrescribir existente**: si carga un archivo y ya existe un archivo con el mismo nombre de archivo en el destino, el comportamiento depende de la configuración de este parámetro:
  + Si se selecciona **Sobrescribir existente**, el archivo existente se reemplaza por el archivo que se está procesando.
  + Si no se selecciona **Sobrescribir existente**, no ocurre nada, y el procesamiento del flujo de trabajo se detiene.
**sugerencia**  
Si se ejecutan escrituras simultáneas en la misma ruta de archivo, es posible que se produzca un comportamiento inesperado al sobrescribir los archivos.

La siguiente captura de pantalla muestra un ejemplo de las opciones que puede elegir para el paso de descifrado del archivo. 

![\[La AWS Transfer Family consola, que muestra la sección Configurar los parámetros de descifrado de PGP con valores de muestra.\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-step-decrypt-details.png)


### Permisos de IAM para el paso de cifrado
<a name="decrypt-step-iam"></a>

Para permitir que un paso de descifrado se realice correctamente, asegúrese de que el rol de ejecución de su flujo de trabajo contenga los siguientes permisos.

```
{
    "Sid": "ListBucket",
    "Effect": "Allow",
    "Action": "s3:ListBucket",
    "Resource": [
        "arn:aws:s3:::amzn-s3-demo-destination-bucket"
    ]
}, {
    "Sid": "HomeDirObjectAccess",
    "Effect": "Allow",
    "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObjectVersion",
        "s3:DeleteObject",
        "s3:GetObjectVersion"
    ],
    "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
}, {
    "Sid": "Decrypt",
    "Effect": "Allow",
    "Action": [
        "secretsmanager:GetSecretValue",
    ],
    "Resource": "arn:aws:secretsmanager:region:account-id:secret:aws/transfer/*"
}
```

**nota**  
El permiso `s3:ListBucket` solo es necesario si no selecciona **Sobrescribir existente**. Este permiso comprueba el bucket para verificar si ya existe un archivo con el mismo nombre. Si ha seleccionado **Sobrescribir existente**, el flujo de trabajo no necesita comprobar el archivo y puede escribirlo sin más.  
Si sus archivos de Amazon S3 tienen etiquetas, debe añadir uno o dos permisos a su política de IAM.  
Añada `s3:GetObjectTagging` para un archivo de Amazon S3 que no tenga versiones.
Añada `s3:GetObjectVersionTagging` para un archivo de Amazon S3 que tenga versiones.

## Etiquetado de archivos
<a name="tag-step-details"></a>

Para etiquetar los archivos entrantes para su posterior procesamiento, utilice un paso de etiquetado. Introduzca el valor de la etiqueta que desea asignar a los archivos entrantes. Actualmente, la operación de etiquetado solo se admite si utiliza Amazon S3 para el almacenamiento de su servidor de Transfer Family.

El siguiente ejemplo de paso de etiquetado asigna `scan_outcome` y `clean` como la clave y el valor de la etiqueta respectivamente.

![\[Pantalla de flujos de trabajo que muestra los detalles de un paso de etiquetado.\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-step-tag.png)


Para permitir que un paso de etiquetado se realice correctamente, asegúrese de que el rol de ejecución de su flujo de trabajo contenga los siguientes permisos.

```
{
            "Sid": "Tag",
            "Effect": "Allow",
            "Action": [
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
}
```

**nota**  
Si su flujo de trabajo contiene un paso de etiquetado que se ejecuta antes de un paso de copiado o descifrado, debe añadir uno o dos permisos a su política de IAM.  
Añada `s3:GetObjectTagging` para un archivo de Amazon S3 que no tenga versiones.
Añada `s3:GetObjectVersionTagging` para un archivo de Amazon S3 que tenga versiones.

## Eliminar archivo
<a name="delete-step-details"></a>

Para eliminar un archivo procesado de un paso anterior del flujo de trabajo o para eliminar el archivo cargado originalmente, utilice un paso de eliminación de archivo.

![\[Pantalla de flujos de trabajo que muestra los detalles de un paso de eliminación.\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-step-delete.png)


Para permitir que un paso de eliminación se realice correctamente, asegúrese de que el rol de ejecución de su flujo de trabajo contenga los siguientes permisos.

```
{
            "Sid": "Delete",
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObjectVersion",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:secretsmanager:region:account-ID:secret:aws/transfer/*"
        }
```

## Variables con nombre para los flujos de trabajo
<a name="workflow-named-variables"></a>

Para los pasos de copiado y descifrado, puede utilizar una variable para realizar acciones de forma dinámica. Actualmente, AWS Transfer Family admite las siguientes variables con nombre.
+ Se utiliza `${transfer:UserName}` para copiar o descifrar archivos a un destino en función del usuario que los carga.
+ Se utiliza `${transfer:UploadDate}` para copiar o descifrar archivos a una ubicación de destino en función de la fecha actual.

## Ejemplo de flujo de trabajo de etiquetado y eliminación
<a name="sourcefile-workflow"></a>

El siguiente ejemplo ilustra un flujo de trabajo que etiqueta los archivos entrantes que deben ser procesados por una aplicación secundaria, como una plataforma de análisis de datos. Tras etiquetar el archivo entrante, el flujo de trabajo elimina el archivo cargado originalmente para ahorrar costos de almacenamiento.

------
#### [ Console ]

**Ejemplo de etiquetado y flujos de trabajo**

1. Abra la AWS Transfer Family consola en [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/).

1. En el panel de navegación izquierdo, seleccione **Flujos de trabajo**.

1. En la página **Flujos de trabajo**, seleccione **Crear flujo de trabajo**.

1. En la página **Crear flujo de trabajo**, escriba una descripción. Esta descripción aparece en la página **Flujos de trabajo**.

1. Añada el primer paso (copiado).

   1. En la sección **Pasos nominales**, seleccione **Añadir paso**.

   1. Seleccione **Copiar archivo**, y después **Siguiente**.

   1. Introduzca un nombre de paso y, a continuación, seleccione un bucket de destino y un prefijo de clave.  
![\[Pantalla de flujos de trabajo que muestra los detalles de un paso de copia, con el depósito de destino y el key prefijo.\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-step-copy-first-step.png)

   1. Seleccione **Siguiente** y, a continuación, revise los detalles del paso. 

   1. Seleccione **Crear paso** para añadir el paso y continuar.

1. Añada el segundo paso (etiquetado).

   1. En la sección **Pasos nominales**, seleccione **Añadir paso**.

   1. Seleccione **Etiquete archivo**, y después **Siguiente**.

   1. Introduzca un nombre de paso.

   1. En **Ubicación del archivo**, seleccione **Etiquetar el archivo creado en el paso anterior**.

   1. Introduzca una **clave** y un **valor**.  
![\[La pantalla de configuración de un paso del flujo de trabajo de etiquetado, con el botón de opción Etiquetar el archivo creado a partir del paso anterior seleccionado.\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-step-tag.png)

   1. Seleccione **Siguiente** y, a continuación, revise los detalles del paso. 

   1. Seleccione **Crear paso** para añadir el paso y continuar.

1. Añada el tercer paso (eliminación).

   1. En la sección **Pasos nominales**, seleccione **Añadir paso**.

   1. Seleccione **Eliminar pilas** y, a continuación, **Siguiente**.  
![\[La pantalla de configuración de un paso del flujo de trabajo de eliminación, con el botón de opción Eliminar el archivo fuente original seleccionado.\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-step-delete.png)

   1. Introduzca un nombre de paso.

   1. En **Ubicación del archivo**, seleccione **Eliminar el archivo fuente original**.

   1. Seleccione **Siguiente** y, a continuación, revise los detalles del paso. 

   1. Seleccione **Crear paso** para añadir el paso y continuar.

1. Revise la configuración del flujo de trabajo y, a continuación, seleccione **Crear flujo de trabajo**. 

------
#### [ CLI ]

**Ejemplo de etiquetado y flujos de trabajo**

1. Guarde el siguiente código en un archivo, por ejemplo, `tagAndMoveWorkflow.json`. Reemplace cada `user input placeholder` por su propia información. 

   ```
   [
      {
          "Type": "COPY",
          "CopyStepDetails": {
             "Name": "CopyStep",
             "DestinationFileLocation": {
                "S3FileLocation": {
                   "Bucket": "amzn-s3-demo-bucket",
                   "Key": "test/"
                }
             }
          }
      },
      {
          "Type": "TAG",
          "TagStepDetails": {
             "Name": "TagStep",
             "Tags": [
                {
                   "Key": "name",
                   "Value": "demo"
                }
             ],
             "SourceFileLocation": "${previous.file}"
          }
      },
      {
         "Type": "DELETE",
         "DeleteStepDetails":{
            "Name":"DeleteStep",
            "SourceFileLocation": "${original.file}"
         }
     }
   ]
   ```

   El primer paso copia el archivo cargado en una nueva ubicación de Amazon S3. El segundo paso agrega una etiqueta (par clave-valor) al archivo (`previous.file`) que se copió en la nueva ubicación. Y, por último, el tercer paso elimina el archivo original (`original.file`).

1. Cree un flujo de trabajo a partir del archivo guardado. Reemplace cada `user input placeholder` por su propia información.

   ```
   aws transfer create-workflow --description "short-description" --steps file://path-to-file --region region-ID
   ```

   Por ejemplo: 

   ```
   aws transfer create-workflow --description "copy-tag-delete workflow" --steps file://tagAndMoveWorkflow.json --region us-east-1
   ```
**nota**  
Para obtener más información sobre el uso de archivos para cargar parámetros, consulte [Cómo cargar parámetros desde un archivo](https://docs.aws.amazon.com//cli/latest/userguide/cli-usage-parameters-file.html).

1. Actualización de un servidor existente.
**nota**  
En este paso, se supone que ya tiene un servidor de Transfer Family y que desea asociarle un flujo de trabajo. Si no es así, consulte [Configuración de un punto final de servidor SFTP, FTPS o FTP](tf-server-endpoint.md). Reemplace cada `user input placeholder` por su propia información.

   ```
   aws transfer update-server --server-id server-ID --region region-ID 
     --workflow-details '{"OnUpload":[{ "WorkflowId": "workflow-ID","ExecutionRole": "execution-role-ARN"}]}'
   ```

   Por ejemplo:

   ```
   aws transfer update-server --server-id s-1234567890abcdef0 --region us-east-2 
     --workflow-details '{"OnUpload":[{ "WorkflowId": "w-abcdef01234567890","ExecutionRole": "arn:aws:iam::111111111111:role/nikki-wolf-execution-role"}]}'
   ```

------

# Uso de pasos de procesamiento de archivos personalizados
<a name="custom-step-details"></a>

Al utilizar un paso de procesamiento de archivos personalizado, puede utilizar su propia lógica de procesamiento de archivos con AWS Lambda. Al recibir los archivos, un servidor de Transfer Family invoca una función de Lambda que contiene una lógica de procesamiento de archivos personalizada, como el cifrado de archivos, la detección de malware o la comprobación de tipos de archivos incorrectos. En el siguiente ejemplo, el rol de AWS Lambda de destino se utiliza para procesar el archivo de salida del paso anterior.

![\[La pantalla de pasos personalizados, con el botón de opción Aplicar procesamiento personalizado al archivo creado a partir del paso anterior seleccionado y una función Lambda que aparece en el campo Objetivo.\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-step-custom.png)


**nota**  
Para ver una función de Lambda de ejemplo, consulte [Ejemplo de función de Lambda para un paso de flujo de trabajo personalizado](#example-workflow-lambda). Para ver eventos de ejemplo (incluida la ubicación de los archivos que se pasan a Lambda), consulte [Ejemplo de eventos enviados AWS Lambda al cargar el archivo](#example-workflow-lambdas).

Con un paso de flujo de trabajo personalizado, debe configurar la función Lambda para llamar a la operación de la [SendWorkflowStepState](https://docs.aws.amazon.com/transfer/latest/APIReference/API_SendWorkflowStepState.html)API. `SendWorkflowStepState`notifica a la ejecución del flujo de trabajo que el paso se ha completado correctamente o con un estado de error. El estado de la operación de la API `SendWorkflowStepState` invoca un paso del controlador de excepciones o un paso nominal en la secuencia lineal en función del resultado de la función de Lambda. 

Si se produce un error en la función Lambda o se agota el tiempo de espera, se produce un error en el paso y se muestra `StepErrored` en los registros. CloudWatch Si la función de Lambda forma parte del paso nominal y la función responde a `SendWorkflowStepState` con `Status="FAILURE"` o se agota el tiempo de espera, el flujo continúa con los pasos del controlador de excepciones. En este caso, el flujo de trabajo no continúa ejecutando los pasos nominales restantes (si los hay). Para obtener más información, consulte [Gestión de excepciones para un flujo de trabajo](transfer-workflows.md#exception-workflow).

Al llamar a la operación de la API `SendWorkflowStepState`, debe enviar los siguientes parámetros:

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

Puede extraer `ExecutionId`, `Token` y `WorkflowId` del evento de entrada que se pasa cuando se ejecuta la función de Lambda (en las siguientes secciones se muestran ejemplos). El valor `Status` puede ser `SUCCESS` o `FAILURE`. 

Para poder llamar a la operación de `SendWorkflowStepState` API desde su función Lambda, debe usar una versión del AWS SDK que se publicó después de la introducción de [Managed Workflows](doc-history.md#workflows-introduced).

## Uso de varias funciones de Lambda de forma consecutiva
<a name="multiple-lambdas"></a>

Cuando se utilizan varios pasos personalizados uno tras otro, la opción de **ubicación del archivo** funciona de forma diferente que si se utiliza un solo paso personalizado. Transfer Family no permite volver a pasar el archivo procesado por Lambda para usarlo como entrada del siguiente paso. Por lo tanto, si tiene varios pasos personalizados configurados para usar la opción `previous.file`, todos usarán la misma ubicación de archivo (la ubicación del archivo de entrada para el primer paso personalizado).

**nota**  
La configuración `previous.file` también funciona de forma diferente si tiene un paso predefinido (etiquetado, copiado, descifrado o eliminación) después de un paso personalizado. Si el paso predefinido está configurado para usar la configuración `previous.file`, el paso predefinido usará el mismo archivo de entrada que el paso personalizado. El archivo procesado del paso personalizado no se pasa al paso predefinido. 

## Acceso a un archivo después de un procesamiento personalizado
<a name="process-uploaded-file"></a>

Si utiliza Amazon S3 como almacenamiento y su flujo de trabajo incluye un paso personalizado que realiza acciones en el archivo cargado originalmente, los pasos siguientes no podrán acceder al archivo procesado. Es decir, ningún paso posterior al paso personalizado puede hacer referencia al archivo actualizado desde la salida del paso personalizado. 

Suponga, por ejemplo, que tiene los tres pasos siguientes en su flujo de trabajo. 
+ **Paso 1**: cargue un archivo con el nombre `example-file.txt`.
+ **Paso 2**: invoque una función de Lambda que cambie `example-file.txt` de alguna manera.
+ **Paso 3**: intente realizar un procesamiento adicional en la versión actualizada de `example-file.txt`.

Si configura el `sourceFileLocation` para que el paso 3 sea `${original.file}`, el paso 3 utilizará la ubicación original del archivo desde el momento en que el servidor cargó el archivo para almacenarlo en el paso 1. Si utiliza `${previous.file}` para el paso 3, el paso 3 reutilizará la ubicación del archivo que el paso 2 utilizó como entrada.

Por lo tanto, el paso 3 produce un error. Por ejemplo, si el paso 3 intenta copiar el `example-file.txt` actualizado, obtendrá el siguiente error:

```
{
    "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"
    },
```

Este error se produce porque el paso personalizado modifica la etiqueta de la entidad (ETag) para `example-file.txt` que no coincida con el archivo original.

**nota**  
Este comportamiento no se produce si utiliza Amazon EFS porque Amazon EFS no utiliza etiquetas de entidad para identificar los archivos.

## Ejemplo de eventos enviados AWS Lambda al cargar el archivo
<a name="example-workflow-lambdas"></a>

Los siguientes ejemplos muestran los eventos que se envían AWS Lambda cuando se completa la carga de un archivo. Un ejemplo utiliza un servidor de Transfer Family en el que el dominio está configurado con Amazon S3. El otro ejemplo utiliza un servidor de Transfer Family donde el dominio usa Amazon EFS. 

------
#### [ 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": "amzn-s3-demo-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"
    }
}
```

------

## Ejemplo de función de Lambda para un paso de flujo de trabajo personalizado
<a name="example-workflow-lambda"></a>

La siguiente función Lambda extrae la información relativa al estado de la ejecución y, a continuación, llama a la operación de la [SendWorkflowStepState](https://docs.aws.amazon.com/transfer/latest/APIReference/API_SendWorkflowStepState.html)API para devolver el estado al flujo de trabajo del paso`SUCCESS`, ya sea una o varias. `FAILURE` Antes de que su función llame a la operación de la API `SendWorkflowStepState`, puede configurar Lambda para que realice una acción en función de la lógica del flujo de trabajo. 

```
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)
    }
```

## Permisos de IAM para un paso personalizado
<a name="custom-step-iam"></a>

Para permitir que un paso que llame a una Lambda se realice correctamente, asegúrese de que el rol de ejecución de su flujo de trabajo contenga los siguientes permisos.

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

# Políticas de IAM para flujos de trabajo
<a name="workflow-execution-role"></a>

Al añadir un flujo de trabajo a un servidor, debe seleccionar un rol de ejecución. El servidor utiliza este rol cuando ejecuta el flujo de trabajo. Si el rol no tiene los permisos adecuados, AWS Transfer Family no podrá ejecutar el flujo de trabajo. 

En esta sección se describe un posible conjunto de permisos AWS Identity and Access Management (IAM) que puede utilizar para ejecutar un flujo de trabajo. Más adelante en este tema se describen otros ejemplos. 

**nota**  
Si sus archivos de Amazon S3 tienen etiquetas, debe añadir uno o dos permisos a su política de IAM.  
Añada `s3:GetObjectTagging` para un archivo de Amazon S3 que no tenga versiones.
Añada `s3:GetObjectVersionTagging` para un archivo de Amazon S3 que tenga versiones.

**Creación de un rol de ejecución para su flujo de trabajo**

1. Cree una nueva función de IAM y añada la política AWS gestionada `AWSTransferFullAccess` a la función. Para obtener más información sobre cómo crear un nuevo rol de IAM, consulte [Creación de una política y un rol de IAM](requirements-roles.md).

1. Crear otra política con los siguientes permisos y asóciela al rol. Reemplace cada `user input placeholder` por su propia información.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ConsoleAccess",
               "Effect": "Allow",
               "Action": "s3:GetBucketLocation",
               "Resource": "*"
           },
           {
               "Sid": "ListObjectsInBucket",
               "Effect": "Allow",
               "Action": "s3:ListBucket",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket"
               ]
           },
           {
               "Sid": "AllObjectActions",
               "Effect": "Allow",
               "Action": "s3:*Object",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           },
           {
               "Sid": "GetObjectVersion",
               "Effect": "Allow",
               "Action": "s3:GetObjectVersion",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           },
           {
               "Sid": "Custom",
               "Effect": "Allow",
               "Action": [
                   "lambda:InvokeFunction"
               ],
               "Resource": [
                   "arn:aws:lambda:us-east-1:123456789012:function:function-name"
               ]
           },
           {
               "Sid": "Tag",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObjectTagging",
                   "s3:PutObjectVersionTagging"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           }
       ]
   }
   ```

1. Guarde este rol y especifíquelo como rol de ejecución cuando añada un flujo de trabajo a un servidor.
**nota**  
Al crear funciones de IAM, le AWS recomienda que restrinja el acceso a sus recursos tanto como sea posible para su flujo de trabajo.

## Relaciones de confianza del flujo de trabajo
<a name="workflows-trust"></a>

Los roles de ejecución del flujo de trabajo también requieren una relación de confianza con `transfer.amazonaws.com`. Para establecer una relación de confianza para AWS Transfer Family, consulte [Para establecer una relación de confianza](requirements-roles.md#establish-trust-transfer).

Mientras establece su relación de confianza, también puede tomar medidas para evitar el problema del *suplente confuso*. Para obtener una descripción de este problema, así como ejemplos de cómo evitarlo, consulte [Prevención de la sustitución confusa entre servicios](confused-deputy.md).

## Ejemplo de rol de ejecución: descifrado, copiado y etiquetado
<a name="example-workflow-role-copy-tag"></a>

Si tiene flujos de trabajo que incluyen pasos de etiquetado, copiado y descifrado, puede utilizar la siguiente política de IAM. Reemplace cada `user input placeholder` por su propia información. 

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CopyRead",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectTagging",
                "s3:GetObjectVersionTagging"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
        },
        {
            "Sid": "CopyWrite",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectTagging"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
        },
        {
            "Sid": "CopyList",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-source-bucket",
                "arn:aws:s3:::amzn-s3-demo-destination-bucket"
            ]
        },
        {
            "Sid": "Tag",
            "Effect": "Allow",
            "Action": [
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:RequestObjectTag/Archive": "yes"
                }
            }
        },
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-destination-bucket"
            ]
        },
        {
            "Sid": "HomeDirObjectAccess",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObjectVersion",
                "s3:DeleteObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
        },
        {
            "Sid": "Decrypt",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:aws/transfer/*"
        }
    ]
}
```

## Ejemplo de rol de ejecución: ejecutar un rol y eliminarlo
<a name="example-workflow-role-custom-delete"></a>

En este ejemplo, tiene un flujo de trabajo que invoca una AWS Lambda función. Si el flujo de trabajo elimina el archivo cargado y tiene un paso de controlador de excepciones para actuar en caso de que se produzca un error en la ejecución del flujo de trabajo en el paso anterior, utilice la siguiente política de IAM. Reemplace cada `user input placeholder` por su propia información. 

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Delete",
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:DeleteObjectVersion"
            ],
            "Resource": "arn:aws:s3:::bucket-name"
        },
        {
            "Sid": "Custom",
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:us-east-1:123456789012:function:function-name"
            ]
        }
    ]
}
```

## Gestión de excepciones para un flujo de trabajo
<a name="exception-workflow"></a>

Si se produce algún error durante la ejecución de un flujo de trabajo, se ejecutan los pasos de gestión de excepciones que especificó. Los pasos de gestión de errores de un flujo de trabajo se especifican del mismo modo en que se especifican los pasos nominales del flujo de trabajo. Por ejemplo, supongamos que ha configurado el procesamiento personalizado en pasos nominales para validar los archivos entrantes. Si se produce un error en la validación del archivo, un paso de gestión de excepciones puede enviar un correo electrónico al administrador.

El siguiente ejemplo de flujo de trabajo contiene dos pasos: 
+ Un paso nominal que comprueba si el archivo cargado está en formato CSV
+ Un paso de gestión de excepciones que envía un correo electrónico en caso de que el archivo cargado no esté en formato CSV y el paso nominal falle

Para iniciar el paso de gestión de excepciones, la AWS Lambda función del paso nominal debe responder con. `Status="FAILURE"` Para obtener más información sobre el control de errores, consulte [Uso de pasos de procesamiento de archivos personalizados](custom-step-details.md).

![\[\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflow-exception-sample.png)


# Monitoreo de la ejecución del flujo
<a name="cloudwatch-workflow"></a>

Amazon CloudWatch monitorea tus AWS recursos y las aplicaciones que ejecutas Nube de AWS en tiempo real. Puedes usar Amazon CloudWatch para recopilar y realizar un seguimiento de las métricas, que son variables que puedes medir para tus flujos de trabajo. Puedes ver las métricas del flujo de trabajo y los registros consolidados a través de Amazon CloudWatch.

## CloudWatch iniciar sesión en un flujo de trabajo
<a name="cloudwatch-workflow-logs"></a>

CloudWatch proporciona una auditoría y un registro consolidados del progreso y los resultados del flujo de trabajo.

**Ver los CloudWatch registros de Amazon para flujos de trabajo**

1. Abre la CloudWatch consola de Amazon en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación izquierdo, seleccione **Registros** y, a continuación, **Grupos de registros**.

1. En la página de **grupos de registros**, en la barra de navegación, elige la región correcta para tu AWS Transfer Family servidor.

1. Elija el grupo de registro que corresponda a su servidor.

   Por ejemplo, si su ID del servidor es `s-1234567890abcdef0`, su grupo de registros es `/aws/transfer/s-1234567890abcdef0`.

1. En la página de detalles del grupo de registros de su servidor, se muestran los flujos de registro más recientes. Hay dos flujos de registro para el usuario que está explorando: 
   + Uno para cada sesión del Protocolo de File Transfer (SFTP) de Secure Shell (SSH).
   + Uno para el flujo de trabajo que se está ejecutando en el servidor. El formato del flujo de registro del flujo de trabajo es `username.workflowID.uniqueStreamSuffix`.

   Por ejemplo, si su usuario es `mary-major`, tendrá los flujos de registro siguientes:

   ```
   mary-major-east.1234567890abcdef0
   mary.w-abcdef01234567890.021345abcdef6789
   ```
**nota**  
 Los identificadores alfanuméricos de 16 dígitos que se muestran en este ejemplo son ficticios. Los valores que ves en Amazon CloudWatch son diferentes. 

La página de **Eventos de registro** para `mary-major-usa-east.1234567890abcdef0` muestra los detalles de cada sesión de usuario y el flujo de registro `mary.w-abcdef01234567890.021345abcdef6789` contiene los detalles del flujo de trabajo. 

 El siguiente es un ejemplo de flujo de registro para `mary.w-abcdef01234567890.021345abcdef6789`, basado en un flujo de trabajo (`w-abcdef01234567890`) que contiene un paso de copiado. 

```
{
    "type": "ExecutionStarted",
    "details": {
        "input": {
            "initialFileLocation": {
                "bucket": "amzn-s3-demo-bucket",
                "key": "mary/workflowSteps2.json",
                "versionId": "version-id",
                "etag": "etag-id"
            }
        }
    },
    "workflowId":"w-abcdef01234567890",
    "executionId":"execution-id",
    "transferDetails": {
        "serverId":"s-server-id",
        "username":"mary",
        "sessionId":"session-id"
    }
},
{
    "type":"StepStarted",
    "details": {
        "input": {
            "fileLocation": {
                "backingStore":"S3",
                "bucket":"amzn-s3-demo-bucket",
                "key":"mary/workflowSteps2.json",
                "versionId":"version-id",
                "etag":"etag-id"
            }
        },
        "stepType":"COPY",
        "stepName":"copyToShared"
    },
    "workflowId":"w-abcdef01234567890",
    "executionId":"execution-id",
    "transferDetails": {
        "serverId":"s-server-id",
        "username":"mary",
        "sessionId":"session-id"
    }
},
{
    "type":"StepCompleted",
    "details":{
        "output":{},
        "stepType":"COPY",
        "stepName":"copyToShared"
    },
    "workflowId":"w-abcdef01234567890",
    "executionId":"execution-id",
    "transferDetails":{
        "serverId":"server-id",
        "username":"mary",
        "sessionId":"session-id"
    }
},
{
    "type":"ExecutionCompleted",
    "details": {},
    "workflowId":"w-abcdef01234567890",
    "executionId":"execution-id",
    "transferDetails":{
        "serverId":"s-server-id",
        "username":"mary",
        "sessionId":"session-id"
    }
}
```

## CloudWatch métricas para flujos de trabajo
<a name="cloudwatch-workflows-metrics"></a>

AWS Transfer Family proporciona varias métricas para los flujos de trabajo. Puede ver las métricas de la cantidad de flujos de trabajo que se iniciaron, se completaron correctamente y se produjeron errores en el minuto anterior. Todas las CloudWatch métricas de Transfer Family se describen en[Uso de CloudWatch métricas para servidores Transfer Family](metrics.md).

# Creación de un flujo de trabajo a partir de una plantilla
<a name="workflow-template"></a>

Puede implementar una CloudFormation pila que cree un flujo de trabajo y un servidor a partir de una plantilla. Este procedimiento contiene un ejemplo que puede utilizar para implementar rápidamente un flujo de trabajo.

**Para crear una CloudFormation pila que cree un AWS Transfer Family flujo de trabajo y un servidor**

1. Abre la CloudFormation consola en [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Guarde el siguiente código en un archivo.

------
#### [ YAML ]

   ```
   AWSTemplateFormatVersion: 2010-09-09
   Resources:
     SFTPServer:
       Type: 'AWS::Transfer::Server'
       Properties:
         WorkflowDetails:
           OnUpload:
             - ExecutionRole: workflow-execution-role-arn
               WorkflowId: !GetAtt
                 - TransferWorkflow
                 - WorkflowId
     TransferWorkflow:
       Type: AWS::Transfer::Workflow
       Properties:
         Description: Transfer Family Workflows Blog
         Steps:
           - Type: COPY
             CopyStepDetails:
               Name: copyToUserKey
               DestinationFileLocation:
                 S3FileLocation:
                   Bucket: archived-records
                   Key: ${transfer:UserName}/
               OverwriteExisting: 'TRUE'
           - Type: TAG
             TagStepDetails:
               Name: tagFileForArchive
               Tags:
                 - Key: Archive
                   Value: yes
           - Type: CUSTOM
             CustomStepDetails:
               Name: transferExtract
               Target: arn:aws:lambda:region:account-id:function:function-name
               TimeoutSeconds: 60
           - Type: DELETE
             DeleteStepDetails:
               Name: DeleteInputFile
               SourceFileLocation: '${original.file}'
         Tags:
           - Key: Name
             Value: TransferFamilyWorkflows
   ```

------
#### [ JSON ]

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Resources": {
           "SFTPServer": {
               "Type": "AWS::Transfer::Server",
               "Properties": {
                   "WorkflowDetails": {
                       "OnUpload": [
                           {
                               "ExecutionRole": "workflow-execution-role-arn",
                               "WorkflowId": {
                                   "Fn::GetAtt": [
                                       "TransferWorkflow",
                                       "WorkflowId"
                                   ]
                               }
                           }
                       ]
                   }
               }
           },
           "TransferWorkflow": {
               "Type": "AWS::Transfer::Workflow",
               "Properties": {
                   "Description": "Transfer Family Workflows Blog",
                   "Steps": [
                       {
                           "Type": "COPY",
                           "CopyStepDetails": {
                               "Name": "copyToUserKey",
                               "DestinationFileLocation": {
                                   "S3FileLocation": {
                                       "Bucket": "archived-records",
                                       "Key": "${transfer:UserName}/"
                                   }
                               },
                               "OverwriteExisting": "TRUE"
                           }
                       },
                       {
                           "Type": "TAG",
                           "TagStepDetails": {
                               "Name": "tagFileForArchive",
                               "Tags": [
                                   {
                                       "Key": "Archive",
                                       "Value": "yes"
                                   }
                               ]
                           }
                       },
                       {
                           "Type": "CUSTOM",
                           "CustomStepDetails": {
                               "Name": "transferExtract",
                               "Target": "arn:aws:lambda:region:account-id:function:function-name",
                               "TimeoutSeconds": 60
                           }
                       },
                       {
                           "Type": "DELETE",
                           "DeleteStepDetails": {
                               "Name": "DeleteInputFile",
                               "SourceFileLocation": "${original.file}"
                           }
                       }
                   ],
                   "Tags": [
                       {
                           "Key": "Name",
                           "Value": "TransferFamilyWorkflows"
                       }
                   ]
               }
           }
       }
   }
   ```

------

1. Reemplace los elementos siguientes por sus propios valores.
   + Reemplace *`workflow-execution-role-arn`* por el ARN de un rol de ejecución de flujo de trabajo real. Por ejemplo, `arn:aws:transfer:us-east-2:111122223333:workflow/w-1234567890abcdef0`
   + Reemplace `arn:aws:lambda:region:account-id:function:function-name` por el ARN de la función de Lambda. Por ejemplo, `arn:aws:lambda:us-east-2:123456789012:function:example-lambda-idp`.

1. Siga las instrucciones para implementar una CloudFormation pila a partir de una plantilla existente en [Seleccionar una plantilla de pila](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-console-create-stack-template.html) en la Guía del *AWS CloudFormation usuario*.

Una vez desplegada la pila, puede ver sus detalles en la pestaña **Salidas** de la CloudFormation consola. La plantilla crea un nuevo servidor AWS Transfer Family SFTP que utiliza usuarios gestionados por el servicio y un nuevo flujo de trabajo, y asocia el flujo de trabajo al nuevo servidor.

## Eliminación de un flujo de trabajo de un servidor de Transfer Family
<a name="remove-workflow-association"></a>

Si ha asociado un flujo de trabajo a un servidor de Transfer Family y ahora quiere eliminar esa asociación, puede hacerlo mediante la consola o mediante programación.

------
#### [ Console ]

**Eliminación de un flujo de trabajo de un servidor de Transfer Family**

1. Abra la consola en AWS Transfer Family . [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)

1. En el panel de navegación izquierdo, seleccione **Servidores**.

1. Elija el identificador del servidor en la columna **ID del servidor**.

1. En la página de detalles del servidor, desplácese hacia abajo hasta la sección **Detalles adicionales** y, a continuación, seleccione **Editar**. 

1. En la página **Editar detalles adicionales**, en la sección **Flujos de trabajo administrados**, borre la información de todos los ajustes:
   + Seleccione el guion (-) en la lista de flujos de trabajo del **Flujo de trabajo para cargar archivos completos**.
   + De no estar ya autorizado, seleccione el guion (-) de la lista de flujos de trabajo del **Flujo de trabajo para cargar archivos parciales**.
   +  Seleccione el guion (-) de la lista de roles para el **Rol de ejecución de flujos de trabajo administrados**.

   Si no ve el guion, desplácese hacia arriba hasta que lo vea, ya que es el primer valor de cada menú.

   El resultado debe ser similar a lo siguiente.  
![\[El panel Flujos de trabajo gestionados, que muestra todos los parámetros borrados.\]](http://docs.aws.amazon.com/es_es/transfer/latest/userguide/images/workflows-remove-from-server.png)

1. Desplácese hacia abajo y seleccione **Guardar** para guardar sus cambios.

------
#### [ CLI ]

Utilice la llamada `update-server` (o `UpdateServer` para la API) y proporcione argumentos vacíos para los parámetros `OnUpload` y `OnPartialUpload`.

Desde AWS CLI, ejecute el siguiente comando:

```
aws transfer update-server --server-id your-server-id --workflow-details '{"OnPartialUpload":[],"OnUpload":[]}'
```

Reemplace `your-server-id` por el ID de su servidor. Por ejemplo, si el ID de su servidor es `s-01234567890abcdef`, el comando es el siguiente:

```
aws transfer update-server --server-id s-01234567890abcdef --workflow-details '{"OnPartialUpload":[],"OnUpload":[]}'
```

------

## Restricciones y limitaciones de los flujos de trabajo administrados
<a name="limitations-workflow"></a>

**Restricciones**

Las siguientes restricciones se aplican actualmente a los flujos de trabajo de procesamiento posteriores a la carga para AWS Transfer Family. 
+ No se admiten las AWS Lambda funciones entre cuentas y regiones. Sin embargo, puede realizar copias entre cuentas, siempre que sus políticas AWS Identity and Access Management (de IAM) estén configuradas correctamente.
+ Para todos los pasos del flujo de trabajo, todos los buckets de Amazon S3 a los que acceda el flujo de trabajo deben estar en la misma región que el flujo de trabajo en sí.
+ Para un paso de descifrado, el destino del descifrado debe coincidir con el origen de la región y el almacenamiento de respaldo (por ejemplo, si el archivo que se va a descifrar está almacenado en Amazon S3, el destino especificado también debe estar en Amazon S3).
+ Solo se admiten los pasos personalizados asíncronos.
+ Los tiempos de espera de los pasos personalizados son aproximados. Es decir, es posible que el tiempo de espera tarde un poco más de lo especificado. Además, el flujo de trabajo depende de la función de Lambda. Por lo tanto, si la función se retrasa durante la ejecución, el flujo de trabajo no es consciente del retraso.
+ Si supera el límite de limitación, Transfer Family no añade operaciones de flujo de trabajo a la cola.
+ Los flujos de trabajo no se inician para los archivos que tienen un tamaño de 0. Los archivos con un tamaño superior a 0 inician el flujo de trabajo asociado.
+ Puede adjuntar un flujo de trabajo de procesamiento de archivos a un servidor Transfer Family que utilice el AS2 protocolo; sin embargo, AS2 los mensajes no ejecutan los flujos de trabajo adjuntos al servidor. 

**Limitaciones**

 Además, los siguientes límites funcionales se aplican a los flujos de trabajo de Transfer Family: 
+ El número máximo de flujos de trabajo por región y por cuenta está limitado a 10.
+ El tiempo de espera máximo para los pasos personalizados es de 30 minutos.
+ El número máximo de pasos en un flujo de trabajo es 8.
+ El número máximo de etiquetas por grupo de trabajo es 50.
+ El número máximo de ejecuciones simultáneas que contienen un paso de descifrado es de 250 por flujo de trabajo.
+ Puede almacenar un máximo de 3 claves privadas PGP, por servidor de Transfer Family y por usuario.
+ El tamaño máximo de un archivo de datos es de 10 GB.
+ Limitamos la nueva tasa de ejecución mediante un sistema de [buckets de tokens](https://en.wikipedia.org/wiki/Token_bucket) con una capacidad de ampliación de 100 y una tasa de recarga de 1.
+ Cada vez que elimine un flujo de trabajo de un servidor y lo reemplace por uno nuevo o actualice la configuración del servidor (lo que afecta al rol de ejecución del flujo de trabajo), debe esperar, aproximadamente, 10 minutos antes de ejecutar el nuevo flujo de trabajo. El servidor de Transfer Family almacena en caché los detalles del flujo de trabajo y tarda 10 minutos en actualizar su caché.

  Además, debe cerrar sesión en cualquier sesión de SFTP activa y volver a iniciarla después del período de espera de 10 minutos para ver los cambios.