AWS::Transfer::Workflow - AWS CloudFormation


Allows you to create a workflow with specified steps and step details the workflow invokes after file transfer completes. After creating a workflow, you can associate the workflow created with any transfer servers by specifying the workflow-details field in CreateServer and UpdateServer operations.


To declare this entity in your AWS CloudFormation template, use the following syntax:


{ "Type" : "AWS::Transfer::Workflow", "Properties" : { "Description" : String, "OnExceptionSteps" : [ WorkflowStep, ... ], "Steps" : [ WorkflowStep, ... ], "Tags" : [ Tag, ... ] } }


Type: AWS::Transfer::Workflow Properties: Description: String OnExceptionSteps: - WorkflowStep Steps: - WorkflowStep Tags: - Tag



Specifies the text description for the workflow.

Required: No

Type: String

Pattern: ^[\w\- ]*$

Minimum: 0

Maximum: 256

Update requires: Replacement


Specifies the steps (actions) to take if errors are encountered during execution of the workflow.

Required: No

Type: Array of WorkflowStep

Maximum: 8

Update requires: Replacement


Specifies the details for the steps that are in the specified workflow.

Required: Yes

Type: Array of WorkflowStep

Maximum: 8

Update requires: Replacement


Key-value pairs that can be used to group and search for workflows. Tags are metadata attached to workflows for any purpose.

Required: No

Type: Array of Tag

Maximum: 50

Update requires: No interruption

Return values



The Fn::GetAtt intrinsic function returns a value for a specified attribute of this type. The following are the available attributes and sample return values.

For more information about using the Fn::GetAtt intrinsic function, see Fn::GetAtt.


A unique identifier for a workflow.


Create workflow from a file

You can save workflow step information into a text file, and then use that file to create a workflow, as in the following example. The following example assumes you have saved your workflow steps into example-file.json (in the same folder from where you run the command), and that you wish to create the workflow in the N. Virginia (us-east-1) region.

aws transfer create-workflow --description "example workflow from a file" --steps file://example-file.json --region us-east-1

Create workflow from a template

You can create a workflow from a template. First, open the CloudFormation console. Next, follow the instructions for deploying AWS CloudFormation stack from an existing template in Selecting a stack template in the AWS CloudFormation User Guide.

Save the following code to a file, and upload it to CloudFormation when prompted, making sure to replace items as follows:

  • Replace your-workflow-execution-role-arn with the ARN for an actual workflow execution role.

  • replace arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:my-function-name with the ARN for your Lambda function. For example, arn:aws:lambda:us-east-2:123456789012:function:example-lambda-idp.


{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "SFTPServer": { "Type": "AWS::Transfer::Server", "Properties": { "WorkflowDetails": { "OnUpload": [ { "ExecutionRole": "your-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::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:my-function-name", "TimeoutSeconds": 60 } }, { "Type": "DELETE", "DeleteStepDetails": { "Name": "DeleteInputFile", "SourceFileLocation": "${original.file}" } } ], "Tags": [ { "Key": "Name", "Value": "TransferFamilyWorkflows" } ] } } } }


AWSTemplateFormatVersion: 2010-09-09 Resources: SFTPServer: Type: 'AWS::Transfer::Server' Properties: WorkflowDetails: OnUpload: - ExecutionRole: your-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::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:my-function-name TimeoutSeconds: 60 - Type: DELETE DeleteStepDetails: Name: DeleteInputFile SourceFileLocation: '${original.file}' Tags: - Key: Name Value: TransferFamilyWorkflows