

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Desenvolver fluxos de trabalho com o Step Functions
<a name="developing-workflows"></a>

Recomendamos começar a criar fluxos de trabalho no console do Step Functions e no editor visual do Workflow Studio. É possível começar em uma tela em branco ou escolher modelos iniciais para cenários comuns.

O processo de criação dos fluxos de trabalho exige as seguintes tarefas:
+ Definir o fluxo de trabalho
+ Executar e depurar o fluxo de trabalho
+ Implantar o fluxo de trabalho

Defina uma máquina de estado na Amazon States Language. É possível criar manualmente as definições da Amazon States Language, mas o Workflow Studio será apresentado em tutoriais. Com o Workflow Studio, é possível definir a máquina, visualizar e editar as etapas, executar e depurar o fluxo de trabalho e visualizar os resultados, tudo no console do Step Functions.

**Como trabalhar com o Workflow Studio no Visual Studio Code**  
Com o AWS kit de ferramentas, você pode usar o Workflow Studio de dentro do VS Code para visualizar, criar e até mesmo testar estados individuais em suas máquinas de estado. Você fornece entradas de estado e define variáveis, inicia o teste e pode ver como os dados são transformados. É possível ajustar o fluxo de trabalho e testar novamente. Quando terminar, é possível aplicar as alterações para atualizar a máquina de estado. Para obter mais informações, consulte [Como trabalhar o Workflow Studio](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions-workflowstudio.html) no AWS Toolkit for Visual Studio Code. 

Você também pode usar muitos recursos do Step Functions a partir do AWS Command Line Interface (AWS CLI). Por exemplo, é possível usar uma máquina de estado e listar as máquinas de estado existentes. Você pode usar os comandos Step Functions no AWS CLI para iniciar e gerenciar execuções, pesquisar atividades, registrar batimentos cardíacos de tarefas e muito mais. Para obter uma lista completa de comandos do Step Functions, descrições dos argumentos disponíveis e exemplos que mostram o uso, consulte a *Referência de comando da AWS CLI *. Os comandos da [AWS CLI Referência de comandos](https://docs.aws.amazon.com/cli/latest/reference/)

AWS CLI os comandos seguem de perto a Amazon States Language, então você pode usá-los AWS CLI para aprender sobre as ações da API Step Functions. Você pode usar também o que já conhece sobre API para fazer protótipos de código ou executar ações do Step Functions por meio da linha de comando.

**Validar as definições de máquina de estado**  
É possível usar a API para **validar** máquinas de estado e encontrar possíveis problemas antes de criar o fluxo de trabalho.  
Para saber mais sobre a validação de fluxos de trabalho, consulte a Referência [ValidateStateMachineDefinition](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ValidateStateMachineDefinition.html)da API Step Functions.

Para começar com uma configuração mínima, é possível seguir o tutorial [Creating a Lambda State Machine](tutorial-creating-lambda-state-machine.md), que mostra como definir um fluxo de trabalho com uma única etapa que chama uma função do Lambda, depois executar o fluxo de trabalho e visualizar os resultados.

## Definir o fluxo de trabalho
<a name="development-define"></a>

A primeira etapa no desenvolvimento do fluxo de trabalho é definir as etapas na Amazon States Language. Dependendo da preferência e da ferramenta, é possível definir as máquinas de estado do Step Functions em JSON, em YAML ou como uma definição com strings da Amazon States Language (ASL).

As tabelas a seguir mostram o formato de definição baseado em ASL aceito pela ferramenta. 


| AWS Ferramenta | Formatos aceitos | 
| --- | --- | 
| Console do Step Functions | JSON | 
| API de serviço de HTTPS | ASL com strings | 
| AWS CLI | ASL com strings | 
| Step Functions Local | ASL com strings | 
| AWS Toolkit for Visual Studio Code | JSON, YAML | 
| AWS SAM | JSON, YAML | 
| CloudFormation | JSON, YAML, ASL com strings | 

Os comentários de uma linha YAML na definição da máquina de estado de um modelo não serão transferidos para a definição do recurso criado. Se precisar manter um comentário, você deverá usar a propriedade `Comment` na definição de máquina de estado. Para mais informações, consulte [Estrutura da máquina de estado](statemachine-structure.md).

Com CloudFormation e AWS SAM, você pode carregar suas definições de máquina de estado para o Amazon S3 (formato JSON ou YAML) e fornecer a localização da definição no Amazon S3 no modelo. Para obter informações, consulte a página [AWS::StepFunctions::StateMachine S3Location](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-s3location.html). 

Os CloudFormation modelos de exemplo a seguir mostram como você pode fornecer a mesma definição de máquina de estado usando diferentes formatos de entrada. 

------
#### [ JSON with Definition ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "AWS Step Functions sample template.",
  "Resources": {
    "MyStateMachine": {
      "Type": "AWS::StepFunctions::StateMachine",
      "Properties": {
        "RoleArn": {
          "Fn::GetAtt": [ "StateMachineRole", "Arn" ]
        },
        "TracingConfiguration": {
          "Enabled": true
        },
        "Definition": {
          "StartAt": "HelloWorld",
          "States": {
            "HelloWorld": {
              "Type": "Pass",
              "End": true
            }
          }
        }
      }
    },
    "StateMachineRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "states.amazonaws.com"
                ]
              }
            }
          ]
        },
        "ManagedPolicyArns": [],
        "Policies": [
          {
            "PolicyName": "StateMachineRolePolicy",
            "PolicyDocument": {
              "Statement": [
                {
                  "Action": [
                    "lambda:InvokeFunction"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
                }
              ]
            }
          }
        ]
      }
    }
  },
  "Outputs": {
    "StateMachineArn": {
      "Value": {
        "Ref": "MyStateMachine"
      }
    }
  }
}
```

------
#### [ JSON with DefinitionString ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "AWS Step Functions sample template.",
  "Resources": {
    "MyStateMachine": {
      "Type": "AWS::StepFunctions::StateMachine",
      "Properties": {
        "RoleArn": {
          "Fn::GetAtt": [ "StateMachineRole", "Arn" ]
        },
        "TracingConfiguration": {
          "Enabled": true
        },
        "DefinitionString": "{\n  \"StartAt\": \"HelloWorld\",\n  \"States\": {\n    \"HelloWorld\": {\n      \"Type\": \"Pass\",\n      \"End\": true\n    }\n  }\n}"
      }
    },
    "StateMachineRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "states.amazonaws.com"
                ]
              }
            }
          ]
        },
        "ManagedPolicyArns": [],
        "Policies": [
          {
            "PolicyName": "StateMachineRolePolicy",
            "PolicyDocument": {
              "Statement": [
                {
                  "Action": [
                    "lambda:InvokeFunction"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
                }
              ]
            }
          }
        ]
      }
    }
  },
  "Outputs": {
    "StateMachineArn": {
      "Value": {
        "Ref": "MyStateMachine"
      }
    }
  }
}
```

------
#### [ YAML with Definition ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: AWS Step Functions sample template.
Resources:
  MyStateMachine:
    Type: 'AWS::StepFunctions::StateMachine'
    Properties:
      RoleArn: !GetAtt
        - StateMachineRole
        - Arn
      TracingConfiguration:
        Enabled: true
      Definition:
        # This is a YAML comment. This will not be preserved in the state machine resource's definition.
        Comment: This is an ASL comment. This will be preserved in the state machine resource's definition.
        StartAt: HelloWorld
        States:
          HelloWorld:
            Type: Pass
            End: true
  StateMachineRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Action:
              - 'sts:AssumeRole'
            Effect: Allow
            Principal:
              Service:
                - states.amazonaws.com
      ManagedPolicyArns: []
      Policies:
        - PolicyName: StateMachineRolePolicy
          PolicyDocument:
            Statement:
              - Action:
                  - 'lambda:InvokeFunction'
                Resource: "*"
                Effect: Allow

Outputs:
  StateMachineArn:
    Value:
      Ref: MyStateMachine
```

------
#### [ YAML with DefinitionString ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: AWS Step Functions sample template.
Resources:
  MyStateMachine:
    Type: 'AWS::StepFunctions::StateMachine'
    Properties:
      RoleArn: !GetAtt
        - StateMachineRole
        - Arn
      TracingConfiguration:
        Enabled: true
      DefinitionString: |
        {
            "StartAt": "HelloWorld",
            "States": {
                "HelloWorld": {
                    "Type": "Pass",
                    "End": true
                }
            }
        }
  StateMachineRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Action:
              - 'sts:AssumeRole'
            Effect: Allow
            Principal:
              Service:
                - states.amazonaws.com
      ManagedPolicyArns: []
      Policies:
        - PolicyName: StateMachineRolePolicy
          PolicyDocument:
            Statement:
              - Action:
                  - 'lambda:InvokeFunction'
                Resource: "*"
                Effect: Allow

Outputs:
  StateMachineArn:
    Value:
      Ref: MyStateMachinele
```

------

**Desenvolva fluxos de trabalho com AWS SDKs**  
O Step Functions é compatível com o AWS SDKs para Java, .NET, Ruby, PHP, Python (Boto 3) JavaScript, Go e C\$1\$1. Eles SDKs fornecem uma maneira conveniente de usar as ações da API HTTPS do Step Functions em várias linguagens de programação. Você pode desenvolver máquinas de estado, atividades ou iniciadores de máquina de estado usando as ações de API expostas por essas bibliotecas de SDK. Você pode também acessar as operações de visibilidade usando essas bibliotecas para desenvolver ferramentas próprias de monitoramento e de relatório do Step Functions. Consulte a documentação de referência da versão atual AWS SDKs e [das Ferramentas da Amazon Web Services](https://aws.amazon.com/tools/).

**Desenvolver fluxos de trabalho por meio de solicitações HTTPS**  
O Step Functions fornece operações de serviço que são acessíveis por meio de solicitações HTTPS. É possível usar essas operações para se comunicar diretamente com o Step Functions por meio das próprias bibliotecas. Você pode desenvolver máquinas de estado, operadores ou iniciadores de máquina de estado usando as ações de API do serviço. Você pode também acessar as operações de visibilidade usando as ações de API para desenvolver ferramentas próprias de monitoramento e de relatório. Para ter detalhes, consulte a [Referência de API do AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/apireference/).

**Desenvolva fluxos de trabalho com o SDK AWS Step Functions de ciência de dados**  
Os cientistas de dados podem criar fluxos de trabalho que processam e publicam modelos de aprendizado de máquina usando SageMaker IA e Step Functions. Também é possível criar fluxos de trabalho de machine learning com várias etapas em Python que orquestram a infraestrutura da AWS em escala. O SDK do AWS Step Functions Data Science fornece uma API Python que pode criar e invocar fluxos de trabalho do Step Functions. Você pode gerenciar e executar esses fluxos de trabalho diretamente no Python, assim como em cadernos Jupyter. [Para obter mais informações, consulte: [AWS Step Functions Data Science Project no Github](https://github.com/aws/aws-step-functions-data-science-sdk-python), [documentação do SDK de ciência de dados](https://aws-step-functions-data-science-sdk.readthedocs.io/) e exemplos de [notebooks Jupyter e exemplos](https://docs.aws.amazon.com/sagemaker/latest/dg/howitworks-nbexamples.html) de IA em. SageMaker GitHub](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/step-functions-data-science-sdk)

## Executar e depurar os fluxos de trabalho
<a name="development-run-debug"></a>

Você pode iniciar fluxos de trabalho de várias maneiras, inclusive do console, de uma chamada de API (por exemplo, de uma função Lambda), da EventBridge Amazon EventBridge e do Scheduler, de outra máquina de estado Step Functions. Os fluxos de trabalho em execução podem se conectar a serviços de terceiros AWS SDKs, usar e manipular dados durante a execução. Existem várias ferramentas para executar e depurar as etapas de execução e os dados que fluem pela máquina de estado. As seções a seguir fornecem mais recursos para executar e depurar os fluxos de trabalho. 

Para saber mais sobre as formas de iniciar execuções de máquinas de estado, consulte [Iniciar as execuções de uma máquina de estado no Step Functions](statemachine-starting.md).

**Escolher um endpoint para executar os fluxos de trabalho**  
Para reduzir a latência e armazenar dados em um local que atenda aos seus requisitos, o Step Functions fornece endpoints em diferentes AWS regiões. Cada endpoint no Step Functions é totalmente independente. Uma máquina de estado ou atividade só existe na região em que ela foi criada. As máquinas de estado e as atividades criadas em uma região não compartilham dados nem atributos com as que são criadas em outra região. Por exemplo, você pode registrar uma máquina de estado nomeada `STATES-Flows-1` em duas regiões diferentes. A máquina de estado `STATES-Flows-1` em uma região não compartilhará dados ou atributos com a máquina de estado `STATES-Flow-1` na outra região. Para obter uma lista dos endpoints do Step Functions, consulte [Regiões e endpoints do AWS Step Functions](https://docs.aws.amazon.com/general/latest/gr/step-functions.html) na *Referência geral da AWS*.

**Desenvolvimento no VS Code**  
Com o AWS kit de ferramentas, você pode usar o Workflow Studio de dentro do VS Code para visualizar, criar e até mesmo testar estados individuais em suas máquinas de estado. Você também pode usar o SAM e as substituições CloudFormation de definição. Você fornece entradas de estado e define variáveis, inicia o teste e pode ver como os dados são transformados. Na guia Definição de estado, você pode ajustar o fluxo de trabalho e testar novamente. Quando terminar, é possível aplicar as alterações para atualizar a máquina de estado. Para obter mais informações, consulte [Trabalhar com o Step Functions](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/bulding-stepfunctions.html) e [Trabalhar com o Workflow Studio](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions-workflowstudio.html) no AWS Toolkit for Visual Studio Code. 

## Implantar os fluxos de trabalho
<a name="development-deploy"></a>

Depois que você definir e depurar os fluxos de trabalho, provavelmente desejará implantar usando frameworks de infraestrutura como código. Você pode optar por implantar suas máquinas de estado usando uma variedade de opções de IaC, incluindo: AWS Serverless Application Model, CloudFormation AWS CDK, e Terraform.

**AWS Serverless Application Model**  
Você pode usar o AWS Serverless Application Model Step Functions para criar fluxos de trabalho e implantar a infraestrutura de que precisa, incluindo funções e eventos Lambda APIs , para criar aplicativos sem servidor. Você também pode usar a AWS SAM CLI em conjunto com o AWS Toolkit for Visual Studio Code como parte de uma experiência integrada.  
Para obter mais informações, consulte [Usando AWS SAM para criar fluxos de trabalho do Step Functions](concepts-sam-sfn.md).

**CloudFormation**  
Você pode usar suas definições de máquina de estado diretamente nos CloudFormation modelos.  
Para obter mais informações, consulte [Usando CloudFormation para criar um fluxo de trabalho em Step Functions](tutorial-lambda-state-machine-cloudformation.md).

**AWS CDK**  
Você pode criar máquinas de estado Standard e Express com AWS CDK.  
Para criar um fluxo de trabalho padrão, consulte [Usar o CDK para criar um fluxo de trabalho padrão](tutorial-lambda-state-machine-cdk.md).  
Para criar um fluxo de trabalho expresso, consulte [Usar o CDK para criar um fluxo de trabalho expresso](tutorial-step-functions-rest-api-integration-cdk.md).

**Terraform**  
[O Terraform](https://www.terraform.io/intro/) by HashiCorp é uma estrutura para criar aplicativos usando infraestrutura como código (IaC). Com o Terraform, você pode criar máquinas de estado e usar recursos, como visualizar implantações de infraestrutura e criar modelos reutilizáveis. Os modelos do Terraform ajudam você a manter e reutilizar o código dividindo-o em partes menores.  
Para obter mais informações, consulte [Usar o Terraform para implantar máquinas de estado no Step Functions](terraform-sfn.md).

# Desenvolver fluxos de trabalho no Workflow Studio do Step Functions
<a name="workflow-studio"></a>

Ao editar um fluxo de trabalho no AWS Step Functions console, você usará uma ferramenta visual chamada Workflow Studio. Com o Workflow Studio, você pode drag-and-drop inserir estados em uma tela para criar seus fluxos de trabalho. É possível adicionar, editar e configurar estados, definir filtros de entrada e de saída, transformar resultados e configurar o tratamento de erros.

À medida que você modificar os estados no fluxo de trabalho, o Workflow Studio validará e gerará automaticamente a definição da máquina de estado. É possível revisar o código gerado, editar a configuração e até mesmo modificar a definição do texto com o editor de código incorporado. Ao terminar, você pode salvar o fluxo de trabalho, executá-lo e examinar os resultados.

É possível acessar o Workflow Studio pelo console do Step Functions ao criar ou editar um fluxo de trabalho. 

Também é possível usar o Workflow Studio de **dentro** do AWS Infrastructure Composer, um designer visual para criar infraestrutura como código com o AWS Serverless Application Model e o AWS CloudFormation. Para descobrir os benefícios desta abordagem, consulte [Usar o Workflow Studio no Infrastructure Composer](use-wfs-in-app-composer.md).

O Workflow Studio tem três modos: **Design**, **Código** e **Config**. No *modo Design*, você pode drag-and-drop inserir estados na tela. O *modo Código* oferece um editor de código integrado para editar definições de fluxo de trabalho no console. No *modo Config*, é possível gerenciar a configuração do fluxo de trabalho.

**Como trabalhar com o Workflow Studio no Visual Studio Code**  
Com o AWS kit de ferramentas, você pode usar o Workflow Studio de dentro do VS Code para visualizar, criar e até mesmo testar estados individuais em suas máquinas de estado. Você fornece entradas de estado e define variáveis, inicia o teste e pode ver como os dados são transformados. É possível ajustar o fluxo de trabalho e testar novamente. Quando terminar, é possível aplicar as alterações para atualizar a máquina de estado. Para obter mais informações, consulte [Como trabalhar o Workflow Studio](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions-workflowstudio.html) no AWS Toolkit for Visual Studio Code. 

## Modo de design
<a name="wfs-interface-design-mode"></a>

O modo Design oferece uma interface gráfica para visualizar fluxos de trabalho à medida que você cria protótipos. A imagem a seguir mostra o navegador de estados, a tela do fluxo de trabalho, o inspetor e os painéis de ajuda contextual no modo **Design** do Workflow Studio.

![\[Captura de tela do modo Design, mostrando o navegador de estados, a tela do fluxo de trabalho, o inspetor e os painéis de ajuda.\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/images/wfs_main_01.png)


1. Os botões de modo alternam os três modos. Não é possível alternar os modos caso a definição de ASL do fluxo de trabalho seja inválida.

1. O [Navegador de estados](#workflow-studio-components-states) contém as três guias seguintes:
   + A guia **Ações** fornece uma lista do AWS APIs que você pode arrastar e soltar no gráfico do fluxo de trabalho na tela. Cada ação representa um estado [Estado de tarefa do fluxo de trabalho](state-task.md).
   + A guia **Fluxo** fornece uma lista de estados de fluxo que você pode arrastar e soltar no gráfico do fluxo de trabalho na tela.
   + A guia **Padrões** fornece vários ready-to-use blocos de construção reutilizáveis que você pode usar em diversos casos de uso. Por exemplo, você pode usar esses padrões para processar dados de forma iterativa em um bucket do Amazon S3.

1. O [Tela e grafo do fluxo de trabalho](#workflow-studio-components-grapheditor) é onde você arrasta e solta estados no gráfico do fluxo de trabalho, altera a ordem dos estados e seleciona estados para configurar ou visualizar.

1. O painel [Painel Inspetor](#workflow-studio-components-formdefinition) é onde você pode visualizar e editar as propriedades de qualquer ação selecionada na tela. Ative o botão **Definição** para visualizar o código do Amazon States Language para o fluxo de trabalho, com o estado atualmente selecionado destacado. 

1. Os links de **Informações** abrem um painel com informações contextuais quando você precisa de ajuda. Esses painéis também incluem links para tópicos relacionados na documentação do Step Functions. 

1. Barra de ferramentas de design — contém um conjunto de botões para realizar ações comuns, como desfazer, excluir e ampliar.

1. Botões utilitários — um conjunto de botões para realizar tarefas, como salvar fluxos de trabalho ou exportar definições de ASL em um arquivo JSON ou YAML.

### Navegador de estados
<a name="workflow-studio-components-states"></a>

No navegador de estados, é possível selecionar os estados para arrastar e soltar na tela do fluxo de trabalho. A guia **Ações** fornece uma lista de estados de tarefas que se conectam a endpoints HTTP de terceiros e. AWS APIs A guia **Fluxo** fornece uma lista de estados com os quais você pode direcionar e controlar o fluxo de trabalho. Os estados de fluxo são: escolha, paralelo, mapa, passagem, espera, sucesso e falha. A guia **Padrões** fornece blocos ready-to-use de construção predefinidos reutilizáveis. É possível pesquisar entre todos os tipos de estado com a caixa de pesquisa na parte superior do painel.

![\[Coleção ilustrativa de capturas de tela mostrando ações, fluxo, padrões e pesquisa.\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/images/wfe-states-browser-01.png)


### Tela e grafo do fluxo de trabalho
<a name="workflow-studio-components-grapheditor"></a>

Depois de escolher um estado para adicionar ao fluxo de trabalho, arraste-o para a tela e solte-o no grafo do fluxo de trabalho. Também é possível arrastar e soltar estados para movê-los no fluxo de trabalho. Se o fluxo de trabalho for grande, será possível ampliar ou reduzir para visualizar diferentes partes do grafo do fluxo de trabalho na tela. 

### Painel Inspetor
<a name="workflow-studio-components-formdefinition"></a>

É possível configurar qualquer estado que você adicionar ao fluxo de trabalho no painel **Inspetor** à direita. Escolha o estado que deseja configurar e você verá opções de configuração no painel **Inspector**. Para ver a [definição de ASL](concepts-amazon-states-language.md) gerada automaticamente para o código de fluxo de trabalho, ative a opção **Definição**. A definição de ASL associada ao estado que você selecionou aparecerá destacada.

![\[Captura de tela ilustrativa do inspetor do Workflow Studio mostrando o painel de configuração\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/images/wfe-forms-definitions-01.png)


![\[Captura de tela ilustrativa do painel do inspetor do Workflow Studio mostrando a definição do código\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/images/wfe-forms-definitions-02.png)


## Modo de código
<a name="wfs-interface-code-mode"></a>

No modo **Código** do Workflow Studio, é possível usar um editor de código integrado para visualizar, escrever e editar a definição da [Usar a Amazon States Language para definir fluxos de trabalho do Step Functions](concepts-amazon-states-language.md) (ASL) dos fluxos de trabalho no console do Step Functions. A captura de tela a seguir mostra os componentes no modo **Código**.

![\[Captura de tela ilustrativa da edição de uma definição de fluxo de trabalho no modo Código.\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/images/wfs-code-mode.png)


1. Os botões de modo alternam os três modos. Não é possível alternar os modos caso a definição de ASL do fluxo de trabalho seja inválida.

1. O [Editor de código](#wfs-interface-code-editor) é onde você escreve e edita a [definição da ASL](concepts-amazon-states-language.md) dos fluxos de trabalho no Workflow Studio. O editor de código também fornece recursos, como destaque de sintaxe e preenchimento automático.

1. [Visualização de grafos](#wfs-interface-code-graph-viz) — Mostra uma visualização gráfica em tempo real do fluxo de trabalho.

1. Botões utilitários — um conjunto de botões para realizar tarefas, como salvar fluxos de trabalho ou exportar definições de ASL em um arquivo JSON ou YAML.

1. Barra de ferramentas de código — Contém um conjunto de botões para realizar ações comuns, como desfazer uma ação ou formatar o código.

1. Barra de ferramentas do gráfico — Contém um conjunto de botões para realizar ações comuns, como ampliar e reduzir o gráfico do fluxo de trabalho.

### Editor de código
<a name="wfs-interface-code-editor"></a>

O editor de código fornece uma experiência semelhante à do IDE para escrever e editar definições de fluxo de trabalho usando JSON no Workflow Studio. O editor de código inclui vários recursos, como destaque de sintaxe, sugestões de preenchimento automático, validação de [definição da ASL](concepts-amazon-states-language.md) e exibição de ajuda contextual. Conforme você atualiza a definição do fluxo de trabalho, a [Visualização de grafos](#wfs-interface-code-graph-viz) renderiza um gráfico em tempo real do fluxo de trabalho. Você também pode ver o gráfico de fluxo de trabalho atualizado no [Modo de design](#wfs-interface-design-mode).

Se você selecionar um estado no painel [Modo de design](#wfs-interface-design-mode) ou no painel de visualização gráfica, a definição de ASL desse estado aparecerá destacada no editor de código. A definição de ASL do fluxo de trabalho é atualizada automaticamente se você reordenar, excluir ou adicionar um estado no modo **Design** ou no painel de visualização gráfica.

O editor de código pode fazer sugestões para preencher automaticamente campos e estados.
+ Para ver uma lista de campos que você pode incluir em um estado específico, pressione **Ctrl\$1Space**.
+ Para gerar um trecho de código para um novo estado no fluxo de trabalho, pressione **Ctrl\$1Space** após a definição do estado atual.
+ Para exibir uma lista de todos os comandos e **atalhos de teclado** disponíveis, pressione **F1**.

### Visualização de grafos
<a name="wfs-interface-code-graph-viz"></a>

O painel de visualização gráfica mostra o fluxo de trabalho em formato gráfico. Quando você escreve as definições de fluxo de trabalho no [Editor de código](#wfs-interface-code-editor) do Workflow Studio, o painel de visualização gráfica renderiza um gráfico em tempo real do fluxo de trabalho. 

Conforme você reordena, exclui ou duplica um estado no painel de visualização gráfica, a definição do fluxo de trabalho no editor de código é atualizada automaticamente. Da mesma forma, à medida que você atualiza as definições de fluxo de trabalho, reordena, exclui ou adiciona um estado no editor de código, a visualização é atualizada automaticamente.

Se o JSON na definição da ASL do fluxo de trabalho for inválido, o painel de visualização gráfica pausará a renderização e exibirá uma mensagem de status na parte inferior do painel.

## Modo de configuração
<a name="wfs-interface-config-mode"></a>

No modo **Config** do Workflow Studio, é possível gerenciar a configuração geral das máquinas de estado. Nesse modo, é possível especificar configurações como as seguintes:
+ **Detalhes**: defina o **nome** e o **tipo** do fluxo de trabalho. Observe que os dois **não podem** ser alterados após a criação da máquina de estado.
+ **Permissões**: é possível criar um perfil (recomendado), escolher um perfil existente ou inserir um ARN para um perfil específico. Se você selecionar a opção para criar um perfil, o Step Functions criará um perfil de execução para as máquinas de estado usando privilégio mínimo. Os perfis do IAM gerados são válidos para a Região da AWS onde a máquina de estado é criada. Antes da criação, é possível revisar as permissões que o Step Functions gerará automaticamente para a máquina de estado.
+ **Registro em log**: é possível habilitar e definir um nível de log para a máquina de estado. O Step Functions registra os eventos do histórico de execução com base na seleção. Também é possível usar uma chave gerenciada pelo cliente para criptografar os logs. Para mais informações sobre níveis de log, consulte [Níveis de log para eventos de execução do Step Functions](cw-logs.md#cloudwatch-log-level).

Em **Configuração adicional**, é possível definir uma ou mais das seguintes configurações **opcionais**:
+ **Habilitar rastreamento com X-Ray**: é possível enviar rastreamentos ao X-Ray para execuções de máquinas de estado, mesmo quando um ID de rastreamento não for transmitido por um serviço precedente. Para obter mais informações, consulte [O Trace Step Functions solicita dados em AWS X-Ray](concepts-xray-tracing.md).
+ **Publicar versão na criação**: uma *versão* é um snapshot numerado e imutável de uma máquina de estado que você pode executar. Escolha essa opção para publicar uma versão da máquina de estado ao criar a máquina de estado. O Step Functions publica a versão 1 como a primeira revisão da máquina de estado. Para obter mais informações sobre versões, consulte [Versões da máquina de estado nos fluxos de trabalho do Step Functions](concepts-state-machine-version.md).
+ **Criptografar com a chave gerenciada pelo cliente**: é possível fornecer uma chave gerenciada diretamente para criptografar os dados. Para saber mais, consulte [Criptografia de dados em repouso](encryption-at-rest.md)
+ **Tags**: marque essa caixa para adicionar tags que podem ajudar a monitorar e gerenciar os custos associados aos recursos, além de fornecer uma melhor segurança nas políticas do IAM. Para obter mais informações sobre tags, consulte [Marcar máquinas de estado e atividades no Step Functions](sfn-best-practices.md#concepts-tagging).

# Criar um fluxo de trabalho com o Workflow Studio no Step Functions
<a name="workflow-studio-create"></a>

Aprenda a criar, editar e executar fluxos de trabalho usando o Step Functions Workflow Studio. Depois que o fluxo de trabalho estiver pronto, você poderá salvá-lo, executá-lo e exportá-lo. 

**Topics**
+ [Criar uma máquina de estado](#workflow-studio-components-create)
+ [Projetar um fluxo de trabalho](#workflow-studio-build)
+ [Executar o fluxo de trabalho](#workflow-studio-components-create-run)
+ [Editar o fluxo de trabalho](#workflow-studio-components-create-edit)
+ [Exportar o fluxo de trabalho](#workflow-studio-components-create-export)
+ [Criar um protótipo de fluxo de trabalho com espaços reservados](#workflow-studio-components-create-prototype)

## Criar uma máquina de estado
<a name="workflow-studio-components-create"></a>

No Workflow Studio, é possível escolher um modelo inicial ou um modelo em branco para criar um fluxo de trabalho.

Um modelo inicial é um projeto de ready-to-run amostra que cria automaticamente o protótipo e a definição do fluxo de trabalho e implanta todos os AWS recursos relacionados que seu projeto precisa para você. Conta da AWS Você pode usar esses projetos iniciais para implantá-los e executá-los como estão ou usar os protótipos de fluxo de trabalho para se basear neles. Para obter mais informações sobre os modelos iniciais, consulte [Implantar uma máquina de estado usando um modelo inicial para o Step Functions](starter-templates.md).

Com um modelo em branco, você pode usar o modo [Design](workflow-studio.md#wfs-interface-design-mode) ou [Código](workflow-studio.md#wfs-interface-code-mode) para criar o fluxo de trabalho personalizado.

### Criar uma máquina de estado usando um modelo inicial
<a name="wfs-create-workflow-templates"></a>

1. Abra o [console do Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) e clique em **Criar máquina de estado**.

1. Na caixa de diálogo **Escolher um modelo**, faça o seguinte para escolher um projeto de exemplo:
   + Digite **Task Timer** na caixa Pesquisa por palavra-chave e escolha **Temporizador de tarefas** nos resultados da pesquisa.
   + Navegue pelos exemplos de projetos listados em **Tudo** no painel direito e escolha **Task Timer**.

1. Escolha **Próximo** para continuar.

1. Escolha como usar o modelo:

1. Escolha **Usar modelo** para continuar com a seleção.

1. **Executar uma demonstração**: cria uma máquina de estado somente leitura. Após a revisão, você pode criar o fluxo de trabalho e todos os recursos relacionados.

1. **Comece a criar**: fornece uma definição de fluxo de trabalho editável que você pode revisar, personalizar e implantar com seus próprios recursos. (Recursos relacionados, como perfis ou filas, **não** serão criados automaticamente.)

### Crie um fluxo de trabalho usando um modelo em branco
<a name="wfs-create-workflow-blank"></a>

Quando quiser começar em uma tela limpa, crie um fluxo de trabalho com um modelo em branco.

1. Abra o [console do Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/).

1. Escolha **Criar uma máquina de estado**.

1. Selecione **Criar do zero**.

1. Nomeie sua máquina de estado e clique em **Continuar** para editá-la no Workflow Studio.

   Agora você pode começar a projetar o fluxo de trabalho no [Modo de design](workflow-studio.md#wfs-interface-design-mode) ou escrever a definição de fluxo de trabalho no [Modo de código](workflow-studio.md#wfs-interface-code-mode).

1. Escolha **Configuração** para gerenciar a configuração do fluxo de trabalho no [Modo de configuração](workflow-studio.md#wfs-interface-config-mode). Por exemplo, forneça um nome para o fluxo de trabalho e escolha o tipo.

## Projetar um fluxo de trabalho
<a name="workflow-studio-build"></a>

Quando você souber o nome do estado que deseja adicionar, use a caixa de pesquisa na parte superior dos [Navegador de estados](workflow-studio.md#workflow-studio-components-states) para encontrá-lo. Caso contrário, procure o estado de que você precisa no navegador e adicione-o à tela. 

É possível reordenar estados no fluxo de trabalho arrastando-os para um local diferente no fluxo de trabalho. Quando você arrasta um estado para a tela, é exibida uma linha para mostrar onde o estado será inserido no fluxo de trabalho, conforme mostrado na seguinte captura de tela: 

![\[Captura de tela ilustrativa mostrando a linha azul, que indica o destino de um estado.\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/images/wfe-design-02.png)


Depois que um estado é colocado na tela, o código é gerado automaticamente e adicionado à definição de fluxo de trabalho. Para ver a definição, ative o botão **Definição** no [painel Inspector.](workflow-studio.md#workflow-studio-components-formdefinition) É possível escolher [Modo de código](workflow-studio.md#wfs-interface-code-mode) para editar a definição com o editor de código incorporado.

Depois de soltar um estado na tela, configure-o no painel [Painel Inspetor](workflow-studio.md#workflow-studio-components-formdefinition) à direita. Esse painel contém as guias **Configuração**, **Entrada**, **Saída** e **Tratamento de erros** para cada estado ou ação de API que você coloca na tela. Você configura os estados incluídos nos fluxos de trabalho na guia **Configuração**. 

Por exemplo, a guia **Configuração** da ação de API Invocação do Lambda consiste nas seguintes opções:
+ **Nome do estado**: é possível identificar o estado com um nome personalizado ou aceitar o nome padrão gerado.
+ A **API** mostra a ação de API usada pelo estado. 
+ **Tipo de integração**: é possível escolher o tipo de integração de serviços usado para chamar ações de API em outros serviços.
+ O **Nome da função** fornece opções para:
  +  **Inserir o nome da função**: você pode inserir o nome da função ou o ARN. 
  +  **Obter nome da função em runtime a partir da entrada de estado**: você pode usar essa opção para obter dinamicamente o nome da função da entrada de estado com base no caminho especificado. 
  +  **Selecionar o nome da função**: você pode selecionar diretamente das funções disponíveis na conta e região. 
+ **Carga útil**: é possível optar por usar a entrada de estado, um objeto JSON ou nenhuma carga útil para passar como carga útil para a função do Lambda. Se você escolher JSON. poderá incluir valores estáticos e valores selecionados na entrada de estado.
+ (Opcional) Alguns estados terão a opção de selecionar **Aguardar a conclusão da tarefa** ou **Aguardar o retorno da chamada**. Quando disponíveis, é possível escolher um dos seguintes [padrões de integração de serviço](connect-to-resource.md): 
  + **Nenhuma opção selecionada**: o Step Functions usará o padrão de integração [Resposta de solicitação](connect-to-resource.md#connect-default). O Step Functions aguardará uma resposta HTTP e, em seguida, avançará para o próximo estado. O Step Functions não esperará a conclusão de um trabalho. Quando nenhuma opção estiver disponível, o estado usará esse padrão. 
  + **Aguardar a conclusão da tarefa**: o Step Functions usará o padrão de integração [Executar um trabalho (.sync)](connect-to-resource.md#connect-sync).
  + **Aguardar o retorno de chamada**: o Step Functions usará o padrão de integração [Aguardar um retorno de chamada com um token de tarefa](connect-to-resource.md#connect-wait-token).
+ (Opcional) Para acessar recursos configurados de forma diferente Contas da AWS em seus fluxos de trabalho, o Step Functions fornece acesso [entre contas](concepts-access-cross-acct-resources.md). O **perfil do IAM para acesso entre contas** fornece opções para:
  + **Fornecer o ARN do perfil do IAM**: especifique o perfil do IAM que contém as permissões apropriadas de acesso aos recursos. Esses recursos estão disponíveis em uma conta de destino, Conta da AWS para a qual você faz chamadas entre contas.
  + **Obtenha o ARN do perfil do IAM em runtime a partir da entrada do estado**: especifique um caminho de referência para um par de valores-chave existente na entrada JSON do estado que contém o perfil do IAM.
+ O **próximo estado** permite que você selecione o próximo estado para o qual deseja fazer a transição. 
+ (Opcional) O campo **Comentário** não afetará o fluxo de trabalho, mas você poderá usá-lo para anotar o fluxo de trabalho.

Alguns estados terão mais opções de configuração genéricas. Por exemplo, a configuração de estado `RunTask` do Amazon ECS contém um campo `API Parameters` preenchido com valores de espaço reservado. Para esses estados, você pode substituir os valores do espaço reservado por configurações adequadas às suas necessidades.

**Como excluir um estado**

É possível pressionar backspace, clicar com o botão direito do mouse e escolher **Excluir estado** ou escolher **Excluir** na [barra de ferramentas Design](workflow-studio.md#wfs-interface-design-mode).

## Executar o fluxo de trabalho
<a name="workflow-studio-components-create-run"></a>

Quando o fluxo de trabalho estiver pronto para começar, você poderá executá-lo e visualizar a execução no [console do Step Functions](https://console.aws.amazon.com/states/home).

**Para executar um fluxo de trabalho no Workflow Studio**

1. No modo **Design**, **Código** ou **Configuração**, escolha **Executar**.

   A caixa de diálogo **Iniciar execução** é aberta em uma nova guia.

1. Na caixa de diálogo **Iniciar execução**, faça o seguinte:

   1. (Opcional) Insira um nome de execução personalizado para substituir o padrão gerado.
**Nomes e registro em log não ASCII**  
O Step Functions aceita nomes de máquina de estado, execuções, atividades e rótulos que contenham caracteres não ASCII. Como esses caracteres impedirão que a Amazon CloudWatch registre dados, recomendamos usar somente caracteres ASCII para que você possa acompanhar as métricas do Step Functions.

   1. (Opcional) No campo **Entrada**, insira os valores de entrada no formato JSON para executar o fluxo de trabalho.

   1. Selecione **Iniciar execução**.

   1. O console do Step Functions direciona você para uma página na qual o título é o ID da execução, conhecida como a página de *Detalhes da execução*. Você pode revisar os resultados da execução tanto à medida que o fluxo de trabalho avança quanto após a conclusão.

      Para revisar os resultados da execução, escolha estados individuais na **Exibição em gráfico** e, em seguida, escolha as guias individuais no painel [Detalhes da etapa](concepts-view-execution-details.md#exec-details-intf-step-details) para visualizar os detalhes de cada estado, incluindo entrada, saída e definição, respectivamente. Para obter detalhes sobre as informações de execução que você pode visualizar na página *Detalhes da execução*, consulte [Visão geral dos detalhes da execução](concepts-view-execution-details.md#exec-details-interface-overview).

## Editar o fluxo de trabalho
<a name="workflow-studio-components-create-edit"></a>

Você pode editar visualmente um fluxo de trabalho existente no [Modo de design](workflow-studio.md#wfs-interface-design-mode) do Workflow Studio. 

No [console do Step Functions](https://console.aws.amazon.com/states/home), escolha o fluxo de trabalho que você deseja editar na página **Máquinas de estado**. O fluxo de trabalho é aberto no modo **Design** do Workflow Studio.

Também é possível editar a definição de fluxo de trabalho em [Modo de código](workflow-studio.md#wfs-interface-code-mode). Escolha o botão **Código** para visualizar ou editar a definição do fluxo de trabalho no Workflow Studio.

**nota**  
Se você encontrar erros no fluxo de trabalho, deverá corrigi-los no modo **Design**. Você não pode alternar para o modo **Código** ou **Configuração** se houver algum erro no fluxo de trabalho.

Ao salvar as alterações no fluxo de trabalho, você também tem a opção de publicar uma nova **versão**. Com as versões, é possível optar por executar as versões originais ou alternativas do fluxo de trabalho. Para saber mais sobre o gerenciamento de fluxos de trabalho com versões, consulte [Versões da máquina de estado nos fluxos de trabalho do Step Functions](concepts-state-machine-version.md)

## Exportar o fluxo de trabalho
<a name="workflow-studio-components-create-export"></a>

Você pode exportar a definição da [Amazon States Language](concepts-amazon-states-language.md) (ASL) do fluxo de trabalho e o gráfico do fluxo de trabalho:

1. Escolha o fluxo de trabalho no [console do Step Functions](https://console.aws.amazon.com/states/home).

1. Na página *Detalhes da máquina de estado*, escolha **Editar**.

1. Escolha o botão suspenso **Ações** e realize uma das seguintes ações, ou ambas:
   + Para exportar o gráfico do fluxo de trabalho para um arquivo SVG ou PNG, em **Exportar gráfico**, selecione o formato desejado.
   + Para exportar a definição do fluxo de trabalho como um arquivo JSON ou YAML, em **Exportar definição**, selecione o formato desejado.

## Criar um protótipo de fluxo de trabalho com espaços reservados
<a name="workflow-studio-components-create-prototype"></a>

É possível usar o Workflow Studio ou o [Workflow Studio no Infrastructure Composer](use-wfs-in-app-composer.md) para criar protótipos de novos fluxos de trabalho que contêm *recursos de espaço reservado* que são chamados de recursos que ainda não existem.

Como criar um protótipo de fluxo de trabalho:

1. Faça login no [console do Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/).

1. Escolha **Criar uma máquina de estado**.

1. Selecione **Criar do zero**.

1. Nomeie sua máquina de estado e clique em **Continuar** para editá-la no Workflow Studio.

1. O [modo Design](workflow-studio.md#wfs-interface-design-mode) do Workflow Studio é aberto. Crie o fluxo de trabalho no Workflow Studio. Para incluir recursos de espaço reservado:

   1. Escolha o estado para o qual você deseja incluir um recurso de espaço reservado e, em seguida, em **Configuração**:
      + Para os estados Invocação Lambda, escolha o **Nome da função** e, em seguida, escolha **Inserir nome da função**. Você também pode inserir um nome personalizado para sua função.
      + Para os estados de envio de mensagens do Amazon SQS, escolha o **URL da fila** e, em seguida, escolha **Inserir URL da fila**. Insira um URL de fila do espaço reservado.
      + Para os estados de publicação do Amazon SNS, em **Tópico**, escolha um ARN de tópico.
      + Para todos os outros estados listados em **Ações**, você pode usar a configuração padrão.
**nota**  
Se você encontrar erros no fluxo de trabalho, deverá corrigi-los no modo **Design**. Você não pode alternar para o modo **Código** ou **Configuração** se houver algum erro no fluxo de trabalho.

   1. (Opcional) Para visualizar a definição de ASL gerada automaticamente do fluxo de trabalho, escolha **Definição.**

   1. (Opcional) Para atualizar a definição do fluxo de trabalho no Workflow Studio, escolha o botão **Código**.
**nota**  
Se você encontrar erros na definição de fluxo de trabalho, deverá corrigi-los no modo **Código**. Você não pode alternar para o modo **Design** ou **Código** se houver algum erro na definição do fluxo de trabalho.

1. (Opcional) Para editar o nome da máquina de estado, escolha o ícone de edição ao lado do nome padrão da máquina de estado **MyStateMachine**e especifique um nome na caixa **Nome da máquina de estado**.

   Você também pode alternar para o [Modo de configuração](workflow-studio.md#wfs-interface-config-mode) para editar o nome da máquina de estado padrão.

1. Especifique outras configurações do fluxo de trabalho, como o tipo de máquina de estado e o perfil de execução.

1. Escolha **Criar**.

Agora você criou um novo fluxo de trabalho com recursos de espaço reservado que podem ser usados para criar protótipos. Você pode [exportar](#workflow-studio-components-create-export) a definição do fluxo de trabalho e o gráfico do fluxo de trabalho.
+ Para exportar a definição de fluxo de trabalho como um arquivo JSON ou YAML, no modo **Design** ou **Código**, escolha o botão suspenso **Ações**. Em seguida, em **Exportar definição**, selecione o formato que você deseja exportar. Você pode usar essa definição exportada como o ponto de partida para o desenvolvimento local com o [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/building-stepfunctions.html).
+ Para exportar o gráfico do fluxo de trabalho para um arquivo SVG ou PNG, no modo **Design** ou **Código**, escolha o botão suspenso **Ações**. Em seguida, em **Exportar definição**, selecione o formato que você deseja.

# Configurar entradas e saídas de estado com o Workflow Studio no Step Functions
<a name="workflow-studio-process"></a>

**Gerenciar estados e transformar dados**  
Saiba mais sobre como [transmitir dados entre estados com variáveis](workflow-variables.md) e [transformar dados com JSONata](transforming-data.md).

Cada estado toma uma decisão ou executa uma ação com base na entrada que recebe. Na maioria dos casos, ele passa a saída para outros estados. No Workflow Studio, você pode configurar como um estado filtra e manipula os dados de entrada e saída nas guias **Entrada** e **Saída** do painel [Painel Inspetor](workflow-studio.md#workflow-studio-components-formdefinition). Use os links de **Informações** para acessar a ajuda contextual ao configurar entradas e saídas. 

![\[Captura de tela ilustrativa mostrando entradas e saídas de estado e o painel de ajuda Informações\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/images/wfs_input_output_01.png)


Para informações detalhadas sobre como o Step Functions processa entrada e saída, consulte [Processar entrada e saída no Step Functions](concepts-input-output-filtering.md). 

## Configurar a entrada para um estado
<a name="workflow-studio-process-input"></a>

Cada estado recebe a entrada do estado anterior como JSON. Se quiser filtrar a entrada, você poderá usar o filtro `InputPath` na guia **Entrada** no painel [Painel Inspetor](workflow-studio.md#workflow-studio-components-formdefinition). A `InputPath` é uma string, começando com `$`, que identifica um nó JSON específico. Eles são chamados de [caminhos de referência](amazon-states-language-paths.md) e seguem a JsonPath sintaxe. 

Para filtrar a entrada:
+ Escolha **Filtrar entrada com InputPath**.
+ Insira um valor válido [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/)para o `InputPath` filtro. Por exemplo, .**\$1.data**

O filtro `InputPath` será adicionado ao fluxo de trabalho.

**Example Exemplo 1: Usar InputPath filtro no Workflow Studio**  
Digamos que a entrada para o estado inclua os dados JSON a seguir.  

```
{
  "comment": "Example for InputPath",
  "dataset1": {
    "val1": 1,
    "val2": 2,
    "val3": 3
  },
  "dataset2": {
    "val1": "a",
    "val2": "b",
    "val3": "c"
  }
}
```
Para aplicar o `InputPath` filtro, escolha **Filtrar entrada com** e InputPath, em seguida, insira um caminho de referência apropriado. Se você inserir **\$1.dataset2.val1**, o seguinte JSON será passado como entrada para o estado.  

```
{"a"}
```
Um caminho de referência também pode ter uma seleção de valores. Se os dados referenciados forem `{ "a": [1, 2, 3, 4] }`, e você aplicar o caminho de referência `$.a[0:2]` como o filtro `InputPath`, o resultado será como a seguir.  

```
[ 1, 2 ]
```

Os estados [Estado paralelo do fluxo de trabalho](state-parallel.md), [Estado de mapa do fluxo de trabalho](state-map.md) e [Estado de passagem do fluxo de trabalho](state-pass.md) têm uma opção adicional de filtragem de entrada chamada `Parameters` na guia **Entrada**. Esse filtro entra em vigor após o InputPath filtro e pode ser usado para construir um objeto JSON personalizado que consiste em um ou mais pares de valores-chave. Os valores de cada par podem ser valores estáticos, podem ser selecionados na entrada ou podem ser selecionados a partir do [Acessar dados de execução do objeto de contexto no Step Functions](input-output-contextobject.md) com um caminho. 

**nota**  
Para determinar que um parâmetro use um caminho para fazer referência a um nó JSON na entrada, o nome do parâmetro deve terminar com `.$`.

**Example Exemplo 2: crie uma entrada JSON personalizada para o estado Paralelo**  
Digamos que os seguintes dados JSON sejam a entrada para um estado Paralelo.  

```
{
  "comment": "Example for Parameters",
  "product": {
    "details": {
      "color": "blue",
      "size": "small",
      "material": "cotton"
    },
    "availability": "in stock",
    "sku": "2317",
    "cost": "$23"
  }
}
```

Para selecionar parte dessa entrada e passar pares de valores-chave adicionais com um valor estático, você pode especificar o seguinte no campo **Parâmetros**, na guia **Entrada** do estado **Paralelo**.

```
{
 "comment": "Selecting what I care about.",
 "MyDetails": {
    "size.$": "$.product.details.size",
    "exists.$": "$.product.availability",
    "StaticValue": "foo"
    }
 }
```

Os seguintes dados JSON serão o resultado.

```
{
  "comment": "Selecting what I care about.",
  "MyDetails": {
    "size": "small",
    "exists": "in stock",
    "StaticValue": "foo"
  }
}
```

## Configurar a saída de um estado
<a name="workflow-studio-process-output"></a>

Cada estado produz uma saída JSON que pode ser filtrada antes de ser passada para o próximo estado. Há vários filtros disponíveis e cada um afeta a saída de uma maneira diferente. Os filtros de saída disponíveis para cada estado estão listados na guia **Saída** no painel **Inspector**. Para estados [Estado de tarefa do fluxo de trabalho](state-task.md), todos os filtros de saída selecionados são processados nesta ordem: 

1.  `ResultSelector`: use esse filtro para manipular o resultado do estado. Você pode construir um novo objeto JSON com partes do resultado. 

1.  `Especificando a saída de estado usando ResultPath em Step Functions`: use esse filtro para selecionar uma combinação da entrada de estado e do resultado da tarefa para passar para a saída. 

1.  `Filtrar a saída de estado usando OutputPath`: use esse filtro para filtrar a saída JSON e escolher quais informações do resultado serão passadas para o próximo estado. 

### Use ResultSelector
<a name="workflow-studio-process-output-resultselector"></a>

`ResultSelector` é um filtro de saída opcional para os seguintes estados:
+  Estados [Estado de tarefa do fluxo de trabalho](state-task.md), que são todos os estados listados na guia **Ações** do [Navegador de estados](workflow-studio.md#workflow-studio-components-states). 
+  Estados [Estado de mapa do fluxo de trabalho](state-map.md), na guia **Fluxo** do Navegador de estados. 
+  Estados [Estado paralelo do fluxo de trabalho](state-parallel.md), na guia **Fluxo** do Navegador de estados. 

`ResultSelector` pode ser usado para construir um objeto JSON personalizado que consiste em um ou mais pares de chave-valor. Os valores de cada par podem ser valores estáticos ou selecionados do resultado do estado com um caminho. 

**nota**  
Para especificar que um parâmetro use um caminho para fazer referência a um nó JSON no resultado, o nome do parâmetro deve terminar com `.$`.

**Example Exemplo de uso do ResultSelector filtro**  
Neste exemplo, você usa `ResultSelector` para manipular a resposta da chamada de API do Amazon CreateCluster EMR para um estado do Amazon `CreateCluster` EMR. Veja a seguir o resultado da chamada de API `CreateCluster` do Amazon EMR.  

```
{
  "resourceType": "elasticmapreduce",
  "resource": "createCluster.sync",
  "output": {
    "SdkHttpMetadata": {
      "HttpHeaders": {
        "Content-Length": "1112",
        "Content-Type": "application/x-amz-JSON-1.1",
        "Date": "Mon, 25 Nov 2019 19:41:29 GMT",
        "x-amzn-RequestId": "1234-5678-9012"
      },
      "HttpStatusCode": 200
    },
    "SdkResponseMetadata": {
      "RequestId": "1234-5678-9012"
    },
    "ClusterId": "AKIAIOSFODNN7EXAMPLE"
  }
}
```
Para selecionar parte dessas informações e passar um par adicional de valores-chave com um valor estático, especifique o seguinte no **ResultSelector**campo, na guia **Saída** do estado.  

```
{
 "result": "found",
 "ClusterId.$": "$.output.ClusterId", 
 "ResourceType.$": "$.resourceType"
 }
```
O uso de `ResultSelector` produz o resultado a seguir.  

```
{
 "result": "found",
 "ClusterId": "AKIAIOSFODNN7EXAMPLE",
 "ResourceType": "elasticmapreduce"
}
```

### Use ResultPath
<a name="workflow-studio-process-output-resultpath"></a>

A saída de um estado pode ser uma cópia da entrada, o resultado que ele produz ou uma combinação da entrada e do resultado. Use `ResultPath` para controlar qual combinação desses itens são passadas para o estado de saída. Para obter mais casos de uso de `ResultPath`, consulte [Especificando a saída de estado usando ResultPath em Step Functions](input-output-resultpath.md).

`ResultPath` é um filtro de saída opcional para os seguintes estados:
+  Estados [Estado de tarefa do fluxo de trabalho](state-task.md), que são todos os estados listados na guia **Ações** do Navegador de estados. 
+  Estados [Estado de mapa do fluxo de trabalho](state-map.md), na guia **Fluxo** do Navegador de estados. 
+  Estados [Estado paralelo do fluxo de trabalho](state-parallel.md), na guia **Fluxo** do Navegador de estados. 
+  Estados [Estado de passagem do fluxo de trabalho](state-pass.md), na guia **Fluxo** do Navegador de estados. 

`ResultPath` pode ser usado para adicionar o resultado à entrada do estado original. O caminho especificado indica onde adicionar o resultado.

**Example Exemplo de uso do ResultPath filtro**  
Digamos que os itens seguintes sejam a entrada para um estado Tarefa.  

```
{
  "details": "Default example",
  "who": "AWS Step Functions"
}
```
O resultado do estado Tarefa é como a seguir.  

```
Hello, AWS Step Functions
```
Você pode adicionar esse resultado à entrada do estado aplicando `ResultPath` e inserindo um [caminho](amazon-states-language-paths.md) de referência que indica onde adicionar o resultado, como `$.taskresult`:  
Com esse `ResultPath`, o seguinte é o JSON que é passado como a saída do estado.  

```
{
  "details": "Default example",
  "who": "AWS Step Functions",
  "taskresult": "Hello, AWS Step Functions!"
}
```

### Use OutputPath
<a name="workflow-studio-process-output-resultselector"></a>

O filtro `OutputPath` permite filtrar informações indesejadas e transmitir somente a parte necessária do JSON. O `OutputPath` é uma string, que começa com `$`, que identifica nós no texto JSON.

**Example Exemplo de uso do OutputPath filtro**  
Imagine que uma chamada de API Invocação do Lambda exiba metadados além do resultado da função do Lambda.  

```
{
  "ExecutedVersion": "$LATEST",
  "Payload": {
     "foo": "bar",
     "colors": [
          "red",
          "blue",
          "green"    
     ],
     "car": {
          "year": 2008,
          "make": "Toyota",
          "model": "Matrix"
     }
   },
"SdkHttpMetadata": {
  "AllHttpHeaders": {
    "X-Amz-Executed-Version": ["$LATEST"]
...
```
Você pode usar `OutputPath` para filtrar os metadados adicionais. Por padrão, o valor do **OutputPath**filtro para estados do Lambda Invoke criados por meio do Workflow Studio é. `$.Payload` Esse valor padrão remove os metadados adicionais e retorna uma saída equivalente à execução direta da função do Lambda.  
O exemplo do resultado da tarefa Invocação Lambda e o valor de `$.Payload` para o filtro **Output** transmitem os seguintes dados JSON como a saída.  

```
{
 "foo": "bar",
 "colors": [
      "red",
      "blue",
      "green"    
 ],
 "car": {
      "year": 2008,
      "make": "Toyota",
      "model": "Matrix"
 }
}
```
O filtro `OutputPath` é o último filtro de saída a entrar em vigor; portanto, se você usar filtros de saída adicionais, como `ResultSelector` ou `ResultPath`, deverá modificar o valor padrão de `$.Payload` para o filtro `OutputPath` adequadamente. 

# Configurar perfis de execução com o Workflow Studio no Step Functions
<a name="manage-state-machine-permissions"></a>

É possível usar o Workflow Studio para configurar perfis de execução para os fluxos de trabalho. Cada máquina de estado do Step Functions requer um perfil do AWS Identity and Access Management (IAM) que concede à máquina permissão para realizar ações em Serviços da AWS e recursos ou chamar APIs HTTPS. Esse perfil é chamado de *perfil de execução*. 

O perfil de execução deve conter políticas do IAM para cada ação, por exemplo, políticas que autorizam que a máquina de estado invoque uma função do AWS Lambda, execute um trabalho do AWS Batch ou chame a API do Stripe. O Step Functions exige que você forneça um perfil de execução nos seguintes casos:
+ Você vai criar uma máquina de estado no console, nos SDKs da AWS ou na AWS CLI usando a API [CreateStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateStateMachine.html).
+ Você vai [testar](test-state-isolation.md) um estado no console, nos SDKs da AWS ou na AWS CLI usando a API [TestState](https://docs.aws.amazon.com/step-functions/latest/apireference/API_TestState.html).

**Topics**
+ [Sobre perfis gerados automaticamente](#wfs-auto-gen-roles)
+ [Gerar perfis automaticamente](#auto-generating-roles)
+ [Resolver problemas de geração de perfis](#resolve-role-gen-problem)
+ [Perfil para testar tarefas HTTP no Workflow Studio](#test-state-role-http)
+ [Perfil para testar uma integração de serviços otimizada no Workflow Studio](#test-state-role-optimized)
+ [Perfil para testar uma integração de serviços de SDKs da AWS no Workflow Studio](#test-state-role-aws-sdk)
+ [Perfil para testar estados de fluxo no Workflow Studio](#test-state-role-flow)

## Sobre perfis gerados automaticamente
<a name="wfs-auto-gen-roles"></a>

Quando você cria uma máquina de estado no console do Step Functions, o [Workflow Studio](workflow-studio.md) pode criar automaticamente um perfil de execução para você que contém as políticas do IAM necessárias. O Workflow Studio analisa a definição de máquina de estado e gera políticas com os privilégios mínimos necessários para executar o fluxo de trabalho.

O Workflow Studio pode gerar políticas do IAM para o seguinte:
+ [Tarefas HTTP](call-https-apis.md) que chamam APIs HTTPS.
+ Estados de tarefas que chamam outros Serviços da AWS usando [integrações otimizadas](integrate-optimized.md), como [Lambda Invoke](connect-lambda.md), [DynamoDB GetItem](connect-batch.md) ou [AWS Glue StartJobRun](connect-glue.md).
+ Estados de tarefas que executam [fluxos de trabalho aninhados](connect-stepfunctions.md).
+ [Estados de mapas distribuídos](state-map-distributed.md), incluindo [políticas](iam-policies-eg-dist-map.md) para iniciar execuções de fluxos de trabalho secundários, listar buckets do Amazon S3 e ler ou gravar objetos do S3.
+ Rastreamento do [X-Ray](concepts-xray-tracing.md). Cada perfil gerado automaticamente no Workflow Studio contém uma [política](concepts-xray-tracing.md#xray-iam) que concede permissões para a máquina de estado enviar rastreamentos ao X-Ray.
+ [Usando CloudWatch Logs para registrar o histórico de execução em Step Functions](cw-logs.md) quando o registro em log está habilitado na máquina de estado.

O Workflow Studio não pode gerar políticas do IAM para estados de tarefas que chamam outros Serviços da AWS usando [integrações de SDKs da AWS](supported-services-awssdk.md).

## Gerar perfis automaticamente
<a name="auto-generating-roles"></a>

1. Abra o [console do Step Functions](https://console.aws.amazon.com/states/home). No menu, selecione **Máquinas de estado** e, em seguida, selecione **Criar máquina de estado**.

   Também é possível atualizar uma máquina de estado existente. Consulte a Etapa 4 se você estiver atualizando uma máquina de estado.

1. Selecione **Criar do zero**.

1. Nomeie sua máquina de estado e clique em **Continuar** para editá-la no Workflow Studio.

1. Selecione a guia **Config**.

1. Role para baixo até a seção **Permissões** e faça o seguinte:

   1. Em **Perfil de execução**, mantenha a seleção padrão de **Criar perfil**.

      O Workflow Studio gera automaticamente todas as políticas do IAM necessárias para cada estado válido na definição da máquina de estado. Ele exibe um banner com a mensagem: **Um perfil de execução será criado com todas as permissões.**  
![\[Captura de tela ilustrativa da guia Config com visualização das permissões geradas automaticamente.\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/images/wfs-full-permissions-role.png)
**dica**  
Para revisar as permissões que o Workflow Studio vai gerar automaticamente para a máquina de estado, selecione **Revisar permissões geradas automaticamente**.
**nota**  
Se você excluir o perfil do IAM criado pelo Step Functions, não será possível recriá-lo posteriormente. Da mesma forma, se você modificar a função (por exemplo, removendo o Step Functions das entidades principais na política do IAM), o Step Functions não poderá restaurar as configurações originais dela posteriormente. 

      Se o Workflow Studio não conseguir gerar todas as políticas do IAM necessárias, ele exibirá um banner com a mensagem **Permissões para determinadas ações não podem ser geradas automaticamente. Um perfil do IAM será criado somente com permissões parciais.** Para obter informações sobre como adicionar as permissões ausentes, consulte [Resolver problemas de geração de perfis](#resolve-role-gen-problem).

   1. Selecione **Criar** se você estiver criando uma máquina de estado. Caso contrário, selecione **Salvar**.

   1. Selecione **Confirmar** na caixa de diálogo exibida.

      O Workflow Studio salva a máquina de estado e cria o perfil de execução.

## Resolver problemas de geração de perfis
<a name="resolve-role-gen-problem"></a>

O Workflow Studio não pode gerar automaticamente um perfil de execução com todas as permissões necessárias nos seguintes casos:
+ Há erros na máquina de estado. Assegure-se de resolver todos os erros de validação no Workflow Studio. Além disso, solucione todos os erros do servidor encontrados durante o salvamento.
+ A máquina de estado contém tarefas que usam integrações de SDKs da AWS. Nesse caso, o Workflow Studio não consegue [gerar automaticamente](#auto-generating-roles) políticas do IAM. O Workflow Studio exibe um banner com a mensagem: **Permissões para determinadas ações não podem ser geradas automaticamente. Um perfil do IAM será criado somente com permissões parciais.** Na tabela **Revisar permissões geradas automaticamente**, selecione o conteúdo em **Status** para obter mais informações sobre as políticas que faltam no perfil de execução. O Workflow Studio ainda pode gerar um perfil de execução, mas esse perfil não conterá políticas do IAM para todas as ações. Consulte os links em **Links de documentação** para criar as próprias políticas e adicioná-las ao perfil depois de gerado. Esses links estão disponíveis mesmo depois de salvar a máquina de estado.

## Perfil para testar tarefas HTTP no Workflow Studio
<a name="test-state-role-http"></a>

[Testar](call-https-apis.md#http-task-test) um estado de tarefa HTTP requer um perfil de execução. Se você não tiver um perfil com permissões suficientes, use uma das seguintes opções para criar um perfil:
+ **Gerar automaticamente um perfil com o Workflow Studio (recomendado)**: essa é a opção segura. Feche a caixa de diálogo **Testar estado** e siga as instruções em [Gerar perfis automaticamente](#auto-generating-roles). Isso exigirá que você primeiro crie ou atualize a máquina de estado e depois volte ao Workflow Studio para testar o estado.
+ **Usar um perfil com acesso de administrador**: se você tiver permissões para criar um perfil com acesso total a todos os serviços e os recursos na AWS, poderá usar esse perfil para testar qualquer tipo de estado no fluxo de trabalho. Para fazer isso, é possível criar um perfil de serviço do Step Functions e adicionar a [política AdministratorAccess](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) a ele no console do IAM [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

## Perfil para testar uma integração de serviços otimizada no Workflow Studio
<a name="test-state-role-optimized"></a>

Estados de tarefa que chamam [integrações de serviços otimizadas](integrate-optimized.md) precisam de um perfil de execução. Se você não tiver um perfil com permissões suficientes, use uma das seguintes opções para criar um perfil:
+ **Gerar automaticamente um perfil com o Workflow Studio (recomendado)**: essa é a opção segura. Feche a caixa de diálogo **Testar estado** e siga as instruções em [Gerar perfis automaticamente](#auto-generating-roles). Isso exigirá que você primeiro crie ou atualize a máquina de estado e depois volte ao Workflow Studio para testar o estado.
+ **Usar um perfil com acesso de administrador**: se você tiver permissões para criar um perfil com acesso total a todos os serviços e os recursos na AWS, poderá usar esse perfil para testar qualquer tipo de estado no fluxo de trabalho. Para fazer isso, é possível criar um perfil de serviço do Step Functions e adicionar a [política AdministratorAccess](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) a ele no console do IAM [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

## Perfil para testar uma integração de serviços de SDKs da AWS no Workflow Studio
<a name="test-state-role-aws-sdk"></a>

Estados de tarefa que chamam [integrações de AWS SDKs](supported-services-awssdk.md) precisam de um perfil de execução. Se você não tiver um perfil com permissões suficientes, use uma das seguintes opções para criar um perfil:
+ **Gerar automaticamente um perfil com o Workflow Studio (recomendado)**: essa é a opção segura. Feche a caixa de diálogo **Testar estado** e siga as instruções em [Gerar perfis automaticamente](#auto-generating-roles). Isso exigirá que você primeiro crie ou atualize a máquina de estado e depois volte ao Workflow Studio para testar o estado. Faça o seguinte:

  1. Feche a caixa de diálogo **Testar estado**.

  1. Selecione a guia **Config** para visualizar o modo Config.

  1. Role para baixo até a seção **Permissões**.

  1. O Workflow Studio exibe um banner com a mensagem: **Permissões para determinadas ações não podem ser geradas automaticamente. Um perfil do IAM será criado somente com permissões parciais.** Selecione **Revisar permissões geradas automaticamente**.

  1. A tabela **Revisar permissões geradas automaticamente** exibe uma linha que mostra a ação correspondente ao estado da tarefa que você deseja testar. Consulte os links em **Links de documentação** para criar as próprias políticas do IAM em um perfil personalizado.
+ **Usar um perfil com acesso de administrador**: se você tiver permissões para criar um perfil com acesso total a todos os serviços e os recursos na AWS, poderá usar esse perfil para testar qualquer tipo de estado no fluxo de trabalho. Para fazer isso, é possível criar um perfil de serviço do Step Functions e adicionar a [política AdministratorAccess](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) a ele no console do IAM [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

## Perfil para testar estados de fluxo no Workflow Studio
<a name="test-state-role-flow"></a>

É necessário ter um perfil de execução para testar os estados de fluxo no Workflow Studio. Os estados de fluxo são aqueles estados que direcionam o fluxo de execução, como [Estado de escolha do fluxo de trabalho](state-choice.md), [Estado paralelo do fluxo de trabalho](state-parallel.md), [Estado de mapa do fluxo de trabalho](state-map.md), [Estado de passagem do fluxo de trabalho](state-pass.md), [Estado de espera do fluxo de trabalho](state-wait.md), [Estado de sucesso do fluxo de trabalho](state-succeed.md) ou [Estado de falha do fluxo de trabalho](state-fail.md). A API [TestState](https://docs.aws.amazon.com/step-functions/latest/apireference/API_TestState.html) não funciona com os estados Mapa nem Paralelo. Use uma das seguintes opções para criar um perfil para testar um estado do fluxo:
+ **Usar qualquer perfil na Conta da AWS (recomendado)**: os estados de fluxo não exigem nenhuma política específica do IAM, porque eles não chamam ações nem recursos da AWS. Portanto, é possível usar qualquer perfil do IAM no Conta da AWS. 

  1. Na caixa de diálogo **Testar estado**, selecione qualquer perfil na lista suspensa **Perfil de execução**.

  1. Se nenhum perfil aparecer na lista suspensa, faça o seguinte:

     1. No console do IAM [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/), selecione **Perfis**.

     1. Selecione um perfil na lista e copie o ARN na página de detalhes do perfil. Será necessário fornecer esse ARN na caixa de diálogo **Testar estado**.

     1. Na caixa de diálogo **Testar estado**, selecione **Inserir um ARN de perfil** na lista suspensa **Perfil de execução**.

     1. Cole o ARN em **ARN do perfil**.
+ **Usar um perfil com acesso de administrador**: se você tiver permissões para criar um perfil com acesso total a todos os serviços e os recursos na AWS, poderá usar esse perfil para testar qualquer tipo de estado no fluxo de trabalho. Para fazer isso, é possível criar um perfil de serviço do Step Functions e adicionar a [política AdministratorAccess](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) a ele no console do IAM [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

# Configurar o tratamento de erros com o Workflow Studio no Step Functions
<a name="workflow-studio-process-error"></a>

**Gerenciar estados e transformar dados**  
Saiba mais sobre como [transmitir dados entre estados com variáveis](workflow-variables.md) e [transformar dados com JSONata](transforming-data.md).

É possível configurar o tratamento de erros no editor visual do Workflow Studio. Por padrão, quando um estado relata um erro, o Step Functions faz com que a execução do fluxo de trabalho falhe totalmente. Para ações e alguns estados de fluxo, você pode configurar como o Step Functions lida com erros. 

Mesmo que você tenha configurado o tratamento de erros, alguns erros ainda podem causar uma falha na execução de um fluxo de trabalho. Para obter mais informações, consulte [Tratar erros em fluxos de trabalho do Step Functions](concepts-error-handling.md). No Workflow Studio, configure o tratamento de erros na guia **Tratamento de erros** do [Painel Inspetor](workflow-studio.md#workflow-studio-components-formdefinition). 

## Tente novamente em caso de erros
<a name="workflow-studio-process-error-retry"></a>

Você pode adicionar uma ou mais regras aos estados de ação e ao estado de fluxo [Estado paralelo do fluxo de trabalho](state-parallel.md) para repetir a tarefa quando ocorrer um erro. Essas regras são chamadas de *retriers*. Para adicionar um retrier, escolha o ícone de edição na caixa **Retrier nº 1** e configure as opções:
+ (Opcional) No campo **Comentário**, adicione seu comentário. Isso não afetará o fluxo de trabalho, mas pode ser usado para anotar o fluxo de trabalho. 
+ Coloque o cursor no campo **Erros** e escolha um erro que acionará o retrier ou insira um nome de erro personalizado. Você pode escolher ou adicionar vários erros.
+ (Opcional) Defina um **Intervalo**. Esse é o tempo em segundos antes que o Step Functions faça a primeira nova tentativa. Novas tentativas ocorrerão em intervalos que você pode configurar com o **Máximo de tentativas** e a **Taxa de recuo**.
+ (Opcional) Defina o **Máximo de tentativas**. Esse é o número máximo de novas tentativas antes que o Step Functions cause falha na execução.
+ (Opcional) Defina a **Taxa de recuo**. Esse é um multiplicador que determina em quanto o intervalo de nova tentativa aumentará a cada tentativa.

**nota**  
Nem todas as opções de tratamento de erros estão disponíveis para todos os estados. Invocação Lambda tem um retrier configurado por padrão.

## Detecção de erros
<a name="workflow-studio-process-error-catch"></a>

Você pode adicionar uma ou mais regras aos estados de ação e aos estados de fluxo [Estado paralelo do fluxo de trabalho](state-parallel.md) e [Estado de mapa do fluxo de trabalho](state-map.md) para capturar um erro. Essas regras são chamadas de *catchers*. Para adicionar um catcher, escolha **Adicionar novo catcher** e configure as opções:
+ (Opcional) No campo **Comentário**, adicione seu comentário. Isso não afetará o fluxo de trabalho, mas pode ser usado para anotar o fluxo de trabalho. 
+ Coloque o cursor no campo **Erros** e escolha um erro que acionará o catcher ou insira um nome de erro personalizado. Você pode escolher ou adicionar vários erros.
+ No campo **Estado de fallback**, escolha um [estado de fallback](concepts-error-handling.md#error-handling-fallback-states). Esse é o estado para o qual o fluxo de trabalho será movido em seguida, depois que um erro for detectado.
+ (Opcional) No **ResultPath**campo, adicione um `ResultPath` filtro para adicionar o erro à entrada do estado original. O [`ResultPath`](input-output-resultpath.md)deve ser válido [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/). Isso será enviado para o estado de fallback.

## Tempos limite
<a name="workflow-studio-process-error-timeout"></a>

Você pode configurar um tempo limite para os estados de ação para definir o número máximo de segundos que o estado pode ser executado antes que ele falhe. Use tempos limite para evitar execuções travadas. Para configurar um tempo limite, insira o número de segundos que o estado deve esperar antes que a execução falhe. Para obter mais informações sobre os tempos limites, consulte `TimeoutSeconds`no estado [Estado de tarefa do fluxo de trabalho](state-task.md).

## HeartbeatSeconds
<a name="workflow-studio-process-error-heartbeat"></a>

Você pode configurar um *Heartbeat* ou uma notificação periódica enviada pela tarefa. Se você definir um intervalo de heartbeat, e o estado não enviar notificações de heartbeat nos intervalos configurados, a tarefa será marcada como falha. Para configurar uma heartbeat, defina um número inteiro positivo diferente de zero de segundos. Para ter mais informações, consulte `HeartBeatSeconds` no estado [Estado de tarefa do fluxo de trabalho](state-task.md). 

# Usar o Workflow Studio no Infrastructure Composer para criar fluxos de trabalho do Step Functions
<a name="use-wfs-in-app-composer"></a>

O Workflow Studio está disponível no Infrastructure Composer para ajudar a projetar e criar fluxos de trabalho. O Workflow Studio no Infrastructure Composer oferece um ambiente visual de infraestrutura como código (IaC) que facilita a incorporação de fluxos de trabalho às aplicações sem servidor criadas com ferramentas de IaC, como modelos do CloudFormation. 

O AWS Infrastructure Composer é um criador visual que ajuda a desenvolver modelos do AWS SAM e do AWS CloudFormation usando uma interface gráfica simples. ComInfrastructure Composer, você cria uma arquitetura de aplicativo arrastando, agrupando e conectando-se Serviços da AWS em uma tela visual. Infrastructure Composerem seguida, cria um modelo de IaC a partir do seu design que você pode usar para implantar seu aplicativo com a Interface de Linha de AWS SAM Comando (AWS SAMCLI) ou. CloudFormation Para saber mais sobre o Infrastructure Composer, consulte [O que é o Infrastructure Composer](https://docs.aws.amazon.com/application-composer/latest/dg/what-is-composer.html).

Quando você usa o Workflow Studio noInfrastructure Composer, o Infrastructure Composer conecta as etapas individuais do fluxo de trabalho aos AWS recursos e gera as configurações dos recursos em um AWS SAM modelo. Infrastructure Composertambém adiciona as IAM permissões necessárias para que seu fluxo de trabalho seja executado. Usando o Workflow Studio no Infrastructure Composer, é possível criar protótipos de aplicações e transformá-los em aplicações prontas para produção.

Ao usar o Workflow Studio no Infrastructure Composer, é possível alternar entre a tela do Infrastructure Composer e o Workflow Studio.

**Topics**
+ [Usar o Workflow Studio no Infrastructure Composer](#procedure-use-wfs-in-app-composer)
+ [Referenciar recursos dinamicamente usando substituições de definições do CloudFormation](#use-cfn-sub-edit-state-machine-resource)
+ [Conectar as tarefas de integração de serviços às placas de componentes aprimoradas](#connect-service-integrations-enhanced-cards)
+ [Importar projetos existentes e sincronizá–los localmente](#import-projects-local-sync)
+ [Exportar fluxos de trabalho do Step Functions diretamente para o AWS Infrastructure Composer](#export-wsf-projects-into-app-composer)
+ [Recursos indisponíveis do Workflow Studio no AWS Infrastructure Composer](#wfs-features-unavailable-app-composer)

## Usar o Workflow Studio no Infrastructure Composer para criar fluxos de trabalho sem servidor
<a name="procedure-use-wfs-in-app-composer"></a>

1. Abra o [console do Compositor de Infraestrutura](https://console.aws.amazon.com/composer/home) e selecione **Criar projeto** para criar um projeto.

1. No campo de pesquisa na paleta **Recursos**, insira **state machine**.

1. Arraste o recurso **Máquina de estado do Step Functions** para a tela. 

1. Selecione **Editar no Workflow Studio** para editar o recurso de máquina de estado.

   A animação a seguir mostra como mudar para o Workflow Studio para editar a definição de máquina de estado.  
![\[Uma animação que ilustra como usar o Workflow Studio no Infrastructure Composer.\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/images/use-wfs-in-app-composer.gif)

   A integração com o Workflow Studio para editar recursos de máquinas de estado criados no Infrastructure Composer só está disponível para o recurso [https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html). Essa integração não está disponível para modelos que usam o recurso [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html).

## Referenciar recursos dinamicamente usando substituições de definição do CloudFormation no Workflow Studio
<a name="use-cfn-sub-edit-state-machine-resource"></a>

No Workflow Studio, é possível usar substituições de definição do CloudFormation na definição de fluxo de trabalho para referenciar dinamicamente os recursos definidos no modelo de IaC. É possível adicionar substituições de espaço reservado à definição de fluxo de trabalho usando a notação `${dollar_sign_brace}`. Elas são substituídas por valores reais durante o processo de criação da pilha do CloudFormation. Para obter mais informações sobre substituição de definições, consulte [DefinitionSubstitutions em AWS SAM modelos](concepts-sam-sfn.md#sam-definition-substitution-eg).

A animação a seguir mostra como adicionar substituições de espaço reservado para os recursos na definição de máquina de estado.

![\[Animação mostrando como adicionar substituições de espaço reservado para os recursos à definição de máquina de estado.\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/images/use-def-sub-wfs-app-composer.gif)


## Conectar as tarefas de integração de serviços às placas de componentes aprimoradas
<a name="connect-service-integrations-enhanced-cards"></a>

É possível conectar as tarefas que chamam [integrações de serviços otimizadas](integrate-optimized.md) às [placas de componentes aprimoradas](https://docs.aws.amazon.com/application-composer/latest/dg/reference-cards.html#reference-cards-enhanced-components) na tela do Infrastructure Composer. Esse procedimento associa todas as substituições de espaço reservado especificadas pela notação `${dollar_sign_brace}` na definição do fluxo de trabalho e a propriedade `DefinitionSubstitution` do recurso `StateMachine`. Também adiciona as políticas do AWS SAM apropriadas à máquina de estado.

Se você associar tarefas otimizadas de integração de serviços a [placas de componentes padrão](https://docs.aws.amazon.com/application-composer/latest/dg/using-composer-cards.html#using-composer-cards-component-intro), a linha de conexão não aparecerá na tela Infrastructure Composer.

A animação a seguir mostra como conectar uma tarefa otimizada a uma placa de componente aprimorado e visualizar as alterações no [https://docs.aws.amazon.com/application-composer/latest/dg/using-change-inspector.html](https://docs.aws.amazon.com/application-composer/latest/dg/using-change-inspector.html).

![\[Animação mostrando como conectar tarefas e integrações de serviços otimizadas.\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/images/make-connections-wfs-app-composer.gif)


Não é possível conectar [integrações de SDKs da AWS](supported-services-awssdk.md) no estado de Tarefa com placas de componentes aprimoradas ou integrações de serviços otimizadas com placas de componentes padrão. Para essas tarefas, é possível associar as substituições no painel **Propriedades do recurso** na tela do Infrastructure Composer e adicionar políticas ao modelo do AWS SAM.

**dica**  
Também é possível associar substituições de espaço reservado para a máquina de estado em **Substituições de definição** no painel **Propriedades do recurso**. Ao fazer isso, você deve adicionar as permissões necessárias para AWS service (Serviço da AWS) suas chamadas de estado da Tarefa na função de execução da máquina de estado. Para obter informações sobre as permissões necessárias a um perfil de execução, consulte [Configurar perfis de execução com o Workflow Studio no Step Functions](manage-state-machine-permissions.md).

A animação a seguir mostra como você pode atualizar manualmente o mapeamento de substituição de espaço reservado no painel **Propriedades do recurso**.

![\[Animação mostrando como atualizar o mapeamento de substituição de espaço reservado no painel Propriedades do recurso.\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/images/manual-update-placeholder-mapping.gif)


## Importar projetos existentes e sincronizá–los localmente
<a name="import-projects-local-sync"></a>

É possível abrir projetos existentes do CloudFormation e do AWS SAM no Infrastructure Composer para visualizá-los para entender melhor e modificar os projetos. Usando o atributo de [sincronização local](https://docs.aws.amazon.com/application-composer/latest/dg/reference-features-local-sync.html) do Infrastructure Composer, é possível sincronizar e salvar automaticamente os arquivos de modelo e código na máquina de compilação local. O uso do modo de sincronização local pode complementar os fluxos de desenvolvimento existentes. Assegure-se de que o navegador seja compatível com a [API do File System Access](https://docs.aws.amazon.com/application-composer/latest/dg/reference-fsa.html), que permite a uma aplicação da web ler, gravar e salvar arquivos no sistema de arquivos local. Recomendamos usar o Google Chrome ou o Microsoft Edge.

## Exportar fluxos de trabalho do Step Functions diretamente para o AWS Infrastructure Composer
<a name="export-wsf-projects-into-app-composer"></a>

O AWS Step Functions console fornece a capacidade de exportar um fluxo de trabalho de máquina de estado salvo como um modelo que é reconhecido como um recurso IaC avançado pelaInfrastructure Composer. Esse recurso cria um modelo de IaC como um AWS SAM esquema e leva você até. Infrastructure Composer Para obter mais informações, consulte [Exportar seu fluxo de trabalho para modelos de IaC](exporting-iac-templates.md).

## Recursos indisponíveis do Workflow Studio no AWS Infrastructure Composer
<a name="wfs-features-unavailable-app-composer"></a>

Ao usar o Workflow Studio no Infrastructure Composer, alguns recursos do Workflow Studio não estão disponíveis. Além disso, a seção **Parâmetros da API** disponível no painel [Painel Inspetor](workflow-studio.md#workflow-studio-components-formdefinition) é compatível com substituições de definição do CloudFormation. É possível adicionar as substituições no [Modo de código](workflow-studio.md#wfs-interface-code-mode) usando a notação `${dollar_sign_brace}`. Para obter mais informações sobre essa notação, consulte [DefinitionSubstitutions em AWS SAM modelos](concepts-sam-sfn.md#sam-definition-substitution-eg).

A lista a seguir descreve os recursos do Workflow Studio que não estão disponíveis ao usar o Workflow Studio no Infrastructure Composer:
+ [Modelos iniciais — Os modelos](starter-templates.md) iniciais são ready-to-run exemplos de projetos que criam automaticamente os protótipos e as definições do fluxo de trabalho. Esses modelos implantam todos os AWS recursos relacionados que seu projeto precisa para o seu Conta da AWS.
+ [Modo de configuração](workflow-studio.md#wfs-interface-config-mode): esse modo permite gerenciar a configuração das máquinas de estado. É possível atualizar as configurações da máquina de estado nos modelos de IaC ou usar o painel **Propriedades do recurso** na tela do Infrastructure Composer. Para obter informações sobre a atualização de configurações no painel **Propriedades do recurso**, consulte [Conectar as tarefas de integração de serviços às placas de componentes aprimoradas](#connect-service-integrations-enhanced-cards).
+ [API TestState](test-state-isolation.md)
+ Opção para importar ou exportar definições de fluxo de trabalho no botão suspenso **Ações** do Workflow Studio. Em vez disso, no **menu** do Infrastructure Composer, selecione **Abrir** > **Pasta do projeto**. Certifique-se de ter habilitado o modo de [sincronização local](https://docs.aws.amazon.com/application-composer/latest/dg/reference-features-local-sync.html) para salvar automaticamente as alterações na tela do Infrastructure Composer diretamente na máquina local.
+ Botão **Executar**. Ao usar o Workflow Studio no Infrastructure Composer, o Infrastructure Composer gera o código IaC para o fluxo de trabalho. Portanto, primeiro será necessário implantar o modelo. Depois, execute o fluxo de trabalho no console ou por meio da AWS Command Line Interface (AWS CLI).

# Usando AWS SAM para criar fluxos de trabalho do Step Functions
<a name="concepts-sam-sfn"></a>

Você pode usar o AWS Serverless Application Model Step Functions para criar fluxos de trabalho e implantar a infraestrutura de que precisa, incluindo funções e eventos Lambda APIs , para criar aplicativos sem servidor.

Você também pode usar a AWS Serverless Application Model CLI em conjunto com o AWS Toolkit for Visual Studio Code como parte de uma experiência integrada para criar e implantar AWS Step Functions máquinas de estado. É possível criar uma aplicação de tecnologia sem servidor com o AWS SAM e compilar a máquina de estado no IDE do VS Code. Depois, você pode validar, empacotar e implantar recursos. 

**dica**  
Para implantar um exemplo de aplicativo sem servidor que inicia um fluxo de trabalho do Step Functions usando AWS SAM, consulte [Deploy with AWS SAM](https://catalog.workshops.aws/stepfunctions/iac/deploy-with-sam) no *The AWS Step Functions * Workshop.

## Por que usar Step Functions com AWS SAM?
<a name="concepts-sam-sfn-integration"></a>

Ao usar o Step Functions com AWS SAM você pode:
+ Comece a usar um modelo AWS SAM de amostra.
+ Compilar a máquina de estado no aplicativo sem servidor.
+ Use a substituição de variáveis para substituí-la ARNs em sua máquina de estado no momento da implantação.

   O AWS CloudFormation é compatível com [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions) que permitem adicionar referências dinâmicas na definição de fluxo de trabalho a um valor fornecido no modelo do CloudFormation. É possível adicionar referências dinâmicas incluindo substituições na definição de fluxo de trabalho usando a notação `${dollar_sign_brace}`. Você também precisa definir essas referências dinâmicas na `DefinitionSubstitutions` propriedade do StateMachine recurso em seu CloudFormation modelo. Essas substituições são substituídas por valores reais durante o processo de criação da pilha do CloudFormation. Para obter mais informações, consulte [DefinitionSubstitutions em AWS SAM modelos](#sam-definition-substitution-eg). 
+ Especifique a função da sua máquina de estado usando modelos AWS SAM de política.
+ Inicie execuções de máquinas de estado com o API Gateway, EventBridge eventos ou em um cronograma dentro do seu AWS SAM modelo. 

## Integração do Step Functions com a AWS SAM especificação
<a name="concepts-sam-sfn-ots2"></a>

É possível usar os [Modelos de política do AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-policy-templates.html) para adicionar permissões à máquina de estado. Com essas permissões, você pode orquestrar funções do Lambda e outros AWS recursos para formar fluxos de trabalho complexos e robustos. 

## Integração do Step Functions à CLI do SAM
<a name="concepts-sam-sfn-ots3"></a>

O Step Functions é integrado à AWS SAM CLI. Use isso para desenvolver rapidamente uma máquina de estado no aplicativo sem servidor.

Experimente o [Crie uma máquina de estado Step Functions usando AWS SAM](tutorial-state-machine-using-sam.md) tutorial para aprender a usar AWS SAM para criar máquinas de estado.

As funções de AWS SAM CLI suportadas incluem: 


| Comando da CLI | Description | 
| --- | --- | 
| sam init |  Inicializa um aplicativo sem servidor com um modelo. AWS SAM Pode ser usado com um modelo do SAM para o Step Functions.  | 
| sam validate | Valida um AWS SAM modelo. | 
| sam package |  Empacota um AWS SAM aplicativo. Cria um arquivo ZIP do código e das dependências e faz upload dele no Amazon S3. Depois, ele retorna uma cópia do modelo do AWS SAM , substituindo referências a artefatos locais pelo local do Amazon S3 onde o comando fez upload dos artefatos.  | 
| sam deploy | Implanta um AWS SAM aplicativo. | 
| sam publish |  Publique um AWS SAM aplicativo no AWS Serverless Application Repository. Esse comando usa um AWS SAM modelo empacotado e publica o aplicativo na região especificada.  | 

**nota**  
Ao usar o AWS SAM local, você pode emular o Lambda e o API Gateway localmente. No entanto, você não pode emular Step Functions localmente usando o. AWS SAM

## DefinitionSubstitutions em AWS SAM modelos
<a name="sam-definition-substitution-eg"></a>

É possível definir máquinas de estado usando modelos do CloudFormation com o AWS SAM. Ao usar o AWS SAM, é possível definir a máquina de estado em linha no modelo ou em um arquivo separado. O modelo do AWS SAM a seguir inclui uma máquina de estado que simula um fluxo de trabalho de negociação de ações. Essa máquina de estado invoca três funções do Lambda para conferir o preço de uma ação e determinar se deve comprar ou vender a ação. Essa transação é então registrada em uma tabela do Amazon DynamoDB. As ARNs Lambda funções e a DynamoDB tabela do modelo a seguir são especificadas usando [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions).

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: |
  step-functions-stock-trader
  Sample SAM Template for step-functions-stock-trader
Resources:
  StockTradingStateMachine:
    Type: AWS::Serverless::StateMachine
    Properties:
      DefinitionSubstitutions:
        StockCheckerFunctionArn: !GetAtt StockCheckerFunction.Arn
        StockSellerFunctionArn: !GetAtt StockSellerFunction.Arn
        StockBuyerFunctionArn: !GetAtt StockBuyerFunction.Arn
        DDBPutItem: !Sub arn:${AWS::Partition}:states:::dynamodb:putItem
        DDBTable: !Ref TransactionTable
      Policies:
        - DynamoDBWritePolicy:
            TableName: !Ref TransactionTable
        - LambdaInvokePolicy:
            FunctionName: !Ref StockCheckerFunction
        - LambdaInvokePolicy:
            FunctionName: !Ref StockBuyerFunction
        - LambdaInvokePolicy:
            FunctionName: !Ref StockSellerFunction
      DefinitionUri: statemachine/stock_trader.asl.json
  StockCheckerFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: functions/stock-checker/
      Handler: app.lambdaHandler
      Runtime: nodejs18.x
      Architectures:
        - x86_64
  StockSellerFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: functions/stock-seller/
      Handler: app.lambdaHandler
      Runtime: nodejs18.x
      Architectures:
        - x86_64
  StockBuyerFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: functions/stock-buyer/
      Handler: app.lambdaHandler
      Runtime: nodejs18.x
      Architectures:
        - x86_64
  TransactionTable:
    Type: AWS::DynamoDB::Table
    Properties:
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
```

O código a seguir é a definição da máquina de estado no arquivo `stock_trader.asl.json` usado no tutorial [Crie uma máquina de estado Step Functions usando AWS SAM](tutorial-state-machine-using-sam.md). Essa definição da máquina de estado contém várias `DefinitionSubstitutions` indicadas pela notação `${dollar_sign_brace}`. Por exemplo, em vez de especificar um ARN de função estática do Lambda para a tarefa `Check Stock Value`, a substituição `${StockCheckerFunctionArn}` é usada. Essa substituição é definida na propriedade [DefinitionSubstitutions](#sam-template-def-substitution) do modelo. `DefinitionSubstitutions` é um mapa de pares de chave-valor para o recurso de máquina de estado. Em`DefinitionSubstitutions`, \$1 \$1StockCheckerFunctionArn\$1 mapeia para o ARN do `StockCheckerFunction` recurso usando a função CloudFormation intrínseca. [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html) Ao implantar o modelo do AWS SAM, as `DefinitionSubstitutions` do modelo são substituídas pelos valores reais.

```
{
    "Comment": "A state machine that does mock stock trading.",
    "StartAt": "Check Stock Value",
    "States": {
        "Check Stock Value": {
            "Type": "Task",
            "Resource": "arn:aws:states:::lambda:invoke",
            "OutputPath": "$.Payload",
            "Parameters": {
                "Payload.$": "$",
                "FunctionName": "${StockCheckerFunctionArn}"
            },
            "Next": "Buy or Sell?"
        },
        "Buy or Sell?": {
            "Type": "Choice",
            "Choices": [
                {
                    "Variable": "$.stock_price",
                    "NumericLessThanEquals": 50,
                    "Next": "Buy Stock"
                }
            ],
            "Default": "Sell Stock"
        },
        "Buy Stock": {
            "Type": "Task",
            "Resource": "arn:aws:states:::lambda:invoke",
            "OutputPath": "$.Payload",
            "Parameters": {
                "Payload.$": "$",
                "FunctionName": "${StockBuyerFunctionArn}"
            },
            "Retry": [
                {
                    "ErrorEquals": [
                        "Lambda.ServiceException",
                        "Lambda.AWSLambdaException",
                        "Lambda.SdkClientException",
                        "Lambda.TooManyRequestsException"
                    ],
                    "IntervalSeconds": 1,
                    "MaxAttempts": 3,
                    "BackoffRate": 2
                }
            ],
            "Next": "Record Transaction"
        },
        "Sell Stock": {
            "Type": "Task",
            "Resource": "arn:aws:states:::lambda:invoke",
            "OutputPath": "$.Payload",
            "Parameters": {
                "Payload.$": "$",
                "FunctionName": "${StockSellerFunctionArn}"
            },
            "Next": "Record Transaction"
        },
        "Record Transaction": {
            "Type": "Task",
            "Resource": "arn:aws:states:::dynamodb:putItem",
            "Parameters": {
                "TableName": "${DDBTable}",
                "Item": {
                    "Id": {
                        "S.$": "$.id"
                    },
                    "Type": {
                        "S.$": "$.type"
                    },
                    "Price": {
                        "N.$": "$.price"
                    },
                    "Quantity": {
                        "N.$": "$.qty"
                    },
                    "Timestamp": {
                        "S.$": "$.timestamp"
                    }
                }
            },
            "End": true
        }
    }
}
```

## Próximas etapas
<a name="concepts-sam-sfn-next-steps"></a>

Você pode aprender mais sobre o uso do Step Functions AWS SAM com os seguintes recursos:
+ Conclua o [Crie uma máquina de estado Step Functions usando AWS SAM](tutorial-state-machine-using-sam.md) tutorial para criar uma máquina de estado com AWS SAM o.
+ Especifique um [AWS::Serverless::StateMachine](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html)recurso.
+ Localize os [Modelos de política do AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-policy-templates.html) a serem usados.
+ Use o [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions.html) com o Step Functions. 
+ Analise a [referência da CLI do AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-command-reference.html) para saber mais sobre os recursos disponíveis no AWS SAM.

Também é possível projetar e criar fluxos de trabalho na infraestrutura como código (IaC) usando criadores visuais, como o Workflow Studio no Infrastructure Composer. Para obter mais informações, consulte [Usar o Workflow Studio no Infrastructure Composer para criar fluxos de trabalho do Step Functions](use-wfs-in-app-composer.md).

# Usando CloudFormation para criar um fluxo de trabalho em Step Functions
<a name="tutorial-lambda-state-machine-cloudformation"></a>

Neste tutorial, você criará uma AWS Lambda função usando AWS CloudFormation o. Você usará o CloudFormation console e um modelo YAML para criar uma *pilha* (funções do IAM, a função Lambda e a máquina de estado). Depois, você usará o console do Step Functions para iniciar a execução da máquina de estado.

Para obter mais informações, consulte [Trabalhando com CloudFormation modelos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) e o `[AWS::StepFunctions::StateMachine](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html)` recurso no *Guia AWS CloudFormation do usuário*.

## Etapa 1: configurar seu CloudFormation modelo
<a name="lambda-state-machine-cfn-step-1"></a>

Antes de usar os [modelos de exemplo](#lambda-state-machine-cfn-step-2), é necessário entender como declarar as diferentes partes de um modelo do CloudFormation .

### Para criar uma função do IAM para Lambda
<a name="lambda-state-machine-cfn-procedure-create-iam-role"></a>

Defina a política de confiança associada ao perfil do IAM para a função do Lambda. Os exemplos a seguir definem uma política de confiança usando YAML ou JSON.

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

```
LambdaExecutionRole:
    Type: "AWS::IAM::Role"
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"		 	 	 
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: "sts:AssumeRole"
```

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

```
          "LambdaExecutionRole": {
              "Type": "AWS::IAM::Role",
              "Properties": {
                  "AssumeRolePolicyDocument": {
                      "Version": "2012-10-17",		 	 	 
                      "Statement": [
                          {
                              "Effect": "Allow",
                              "Principal": {
                                  "Service": "lambda.amazonaws.com"
                              },
                              "Action": "sts:AssumeRole"
                          }
                      ]
                  }
              }
```

------

### Criar uma função do Lambda
<a name="lambda-state-machine-cfn-create-function"></a>

Defina as propriedades a seguir da função do Lambda que imprimirão a mensagem `Hello World`.

**Importante**  
Certifique-se de que sua função Lambda esteja na mesma AWS conta e em sua máquina Região da AWS de estado.

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

```
MyLambdaFunction:
    Type: "AWS::Lambda::Function"
    Properties:
      Handler: "index.handler"
      Role: !GetAtt [ LambdaExecutionRole, Arn ]
      Code:
        ZipFile: |
          exports.handler = (event, context, callback) => {
              callback(null, "Hello World!");
          };
      Runtime: "nodejs12.x"
      Timeout: "25"
```

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

```
        "MyLambdaFunction": {
              "Type": "AWS::Lambda::Function",
              "Properties": {
                  "Handler": "index.handler",
                  "Role": {
                      "Fn::GetAtt": [
                          "LambdaExecutionRole",
                          "Arn"
                      ]
                  },
                  "Code": {
                      "ZipFile": "exports.handler = (event, context, callback) => {\n    callback(null, \"Hello World!\");\n};\n"
                  },
                  "Runtime": "nodejs12.x",
                  "Timeout": "25"
              }
          },
```

------

### Para criar um perfil do IAM para a execução da máquina de estado
<a name="lambda-state-machine-cfn-create-role"></a>

Defina a política de confiança associada ao perfil do IAM para a execução da máquina de estado.

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

```
StatesExecutionRole:
    Type: "AWS::IAM::Role"
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"		 	 	 
        Statement:
          - Effect: "Allow"
            Principal:
              Service:
                - !Sub states.${AWS::Region}.amazonaws.com
            Action: "sts:AssumeRole"
      Path: "/"
      Policies:
        - PolicyName: StatesExecutionPolicy
          PolicyDocument:
            Version: "2012-10-17"		 	 	 
            Statement:
              - Effect: Allow
                Action:
                  - "lambda:InvokeFunction"
                Resource: "*"
```

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

```
        "StatesExecutionRole": {
              "Type": "AWS::IAM::Role",
              "Properties": {
                  "AssumeRolePolicyDocument": {
                      "Version": "2012-10-17",		 	 	 
                      "Statement": [
                          {
                              "Effect": "Allow",
                              "Principal": {
                                  "Service": [
                                      {
                                          "Fn::Sub": "states.${AWS::Region}.amazonaws.com"
                                      }
                                  ]
                              },
                              "Action": "sts:AssumeRole"
                          }
                      ]
                  },
                  "Path": "/",
                  "Policies": [
                      {
                          "PolicyName": "StatesExecutionPolicy",
                          "PolicyDocument": {
                              "Version": "2012-10-17",		 	 	 
                              "Statement": [
                                  {
                                      "Effect": "Allow",
                                      "Action": [
                                          "lambda:InvokeFunction"
                                      ],
                                      "Resource": "*"
                                  }
                              ]
                          }
                      }
                  ]
              }
          },
```

------

### Para criar uma máquina de estado do Lambda
<a name="lambda-state-machine-cfn-create"></a>

Defina a máquina de estado do Lambda.

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

```
MyStateMachine:
    Type: "AWS::StepFunctions::StateMachine"
    Properties:
      DefinitionString:
        !Sub
          - |-
            {
              "Comment": "A Hello World example using an AWS Lambda function",
              "StartAt": "HelloWorld",
              "States": {
                "HelloWorld": {
                  "Type": "Task",
                  "Resource": "${lambdaArn}",
                  "End": true
                }
              }
            }
          - {lambdaArn: !GetAtt [ MyLambdaFunction, Arn ]}
      RoleArn: !GetAtt [ StatesExecutionRole, Arn ]
```

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

```
        "MyStateMachine": {
              "Type": "AWS::StepFunctions::StateMachine",
              "Properties": {
                  "DefinitionString": {
                      "Fn::Sub": [
                          "{\n  \"Comment\": \"A Hello World example using an AWS Lambda function\",\n  \"StartAt\": \"HelloWorld\",\n  \"States\": {\n    \"HelloWorld\": {\n      \"Type\": \"Task\",\n      \"Resource\": \"${lambdaArn}\",\n      \"End\": true\n    }\n  }\n}",
                          {
                              "lambdaArn": {
                                  "Fn::GetAtt": [
                                      "MyLambdaFunction",
                                      "Arn"
                                  ]
                              }
                          }
                      ]
                  },
                  "RoleArn": {
                      "Fn::GetAtt": [
                          "StatesExecutionRole",
                          "Arn"
                      ]
                  }
              }
          }
```

------

## Etapa 2: usar o CloudFormation modelo para criar uma máquina de estado Lambda
<a name="lambda-state-machine-cfn-step-2"></a>

Depois de entender os componentes do CloudFormation modelo, você pode juntá-los e usar o modelo para criar uma CloudFormation pilha.

### Para criar a máquina de estado do Lambda
<a name="to-create-the-lam-state-machine"></a>

1. Copie os dados de exemplo a seguir em um arquivo chamado `MyStateMachine.yaml` para o exemplo de YAML ou `MyStateMachine.json` para JSON.

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

   ```
   AWSTemplateFormatVersion: "2010-09-09"
     Description: "An example template with an IAM role for a Lambda state machine."
     Resources:
       LambdaExecutionRole:
         Type: "AWS::IAM::Role"
         Properties:
           AssumeRolePolicyDocument:
             Version: "2012-10-17"		 	 	 
             Statement:
               - Effect: Allow
                 Principal:
                   Service: lambda.amazonaws.com
                 Action: "sts:AssumeRole"
     
       MyLambdaFunction:
         Type: "AWS::Lambda::Function"
         Properties:
           Handler: "index.handler"
           Role: !GetAtt [ LambdaExecutionRole, Arn ]
           Code:
             ZipFile: |
               exports.handler = (event, context, callback) => {
                   callback(null, "Hello World!");
               };
           Runtime: "nodejs12.x"
           Timeout: "25"
     
       StatesExecutionRole:
         Type: "AWS::IAM::Role"
         Properties:
           AssumeRolePolicyDocument:
             Version: "2012-10-17"		 	 	 
             Statement:
               - Effect: "Allow"
                 Principal:
                   Service:
                     - !Sub states.${AWS::Region}.amazonaws.com
                 Action: "sts:AssumeRole"
           Path: "/"
           Policies:
             - PolicyName: StatesExecutionPolicy
               PolicyDocument:
                 Version: "2012-10-17"		 	 	 
                 Statement:
                   - Effect: Allow
                     Action:
                       - "lambda:InvokeFunction"
                     Resource: "*"
     
       MyStateMachine:
         Type: "AWS::StepFunctions::StateMachine"
         Properties:
           DefinitionString:
             !Sub
               - |-
                 {
                   "Comment": "A Hello World example using an AWS Lambda function",
                   "StartAt": "HelloWorld",
                   "States": {
                     "HelloWorld": {
                       "Type": "Task",
                       "Resource": "${lambdaArn}",
                       "End": true
                     }
                   }
                 }
               - {lambdaArn: !GetAtt [ MyLambdaFunction, Arn ]}
           RoleArn: !GetAtt [ StatesExecutionRole, Arn ]
   ```

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

   ```
   {
         "AWSTemplateFormatVersion": "2010-09-09",
         "Description": "An example template with an IAM role for a Lambda state machine.",
         "Resources": {
             "LambdaExecutionRole": {
                 "Type": "AWS::IAM::Role",
                 "Properties": {
                     "AssumeRolePolicyDocument": {
                         "Version": "2012-10-17",		 	 	 
                         "Statement": [
                             {
                                 "Effect": "Allow",
                                 "Principal": {
                                     "Service": "lambda.amazonaws.com"
                                 },
                                 "Action": "sts:AssumeRole"
                             }
                         ]
                     }
                 }
             },
             "MyLambdaFunction": {
                 "Type": "AWS::Lambda::Function",
                 "Properties": {
                     "Handler": "index.handler",
                     "Role": {
                         "Fn::GetAtt": [
                             "LambdaExecutionRole",
                             "Arn"
                         ]
                     },
                     "Code": {
                         "ZipFile": "exports.handler = (event, context, callback) => {\n    callback(null, \"Hello World!\");\n};\n"
                     },
                     "Runtime": "nodejs12.x",
                     "Timeout": "25"
                 }
             },
             "StatesExecutionRole": {
                 "Type": "AWS::IAM::Role",
                 "Properties": {
                     "AssumeRolePolicyDocument": {
                         "Version": "2012-10-17",		 	 	 
                         "Statement": [
                             {
                                 "Effect": "Allow",
                                 "Principal": {
                                     "Service": [
                                         {
                                             "Fn::Sub": "states.${AWS::Region}.amazonaws.com"
                                         }
                                     ]
                                 },
                                 "Action": "sts:AssumeRole"
                             }
                         ]
                     },
                     "Path": "/",
                     "Policies": [
                         {
                             "PolicyName": "StatesExecutionPolicy",
                             "PolicyDocument": {
                                 "Version": "2012-10-17",		 	 	 
                                 "Statement": [
                                     {
                                         "Effect": "Allow",
                                         "Action": [
                                             "lambda:InvokeFunction"
                                         ],
                                         "Resource": "*"
                                     }
                                 ]
                             }
                         }
                     ]
                 }
             },
             "MyStateMachine": {
                 "Type": "AWS::StepFunctions::StateMachine",
                 "Properties": {
                     "DefinitionString": {
                         "Fn::Sub": [
                             "{\n  \"Comment\": \"A Hello World example using an AWS Lambda function\",\n  \"StartAt\": \"HelloWorld\",\n  \"States\": {\n    \"HelloWorld\": {\n      \"Type\": \"Task\",\n      \"Resource\": \"${lambdaArn}\",\n      \"End\": true\n    }\n  }\n}",
                             {
                                 "lambdaArn": {
                                     "Fn::GetAtt": [
                                         "MyLambdaFunction",
                                         "Arn"
                                     ]
                                 }
                             }
                         ]
                     },
                     "RoleArn": {
                         "Fn::GetAtt": [
                             "StatesExecutionRole",
                             "Arn"
                         ]
                     }
                 }
             }
         }
     }
   ```

------

1. Abra o [console do CloudFormation](https://console.aws.amazon.com/cloudformation/home) e escolha **Create Stack (Criar pilha)**.

1. Na página **Select Template (Selecionar modelo)**, selecione **Upload a template to Amazon S3 (Fazer upload de um modelo para o Amazon S3)**. Escolha seu arquivo `MyStateMachine` e, em seguida, **Next**.

1. Na página **Specify Details (Especificar detalhes)**, em **Stack Name (Nome da pilha)**, insira `MyStateMachine` e escolha **Next (Próximo)**.

1. Na página **Opções**, escolha **Avançar**.

1. Na página **Revisão**, escolha **Eu reconheço que o CloudFormation pode criar recursos do IAM.** e, em seguida, escolha **Criar**.

   CloudFormation começa a criar a `MyStateMachine` pilha e exibe o status **CREATE\$1IN\$1PROGRESS**. Quando o processo é concluído, o CloudFormation exibe o status **CREATE\$1COMPLETE**.

1. (Opcional) Para exibir os recursos em sua pilha, selecione a pilha e escolha a guia **Resources**.

## Etapa 3: iniciar a execução de uma máquina de estado
<a name="lambda-state-machine-cfn-step-3"></a>

Assim que você criar a máquina de estado do Lambda, poderá iniciar uma execução.

### Para iniciar a execução da máquina de estado
<a name="to-start-the-state-machine-execution"></a>

1. Abra o [console Step Functions](https://console.aws.amazon.com/states/home) e escolha o nome da máquina de estado que você criou usando CloudFormation.

1. Na ***MyStateMachine-ABCDEFGHIJ1K***página, escolha **Nova execução**.

   A página **New execution** é exibida.

1. (Opcional) Insira um nome de execução personalizado para substituir o padrão gerado.
**Nomes e registro em log não ASCII**  
O Step Functions aceita nomes de máquina de estado, execuções, atividades e rótulos que contenham caracteres não ASCII. Como esses caracteres impedirão que a Amazon CloudWatch registre dados, recomendamos usar somente caracteres ASCII para que você possa acompanhar as métricas do Step Functions.

1. Escolha **Start Execution**.

   Uma nova execução de sua máquina de estado inicia-se e uma nova página mostrando a execução em andamento é exibida.

1. (Opcional) Na seção **Detalhes da execução**, analise o **Status da execução** e os timestamps **Iniciado** e **Fechado**.

1. Para visualizar os resultados de sua execução, selecione **Output (Saída)**.

# Usando AWS CDK para criar um fluxo de trabalho padrão em Step Functions
<a name="tutorial-lambda-state-machine-cdk"></a>

É possível usar o framework de infraestrutura como código (IAC) do AWS Cloud Development Kit (AWS CDK) para criar uma máquina de estado do AWS Step Functions que contenha uma função do AWS Lambda.

Você definirá a AWS infraestrutura usando uma CDK das linguagens suportadas. Depois de definir sua infraestrutura, você sintetizará seu aplicativo em um CloudFormation modelo e o implantará em sua AWS conta.

 Você usará esse método para definir uma máquina de estado do Step Functions que contém uma função do Lambda e executará a máquina de estado usando o Console de gerenciamento da AWS do Step Functions. 

Antes de começar este tutorial, você deve configurar seu ambiente de desenvolvimento do AWS CDK conforme descrito em [Introdução aos AWS CDK – pré-requisitos](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) no *Guia do desenvolvedor do AWS Cloud Development Kit (AWS CDK) *. Então instale o AWS CDK com o seguinte comando na AWS CLI:

```
npm install -g aws-cdk
```

Este tutorial produz o mesmo resultado que [Usando CloudFormation para criar um fluxo de trabalho em Step Functions](tutorial-lambda-state-machine-cloudformation.md). Porém, neste tutorial, o AWS CDK não exige que você crie nenhuma função do IAM; o AWS CDK faz isso por você. A versão do AWS CDK também inclui uma etapa [Estado de sucesso do fluxo de trabalho](state-succeed.md) para ilustrar como adicionar mais etapas à sua máquina de estado.

**dica**  
Para implantar um exemplo de aplicativo sem servidor que inicia um Step Functions fluxo de trabalho usando AWS CDK com TypeScript, consulte [Implantar com AWS CDK](https://catalog.workshops.aws/stepfunctions/iac/deploy-with-cdk) *no AWS Step Functions * Workshop.

## Etapa 1: configurar o projeto do AWS CDK
<a name="lambda-state-machine-cdk-step-1"></a>

1. No diretório inicial ou em outro diretório, se preferir, execute o comando a seguir para criar um diretório para a nova aplicação AWS CDK.
**Importante**  
Dê ao diretório o nome `step`. O modelo de aplicação do AWS CDK usa o nome do diretório para gerar nomes para arquivos e classes de origem. Se você escolher outro nome, sua aplicação não combinará com este tutorial.

------
#### [ TypeScript ]

   ```
   mkdir step && cd step
   ```

------
#### [ JavaScript ]

   ```
   mkdir step && cd step
   ```

------
#### [ Python ]

   ```
   mkdir step && cd step
   ```

------
#### [ Java ]

   ```
   mkdir step && cd step
   ```

------
#### [ C\$1 ]

   Verifique se você instalou o .NET versão 6.0 ou superior. Para obter informações, consulte [Versões compatíveis](https://dotnet.microsoft.com/en-us/download/dotnet).

   ```
   mkdir step && cd step
   ```

------

1. Inicialize o aplicativo usando o comando **cdk init**. Especifique o modelo (“aplicação”) e a linguagem de programação desejados conforme mostrado nos exemplos a seguir.

------
#### [ TypeScript ]

   ```
   cdk init --language typescript
   ```

------
#### [ JavaScript ]

   ```
   cdk init --language javascript
   ```

------
#### [ Python ]

   ```
   cdk init --language python
   ```

   Depois que o projeto foi inicializado, ative o ambiente virtual do projeto e instale as dependências de linha de base do AWS CDK.

   ```
   source .venv/bin/activate
   python -m pip install -r requirements.txt
   ```

------
#### [ Java ]

   ```
   cdk init --language java
   ```

------
#### [ C\$1 ]

   ```
   cdk init --language csharp
   ```

------

## Etapa 2: Usar o AWS CDK para criar uma máquina de estado
<a name="lambda-state-machine-cdk-step-2"></a>

Primeiro, vamos apresentarem as partes individuais do código que definem a função do Lambda e a máquina de estado do Step Functions. Em seguida, explicaremos como colocá-los juntos em sua aplicação AWS CDK. Por fim, você verá como sintetizar e implantar esses recursos.

### Como criar uma função do Lambda
<a name="lambda-state-machine-cdk-create-function"></a>

O código AWS CDK a seguir define a função Lambda, fornecendo seu código-fonte em linha.

------
#### [ TypeScript ]

```
const helloFunction = new lambda.Function(this, 'MyLambdaFunction', {
    code: lambda.Code.fromInline(`
          exports.handler = (event, context, callback) => {
              callback(null, "Hello World!");
          };
      `),
    runtime: lambda.Runtime.NODEJS_18_X,
    handler: "index.handler",
    timeout: cdk.Duration.seconds(3)
});
```

------
#### [ JavaScript ]

```
const helloFunction = new lambda.Function(this, 'MyLambdaFunction', {
    code: lambda.Code.fromInline(`
          exports.handler = (event, context, callback) => {
              callback(null, "Hello World!");
          };
      `),
    runtime: lambda.Runtime.NODEJS_18_X,
    handler: "index.handler",
    timeout: cdk.Duration.seconds(3)
});
```

------
#### [ Python ]

```
hello_function = lambda_.Function(
            self, "MyLambdaFunction",
            code=lambda_.Code.from_inline("""
            exports.handler = (event, context, callback) => {
                callback(null, "Hello World!");
                }"""),
                runtime=lambda_.Runtime.NODEJS_18_X,
                handler="index.handler",
                timeout=Duration.seconds(25))
```

------
#### [ Java ]

```
final Function helloFunction = Function.Builder.create(this, "MyLambdaFunction")
        .code(Code.fromInline(
                "exports.handler = (event, context, callback) => { callback(null, 'Hello World!' );}"))
        .runtime(Runtime.NODEJS_18_X)
        .handler("index.handler")
        .timeout(Duration.seconds(25))
        .build();
```

------
#### [ C\$1 ]

```
var helloFunction = new Function(this, "MyLambdaFunction", new FunctionProps
{
    Code = Code.FromInline(@"`
      exports.handler = (event, context, callback) => {
        callback(null, 'Hello World!');
      }"),
    Runtime = Runtime.NODEJS_12_X,
    Handler = "index.handler",
    Timeout = Duration.Seconds(25)
});
```

------

Você pode ver, neste exemplo de código curto:
+ O nome lógico da função, `MyLambdaFunction`.
+ O código-fonte da função, incorporado como uma string no código-fonte da aplicação AWS CDK.
+ Outros atributos da função, como o runtime a ser usado (Node 18.x), o ponto de entrada da função e um tempo limite.

### Para criar uma máquina de estado do
<a name="lambda-state-machine-cdk-create"></a>

Nossa máquina de estados tem dois estados: uma função do Lambda, tarefa e um estado do [Estado de sucesso do fluxo de trabalho](state-succeed.md). A função exige criar um Step Functions [Estado de tarefa do fluxo de trabalho](state-task.md) que invoca nossa função. Esse estado de tarefa é usado como a primeira etapa na máquina de estado. O estado de sucesso é adicionado à máquina de estado usando o método `next()` do estado da tarefa. O código a seguir primeiro invoca a função chamada `MyLambdaTask` e depois, usa o método `next()` para definir um estado de sucesso chamado `GreetedWorld`.

------
#### [ TypeScript ]

```
const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
  definition: new tasks.LambdaInvoke(this, "MyLambdaTask", {
    lambdaFunction: helloFunction
  }).next(new sfn.Succeed(this, "GreetedWorld"))
});
```

------
#### [ JavaScript ]

```
const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
  definition: new tasks.LambdaInvoke(this, "MyLambdaTask", {
    lambdaFunction: helloFunction
  }).next(new sfn.Succeed(this, "GreetedWorld"))
});
```

------
#### [ Python ]

```
state_machine = sfn.StateMachine(
                                 self, "MyStateMachine",
                                 definition=tasks.LambdaInvoke(
                                 self, "MyLambdaTask",
                                 lambda_function=hello_function)
                                 .next(sfn.Succeed(self, "GreetedWorld")))
```

------
#### [ Java ]

```
final StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
        .definition(LambdaInvoke.Builder.create(this, "MyLambdaTask")
            .lambdaFunction(helloFunction)
            .build()
            .next(new Succeed(this, "GreetedWorld")))
        .build();
```

------
#### [ C\$1 ]

```
var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps {
    DefinitionBody = DefinitionBody.FromChainable(new LambdaInvoke(this, "MyLambdaTask", new LambdaInvokeProps
    {
        LambdaFunction = helloFunction
    })
    .Next(new Succeed(this, "GreetedWorld")))
});
```

------

### Para criar e implantar a aplicação AWS CDK
<a name="lambda-state-machine-cdk-app"></a>

No projeto AWS CDK que acaba de ser criado, edite o arquivo que contém a definição de pilha para que seja parecido com o código de exemplo a seguir. Você vai reconhecer as definições da função do Lambda e da máquina de estado do Step Functions das seções anteriores.

1. Atualize a pilha como mostrado nos exemplos a seguir.

------
#### [ TypeScript ]

   Atualize o `lib/step-stack.ts` com o código a seguir.

   ```
   import * as cdk from 'aws-cdk-lib';
   import * as lambda from 'aws-cdk-lib/aws-lambda';
   import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
   import * as tasks from 'aws-cdk-lib/aws-stepfunctions-tasks';
   
   export class StepStack extends cdk.Stack {
     constructor(app: cdk.App, id: string) {
       super(app, id);
   
       const helloFunction = new lambda.Function(this, 'MyLambdaFunction', {
         code: lambda.Code.fromInline(`
             exports.handler = (event, context, callback) => {
                 callback(null, "Hello World!");
             };
         `),
         runtime: lambda.Runtime.NODEJS_18_X,
         handler: "index.handler",
         timeout: cdk.Duration.seconds(3)
       });
   
       const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
         definition: new tasks.LambdaInvoke(this, "MyLambdaTask", {
           lambdaFunction: helloFunction
         }).next(new sfn.Succeed(this, "GreetedWorld"))
       });
     }
   }
   ```

------
#### [ JavaScript ]

   Atualize o `lib/step-stack.js` com o código a seguir.

   ```
   import * as cdk from 'aws-cdk-lib';
   import * as lambda from 'aws-cdk-lib/aws-lambda';
   import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
   import * as tasks from 'aws-cdk-lib/aws-stepfunctions-tasks';
   
   export class StepStack extends cdk.Stack {
     constructor(app, id) {
       super(app, id);
   
       const helloFunction = new lambda.Function(this, 'MyLambdaFunction', {
         code: lambda.Code.fromInline(`
             exports.handler = (event, context, callback) => {
                 callback(null, "Hello World!");
             };
         `),
         runtime: lambda.Runtime.NODEJS_18_X,
         handler: "index.handler",
         timeout: cdk.Duration.seconds(3)
       });
   
       const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
         definition: new tasks.LambdaInvoke(this, "MyLambdaTask", {
           lambdaFunction: helloFunction
         }).next(new sfn.Succeed(this, "GreetedWorld"))
       });
     }
   }
   ```

------
#### [ Python ]

   Atualize o `step/step_stack.py` com o código a seguir.

   ```
   from aws_cdk import (
       Duration,
       Stack,
       aws_stepfunctions as sfn,
       aws_stepfunctions_tasks as tasks,
       aws_lambda as lambda_
   )
   class StepStack(Stack):
   
       def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
           super().__init__(scope, construct_id, **kwargs)
   
           hello_function = lambda_.Function(
               self, "MyLambdaFunction",
               code=lambda_.Code.from_inline("""
               exports.handler = (event, context, callback) => {
                   callback(null, "Hello World!");
                   }"""),
                   runtime=lambda_.Runtime.NODEJS_18_X,
                   handler="index.handler",
                   timeout=Duration.seconds(25))
   
           state_machine = sfn.StateMachine(
               self, "MyStateMachine",
               definition=tasks.LambdaInvoke(
               self, "MyLambdaTask",
               lambda_function=hello_function)
               .next(sfn.Succeed(self, "GreetedWorld")))
   ```

------
#### [ Java ]

   Atualize o `src/main/java/com.myorg/StepStack.java` com o código a seguir.

   ```
   package com.myorg;
   
   import software.constructs.Construct;
   import software.amazon.awscdk.Stack;
   import software.amazon.awscdk.StackProps;
   import software.amazon.awscdk.Duration;
   import software.amazon.awscdk.services.lambda.Code;
   import software.amazon.awscdk.services.lambda.Function;
   import software.amazon.awscdk.services.lambda.Runtime;
   import software.amazon.awscdk.services.stepfunctions.StateMachine;
   import software.amazon.awscdk.services.stepfunctions.Succeed;
   import software.amazon.awscdk.services.stepfunctions.tasks.LambdaInvoke;
   
   public class StepStack extends Stack {
       public StepStack(final Construct scope, final String id) {
           this(scope, id, null);
       }
   
       public StepStack(final Construct scope, final String id, final StackProps props) {
           super(scope, id, props);
   
           final Function helloFunction = Function.Builder.create(this, "MyLambdaFunction")
                   .code(Code.fromInline(
                           "exports.handler = (event, context, callback) => { callback(null, 'Hello World!' );}"))
                   .runtime(Runtime.NODEJS_18_X)
                   .handler("index.handler")
                   .timeout(Duration.seconds(25))
                   .build();
   
           final StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
                   .definition(LambdaInvoke.Builder.create(this, "MyLambdaTask")
                           .lambdaFunction(helloFunction)
                           .build()
                           .next(new Succeed(this, "GreetedWorld")))
                   .build();
       }
   }
   ```

------
#### [ C\$1 ]

   Atualize o `src/Step/StepStack.cs` com o código a seguir.

   ```
   using Amazon.CDK;
   using Constructs;
   using Amazon.CDK.AWS.Lambda;
   using Amazon.CDK.AWS.StepFunctions;
   using Amazon.CDK.AWS.StepFunctions.Tasks;
   
   namespace Step
   {
       public class StepStack : Stack
       {
           internal StepStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
           {
               var helloFunction = new Function(this, "MyLambdaFunction", new FunctionProps
               {
                   Code = Code.FromInline(@"exports.handler = (event, context, callback) => {
                       callback(null, 'Hello World!');
                   }"),
                   Runtime = Runtime.NODEJS_18_X,
                   Handler = "index.handler",
                   Timeout = Duration.Seconds(25)
               });
   
               var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps
               {
                   DefinitionBody = DefinitionBody.FromChainable(new LambdaInvoke(this, "MyLambdaTask", new LambdaInvokeProps
                   {
                       LambdaFunction = helloFunction
                   })
                   .Next(new Succeed(this, "GreetedWorld")))
               });
           }
       }
   }
   ```

------

1. Salve o arquivo de origem e execute o comando `cdk synth` no diretório principal da aplicação.

   O AWS CDK executa a aplicação e sintetiza um modelo do CloudFormation com base nela. O AWS CDK então exibe o modelo.
**nota**  
Se você TypeScript costumava criar seu AWS CDK projeto, a execução do `cdk synth` comando pode retornar o seguinte erro.  

   ```
   TSError: ⨯ Unable to compile TypeScript:
   bin/step.ts:7:33 - error TS2554: Expected 2 arguments, but got 3.
   ```
Modifique o arquivo `bin/step.ts` conforme mostrado no exemplo a seguir para resolver esse erro.  

   ```
   #!/usr/bin/env node
   import 'source-map-support/register';
   import * as cdk from 'aws-cdk-lib';
   import { StepStack } from '../lib/step-stack';
   
   const app = new cdk.App();
   new StepStack(app, 'StepStack');
   app.synth();
   ```

1. Para implantar a função do Lambda e a máquina de estado do Step Functions em sua conta da AWS , emita `cdk deploy`. Você deverá aprovar as políticas do IAM que foram AWS CDK geradas.

## Etapa 3: Iniciar a execução de uma máquina de estado
<a name="lambda-state-machine-cdk-step-3"></a>

Assim que você criar sua máquina de estado, poderá iniciar sua execução.

### Para iniciar a execução da máquina de estado
<a name="to-start-the-state-machine-execution"></a>

1. Abra o [console do Step Functions](https://console.aws.amazon.com/states/home) e escolha o nome da máquina de estado que você criou usando o AWS CDK.

1. Na página da máquina de estado, escolha **Iniciar execução**.

   A caixa de diálogo **Iniciar execução** é exibida.

1. (Opcional) Insira um nome de execução personalizado para substituir o padrão gerado.
**Nomes e registro em log não ASCII**  
O Step Functions aceita nomes de máquina de estado, execuções, atividades e rótulos que contenham caracteres não ASCII. Como esses caracteres impedirão que a Amazon CloudWatch registre dados, recomendamos usar somente caracteres ASCII para que você possa acompanhar as métricas do Step Functions.

1. Escolha **Start Execution**.

   A execução da máquina de estado começa e uma nova página mostrando a execução em andamento é exibida.

1. O console do Step Functions direciona você para uma página em que o título é o ID da execução. Essa página é conhecida como página de *Detalhes da execução*. Nesta página, você pode revisar os resultados da execução à medida que a execução avança ou após a conclusão.

   Para revisar os resultados da execução, escolha estados individuais na **Exibição em gráfico** e, em seguida, escolha as guias individuais no painel [Detalhes da etapa](concepts-view-execution-details.md#exec-details-intf-step-details) para visualizar os detalhes de cada estado, incluindo entrada, saída e definição, respectivamente. Para obter detalhes sobre as informações de execução que você pode visualizar na página *Detalhes da execução*, consulte [Visão geral dos detalhes da execução](concepts-view-execution-details.md#exec-details-interface-overview).

## Etapa 4: Limpeza
<a name="lambda-state-machine-cdk-step-4"></a>

Depois de testar sua máquina de estado, recomendamos remover a máquina de estado e a função do Lambda relacionada para liberar recursos na sua Conta da AWS. Execute o comando `cdk destroy` no diretório principal da aplicação para remover sua máquina de estado.

## Próximas etapas
<a name="lambda-state-machine-cdk-next-steps"></a>

Para saber mais sobre como desenvolver a AWS infraestrutura usandoAWS CDK, consulte o [Guia do AWS CDK desenvolvedor](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

Para obter informações sobre como criar aplicações do AWS CDK na sua linguagem preferencial, consulte:

------
#### [ TypeScript ]

 [Trabalhando com AWS CDK em TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) 

------
#### [ JavaScript ]

 [Trabalhando com AWS CDK em JavaScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-javascript.html) 

------
#### [ Python ]

 [Trabalhar com o AWS CDK no Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html) 

------
#### [ Java ]

 [Trabalhar com o AWS CDK no Java](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-java.html) 

------
#### [ C\$1 ]

 [Trabalhar com o AWS CDK no C\$1](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-csharp.html) 

------

Para obter mais informações sobre os módulos da AWS Construct Library usados neste tutorial, consulte as seguintes visões gerais de referência de AWS CDK API:
+  [aws-lambda](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda-readme.html) 
+  [aws-stepfunctions](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_stepfunctions-readme.html) 
+  [aws-stepfunctions-tasks](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_stepfunctions_tasks-readme.html) 

# Usando AWS CDK para criar um fluxo de trabalho Express em Step Functions
<a name="tutorial-step-functions-rest-api-integration-cdk"></a>

Neste tutorial, você aprenderá a criar uma API REST do API Gateway com uma máquina de estado expresso síncrona como integração de back-end, usando a AWS Cloud Development Kit (AWS CDK) estrutura Infrastructure as Code (IAC).

Você usará o constructo `StepFunctionsRestApi` para conectar a máquina de estado ao API Gateway. A `StepFunctionsRestApi` construção configurará um input/output mapeamento padrão e a API REST do API Gateway, com as permissões necessárias e um método HTTP “ANY”.

 Com AWS CDK uma estrutura de Infraestrutura como Código (IAC), você define a AWS infraestrutura usando uma linguagem de programação. Você define um aplicativo em uma das linguagens suportadas pelo CDK, sintetiza o código em um CloudFormation modelo e, em seguida, implanta a infraestrutura em sua conta. AWS 

 Você usará CloudFormation para definir uma API REST do API Gateway, que é integrada à Synchronous Express State Machine como back-end, e usará a Console de gerenciamento da AWS para iniciar a execução. 

Antes de iniciar este tutorial, configure seu ambiente de AWS CDK desenvolvimento conforme descrito em [Introdução aos AWS CDK - Pré-requisitos](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) e, em seguida, instale o AWS CDK emitindo:

```
npm install -g aws-cdk
```

## Etapa 1: configurar seu AWS CDK projeto
<a name="step-functions-rest-api-integration-cdk-step-1"></a>

Primeiro, crie um diretório para seu novo AWS CDK aplicativo e inicialize o projeto.

------
#### [ TypeScript ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language typescript
```

------
#### [ JavaScript ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language javascript
```

------
#### [ Python ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language python
```

Depois que o projeto for inicializado, ative o ambiente virtual do projeto e instale as dependências básicas AWS CDK do projeto.

```
source .venv/bin/activate
python -m pip install -r requirements.txt
```

------
#### [ Java ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language java
```

------
#### [ C\$1 ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language csharp
```

------
#### [ Go ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language go
```

------

**nota**  
Dê ao diretório o nome `stepfunctions-rest-api`. O modelo de aplicação do AWS CDK usa o nome do diretório para gerar nomes para arquivos e classes de origem. Se você escolher outro nome, sua aplicação não combinará com este tutorial.

Agora, instale os módulos da biblioteca de construção para o AWS Step Functions Amazon API Gateway.

------
#### [ TypeScript ]

```
npm install @aws-cdk/aws-stepfunctions @aws-cdk/aws-apigateway
```

------
#### [ JavaScript ]

```
npm install @aws-cdk/aws-stepfunctions @aws-cdk/aws-apigateway
```

------
#### [ Python ]

```
python -m pip install aws-cdk.aws-stepfunctions
python -m pip install aws-cdk.aws-apigateway
```

------
#### [ Java ]

Edite o `pom.xml` do projeto para adicionar as seguintes dependências dentro do contêiner `<dependencies>` existente.

```
        <dependency>
            <groupId>software.amazon.awscdk</groupId>
            <artifactId>stepfunctions</artifactId>
            <version>${cdk.version}</version>
        </dependency>
        <dependency>
            <groupId>software.amazon.awscdk</groupId>
            <artifactId>apigateway</artifactId>
            <version>${cdk.version}</version>
        </dependency>
```

O Maven instala automaticamente essas dependências na próxima vez que você criar a aplicação. Para criar, inicie `mvn compile` ou use o comando **Build** (Criar) do Java IDE.

------
#### [ C\$1 ]

```
dotnet add src/StepfunctionsRestApi package Amazon.CDK.AWS.Stepfunctions
dotnet add src/StepfunctionsRestApi package Amazon.CDK.AWS.APIGateway
```

Você também pode instalar os pacotes indicados usando a NuGet GUI do Visual Studio, disponível em **Tools** > **NuGet Package Manager > Manage NuGet Packages** **for Solution**.

------

Depois de instalar os módulos, você pode usá-los em seu AWS CDK aplicativo importando os pacotes a seguir.

------
#### [ TypeScript ]

```
@aws-cdk/aws-stepfunctions
@aws-cdk/aws-apigateway
```

------
#### [ JavaScript ]

```
@aws-cdk/aws-stepfunctions
@aws-cdk/aws-apigateway
```

------
#### [ Python ]

```
aws_cdk.aws_stepfunctions
aws_cdk.aws_apigateway
```

------
#### [ Java ]

```
software.amazon.awscdk.services.apigateway.StepFunctionsRestApi
software.amazon.awscdk.services.stepfunctions.Pass
software.amazon.awscdk.services.stepfunctions.StateMachine
software.amazon.awscdk.services.stepfunctions.StateMachineType
```

------
#### [ C\$1 ]

```
Amazon.CDK.AWS.StepFunctions
Amazon.CDK.AWS.APIGateway
```

------
#### [ Go ]

Adicione o seguinte a `import` dentro de `stepfunctions-rest-api.go`.

```
"github.com/aws/aws-cdk-go/awscdk/awsapigateway"
"github.com/aws/aws-cdk-go/awscdk/awsstepfunctions"
```

------

## Etapa 2: Use o AWS CDK para criar uma API REST do API Gateway com integração de back-end do Synchronous Express State Machine
<a name="step-functions-rest-api-integration-cdk-step-2"></a>

Primeiro, vamos apresentar as partes individuais do código que definem a Máquina de estado expressa síncrona e a API REST do API Gateway e depois vamos explicar como reuni-las em sua aplicação AWS CDK . Então você verá como sintetizar e implantar esses recursos.

**nota**  
A Máquina de Estado que mostraremos aqui será uma Máquina de Estado simples com um estado `Pass`.

### Para criar uma máquina de estado Express
<a name="step-functions-rest-api-integration-cdk-create-state-machine"></a>

Esse é o AWS CDK código que define uma máquina de estado simples com um `Pass` estado.

------
#### [ TypeScript ]

```
const machineDefinition = new stepfunctions.Pass(this, 'PassState', {
    result: {value:"Hello!"},
})

const stateMachine = new stepfunctions.StateMachine(this, 'MyStateMachine', {
    definition: machineDefinition,
    stateMachineType: stepfunctions.StateMachineType.EXPRESS,
});
```

------
#### [ JavaScript ]

```
const machineDefinition = new sfn.Pass(this, 'PassState', {
    result: {value:"Hello!"},
})

const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
    definition: machineDefinition,
    stateMachineType: stepfunctions.StateMachineType.EXPRESS,
});
```

------
#### [ Python ]

```
machine_definition = sfn.Pass(self,"PassState", 
                        result = sfn.Result("Hello"))
    
state_machine = sfn.StateMachine(self, 'MyStateMachine', 
        definition = machine_definition, 
        state_machine_type = sfn.StateMachineType.EXPRESS)
```

------
#### [ Java ]

```
Pass machineDefinition = Pass.Builder.create(this, "PassState")
                        .result(Result.fromString("Hello"))
                        .build();

StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
                            .definition(machineDefinition)
                            .stateMachineType(StateMachineType.EXPRESS)
                            .build();
```

------
#### [ C\$1 ]

```
var machineDefinition = new Pass(this, "PassState", new PassProps
{
    Result = Result.FromString("Hello")
});

var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps
{
    Definition = machineDefinition,
    StateMachineType = StateMachineType.EXPRESS
});
```

------
#### [ Go ]

```
var machineDefinition = awsstepfunctions.NewPass(stack, jsii.String("PassState"), &awsstepfunctions.PassProps
{
    Result: awsstepfunctions.NewResult(jsii.String("Hello")),
})

var stateMachine = awsstepfunctions.NewStateMachine(stack, jsii.String("StateMachine"), &awsstepfunctions.StateMachineProps
{    
    Definition: machineDefinition,
    StateMachineType: awsstepfunctions.StateMachineType_EXPRESS,
})
```

------

Você pode ver, neste pequeno trecho:
+ A definição da máquina chamada `PassState`, que é um estado `Pass`.
+ O nome lógico da Máquina do estado, `MyStateMachine`.
+ A definição da máquina é usada como a definição da máquina de estado.
+ O Tipo de máquina de estado é definido como `EXPRESS` porque `StepFunctionsRestApi` só permitirá uma máquina de estado do Synchronous Express.

### Para criar a API REST do API Gateway usando a estrutura `StepFunctionsRestApi`
<a name="step-functions-rest-api-integration-cdk-create-rest-api"></a>

Usaremos o build para `StepFunctionsRestApi` criar a API REST do API Gateway com as permissões necessárias e o input/output mapeamento padrão.

------
#### [ TypeScript ]

```
const api = new apigateway.StepFunctionsRestApi(this, 
  'StepFunctionsRestApi', { stateMachine: stateMachine });
```

------
#### [ JavaScript ]

```
const api = new apigateway.StepFunctionsRestApi(this, 
  'StepFunctionsRestApi', { stateMachine: stateMachine });
```

------
#### [ Python ]

```
api = apigw.StepFunctionsRestApi(self, "StepFunctionsRestApi",
                            state_machine = state_machine)
```

------
#### [ Java ]

```
StepFunctionsRestApi api = StepFunctionsRestApi.Builder.create(this, "StepFunctionsRestApi")
                           .stateMachine(stateMachine)
                           .build();
```

------
#### [ C\$1 ]

```
var api = new StepFunctionsRestApi(this, "StepFunctionsRestApi", new StepFunctionsRestApiProps
{
    StateMachine = stateMachine
});
```

------
#### [ Go ]

```
awsapigateway.NewStepFunctionsRestApi(stack, jsii.String("StepFunctionsRestApi"), &awsapigateway.StepFunctionsRestApiProps
{
    StateMachine = stateMachine,
})
```

------

### Para criar e implantar o AWS CDK aplicativo
<a name="step-functions-rest-api-integration-cdk-app"></a>

No AWS CDK projeto que você criou, edite o arquivo contendo a definição da pilha para ficar parecido com o código abaixo. Você vai reconhecer as definições da máquina de estado do Step Functions e do API Gateway apresentadas acima.

------
#### [ TypeScript ]

Atualizar ` lib/stepfunctions-rest-api-stack.ts` para ler conforme mostrado a seguir.

```
import * as cdk from 'aws-cdk-lib';
import * as stepfunctions from 'aws-cdk-lib/aws-stepfunctions' 
import * as apigateway from 'aws-cdk-lib/aws-apigateway';


export class StepfunctionsRestApiStack extends cdk.Stack {
    constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const machineDefinition = new stepfunctions.Pass(this, 'PassState', {
        result: {value:"Hello!"},
    });
    
    const stateMachine = new stepfunctions.StateMachine(this, 'MyStateMachine', {
        definition: machineDefinition,
        stateMachineType: stepfunctions.StateMachineType.EXPRESS,
    });
    
    const api = new apigateway.StepFunctionsRestApi(this, 
        'StepFunctionsRestApi', { stateMachine: stateMachine });
```

------
#### [ JavaScript ]

Atualizar `lib/stepfunctions-rest-api-stack.js` para ler conforme mostrado a seguir.

```
const cdk = require('@aws-cdk/core');
const stepfunctions = require('@aws-cdk/aws-stepfunctions');
const apigateway = require('@aws-cdk/aws-apigateway');


class StepfunctionsRestApiStack extends cdk.Stack {
    constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const machineDefinition = new stepfunctions.Pass(this, "PassState", {
        result: {value:"Hello!"},
    })
    
    const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
        definition: machineDefinition,
        stateMachineType: stepfunctions.StateMachineType.EXPRESS,
    });
    
    const api = new apigateway.StepFunctionsRestApi(this, 
        'StepFunctionsRestApi', { stateMachine: stateMachine });

    }
}

module.exports = { StepStack }
```

------
#### [ Python ]

Atualizar `stepfunctions_rest_api/stepfunctions_rest_api_stack.py` para ler conforme mostrado a seguir.

```
from aws_cdk import App, Stack
from constructs import Construct
from aws_cdk import aws_stepfunctions as sfn
from aws_cdk import aws_apigateway as apigw

class StepfunctionsRestApiStack(Stack):

    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)
        
        
        machine_definition = sfn.Pass(self,"PassState", 
                                result = sfn.Result("Hello"))

        state_machine = sfn.StateMachine(self, 'MyStateMachine', 
                definition = machine_definition, 
                state_machine_type = sfn.StateMachineType.EXPRESS)

        api = apigw.StepFunctionsRestApi(self, 
                    "StepFunctionsRestApi",
                    state_machine = state_machine)
```

------
#### [ Java ]

Atualizar `src/main/java/com.myorg/StepfunctionsRestApiStack.java` para ler conforme mostrado a seguir.

```
package com.myorg;


import software.amazon.awscdk.core.Construct;
import software.amazon.awscdk.core.Stack;
import software.amazon.awscdk.core.StackProps;
import software.amazon.awscdk.services.stepfunctions.Pass;
import software.amazon.awscdk.services.stepfunctions.StateMachine;
import software.amazon.awscdk.services.stepfunctions.StateMachineType;
import software.amazon.awscdk.services.apigateway.StepFunctionsRestApi;

public class StepfunctionsRestApiStack extends Stack {
    public StepfunctionsRestApiStack(final Construct scope, final String id) {
        this(scope, id, null);
    }

    public StepfunctionsRestApiStack(final Construct scope, final String id, final StackProps props) {
        super(scope, id, props);

        Pass machineDefinition = Pass.Builder.create(this, "PassState")
                                .result(Result.fromString("Hello"))
                                .build();
        
        StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
                                    .definition(machineDefinition)
                                    .stateMachineType(StateMachineType.EXPRESS)
                                    .build();
                                    
        StepFunctionsRestApi api = StepFunctionsRestApi.Builder.create(this, "StepFunctionsRestApi")
                                   .stateMachine(stateMachine)
                                   .build();
                                   
    }
}
```

------
#### [ C\$1 ]

Atualizar `src/StepfunctionsRestApi/StepfunctionsRestApiStack.cs` para ler conforme mostrado a seguir.

```
using Amazon.CDK;
using Amazon.CDK.AWS.StepFunctions;
using Amazon.CDK.AWS.APIGateway;

namespace StepfunctionsRestApi
{
    public class StepfunctionsRestApiStack : Stack
    {
        internal StepfunctionsRestApi(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
        {
            var machineDefinition = new Pass(this, "PassState", new PassProps
            {
                Result = Result.FromString("Hello")
            });

            var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps
            {
                Definition = machineDefinition,
                StateMachineType = StateMachineType.EXPRESS
            });
            
            var api = new StepFunctionsRestApi(this, "StepFunctionsRestApi", new StepFunctionsRestApiProps
            {
                StateMachine = stateMachine
            });

        }
    }
}
```

------
#### [ Go ]

Atualizar `stepfunctions-rest-api.go` para ler conforme mostrado a seguir.

```
package main
import (
    "github.com/aws/aws-cdk-go/awscdk"
    "github.com/aws/aws-cdk-go/awscdk/awsapigateway"
    "github.com/aws/aws-cdk-go/awscdk/awsstepfunctions"
    "github.com/aws/constructs-go/constructs/v3"
    "github.com/aws/jsii-runtime-go"
)


type StepfunctionsRestApiGoStackProps struct {
    awscdk.StackProps
}

func NewStepfunctionsRestApiGoStack(scope constructs.Construct, id string, props *StepfunctionsRestApiGoStackProps) awscdk.Stack {
    var sprops awscdk.StackProps
    if props != nil {
        sprops = props.StackProps
    }
    stack := awscdk.NewStack(scope, &id, &sprops)

    // The code that defines your stack goes here
    var machineDefinition = awsstepfunctions.NewPass(stack, jsii.String("PassState"), &awsstepfunctions.PassProps
    {
        Result: awsstepfunctions.NewResult(jsii.String("Hello")),
    })

    var stateMachine = awsstepfunctions.NewStateMachine(stack, jsii.String("StateMachine"), &awsstepfunctions.StateMachineProps{
        Definition: machineDefinition,
        StateMachineType: awsstepfunctions.StateMachineType_EXPRESS,
    });

    awsapigateway.NewStepFunctionsRestApi(stack, jsii.String("StepFunctionsRestApi"), &awsapigateway.StepFunctionsRestApiProps{
        StateMachine = stateMachine,
    })

    return stack
}

func main() {
    app := awscdk.NewApp(nil)

    NewStepfunctionsRestApiGoStack(app, "StepfunctionsRestApiGoStack", &StepfunctionsRestApiGoStackProps{
        awscdk.StackProps{
            Env: env(),
        },
    })

    app.Synth(nil)
}

// env determines the AWS environment (account+region) in which our stack is to
// be deployed. For more information see: https://docs.aws.amazon.com/cdk/latest/guide/environments.html
func env() *awscdk.Environment {
    // If unspecified, this stack will be "environment-agnostic".
    // Account/Region-dependent features and context lookups will not work, but a
    // single synthesized template can be deployed anywhere.
    //---------------------------------------------------------------------------
    return nil

    // Uncomment if you know exactly what account and region you want to deploy
    // the stack to. This is the recommendation for production stacks.
    //---------------------------------------------------------------------------
    // return &awscdk.Environment{
    //  Account: jsii.String("account-id"),
    //  Region:  jsii.String("us-east-1"),
    // }

    // Uncomment to specialize this stack for the AWS Account and Region that are
    // implied by the current CLI configuration. This is recommended for dev
    // stacks.
    //---------------------------------------------------------------------------
    // return &awscdk.Environment{
    //  Account: jsii.String(os.Getenv("CDK_DEFAULT_ACCOUNT")),
    //  Region:  jsii.String(os.Getenv("CDK_DEFAULT_REGION")),
    // }
}
```

------

Salve o arquivo de origem e emita `cdk synth` no diretório principal da aplicação. O AWS CDK executa o aplicativo e sintetiza um CloudFormation modelo a partir dele e, em seguida, exibe o modelo.

Para realmente implantar o Amazon API Gateway e a máquina de AWS Step Functions estado em sua conta da AWS, emita`cdk deploy`. Você deverá aprovar as políticas do IAM que foram AWS CDK geradas.

## Etapa 3: Testar o API Gateway
<a name="step-functions-rest-api-integration-cdk-step-3"></a>

Depois de criar sua API REST do API Gateway com a máquina de estado síncrona expressa como integração de back-end, você pode testar o API Gateway.

### Para testar o API Gateway implantado usando o console do API Gateway
<a name="to-test-the-deployed-api-gateway-using-console"></a>

1. Abra o [console do Amazon API Gateway](https://console.aws.amazon.com/apigateway/) e faça login.

1. Selecione a API REST denominada `StepFunctionsRestApi`.

1. No painel **Recursos**, selecione o método `ANY`.

1. Selecione a guia **Testar**. Talvez seja necessário selecionar o botão de seta para a direita para mostrar a guia. 

1. Em **Method (Método)**, selecione **POST**.

1. Em **Corpo da solicitação**, copie os parâmetros da solicitação a seguir.

   ```
   {
       "key": "Hello"
   }
   ```

1. Escolha **Test** (Testar). As informações a seguir serão exibidas:
   + **Request (Solicitação)** é o caminho do recurso que foi chamado para o método. 
   + **Status** é o código de status HTTP da resposta.
   + **Latency (Latência)** é o tempo entre a recepção da solicitação do autor da chamada e a resposta retornada.
   + **Corpo da resposta** é o corpo de resposta HTTP.
   + **Cabeçalhos de resposta** são os cabeçalhos de resposta HTTP.
   + O **log** mostra as entradas simuladas do Amazon CloudWatch Logs que teriam sido gravadas se esse método fosse chamado fora do console do API Gateway.
**nota**  
Embora as entradas de CloudWatch registros sejam simuladas, os resultados da chamada do método são reais.

A saída do **Corpo da resposta** deve ser mais ou menos assim:

```
"Hello"
```

**dica**  
Experimente o API Gateway com métodos diferentes e uma entrada inválida para ver a saída do erro. É recomendável alterar a máquina de estado para procurar uma chave específica e, durante o teste, fornecer a chave errada para provocar uma falha na execução da máquina de estado e gerar uma mensagem de erro na saída do **Corpo da resposta**.

### Para testar a API implantada usando cURL
<a name="to-test-the-deployed-api-gateway-using-curl"></a>

1. Abra uma janela do terminal.

1. Copie o seguinte comando cURL e cole-o na janela do terminal, substituindo `<api-id>` pelo ID de API da sua API e `<region>` pela região em que a API foi implantada. 

   ```
   curl -X POST\
    'https://<api-id>.execute-api.<region>.amazonaws.com/prod' \
    -d '{"key":"Hello"}' \
    -H 'Content-Type: application/json'
   ```

A saída do **Corpo da resposta** deve ser mais ou menos assim:

```
"Hello"
```

**dica**  
Experimente o API Gateway com métodos diferentes e uma entrada inválida para ver a saída do erro. Talvez você queira alterar a máquina de estado para procurar uma chave específica e, durante o teste, fornecer a chave errada para falhar na execução da Máquina de Estado e gerar uma mensagem de erro na saída do **Corpo de Resposta**.

## Etapa 4: Limpeza
<a name="step-functions-rest-api-integration-cdk-step-4"></a>

Ao terminar de testar seu API Gateway, você pode derrubar tanto a máquina de estado quanto o API Gateway usando o AWS CDK. Inicie `cdk destroy` no diretório principal da aplicação.

# Usar o Terraform para implantar máquinas de estado no Step Functions
<a name="terraform-sfn"></a>

[O Terraform](https://www.terraform.io/intro/) by HashiCorp é uma estrutura para criar aplicativos usando infraestrutura como código (IaC). Com o Terraform, você pode criar máquinas de estado e usar recursos, como visualizar implantações de infraestrutura e criar modelos reutilizáveis. Os modelos do Terraform ajudam você a manter e reutilizar o código dividindo-o em partes menores.

Se você estiver familiarizado com o Terraform, poderá seguir o ciclo de vida de desenvolvimento descrito neste tópico como um modelo para criar e implantar suas máquinas de estado no Terraform. Se não estiver familiarizado com o Terraform, recomendamos que primeiro conclua o workshop [Introdução ao Terraform em AWS](https://catalog.workshops.aws/terraform101/en-US) para se familiarizar com o Terraform.

**dica**  
Para implantar um exemplo de uma máquina de estado criada usando o Terraform, consulte [Implantar com o Terraform](https://catalog.workshops.aws/stepfunctions/iac/deploy-with-terraform) no *The AWS Step Functions * Workshop.

**Topics**
+ [Pré-requisitos](#terraform-sfn-prerequisites)
+ [Ciclo de vida de desenvolvimento com o Terraform](#terraform-sfn-dev-lifecycle)
+ [Perfis e políticas do IAM para sua máquina de estado](#terraform-sfn-iam-policy)

## Pré-requisitos
<a name="terraform-sfn-prerequisites"></a>

Antes de começar, conclua os seguintes pré-requisitos:
+ Instale o Terraform na máquina. Para obter informações sobre a instalação do Terraform, consulte [Instalar o Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ Instale o Step Functions Local em sua máquina. Recomendamos que você instale a imagem do Docker do Step Functions Local para poder usar o Step Functions Local. Para obter mais informações, consulte [Testar máquinas de estado com Step Functions Local (sem suporte)](sfn-local.md).
+ Instale a AWS SAM CLI. Para obter informações sobre a instalação, consulte [Instalação da AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) no Guia do *AWS Serverless Application Model desenvolvedor*.
+ Instale o AWS Toolkit for Visual Studio Code para visualizar o diagrama do fluxo de trabalho de suas máquinas de estado. Para informações sobre instalação, consulte [Instalação do AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-toolkit.html) no *Guia do usuário da AWS Toolkit for Visual Studio Code *.

## Ciclo de vida de desenvolvimento de máquinas de estado com o Terraform
<a name="terraform-sfn-dev-lifecycle"></a>

O procedimento a seguir explica como você pode usar um protótipo de máquina de estado criado usando o [Workflow Studio](workflow-studio.md) no console Step Functions como ponto de partida para o desenvolvimento local com o Terraform e o [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/welcome.html).

Para ver o exemplo completo que discute o desenvolvimento da máquina de estado com o Terraform e apresenta as melhores práticas em detalhes, consulte [Melhores práticas para criar projetos Terraform do Step Functions](https://aws.amazon.com/blogs/devops/best-practices-for-writing-step-functions-terraform-projects/).

**Para iniciar o ciclo de vida de desenvolvimento de uma máquina de estado com o Terraform**

1. Faça bootstrap de um novo projeto do Terraform com o seguinte comando.

   ```
   terraform init
   ```

1. Abra o [console Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) para criar um protótipo para sua máquina de estado.

1. No Workflow Studio, faça o seguinte:

   1. Crie seu protótipo de fluxo de trabalho.

   1. Exporte a definição [Amazon States Language (ASL)](concepts-amazon-states-language.md) de seu fluxo de trabalho. Para fazer isso, escolha a lista suspensa **Importar/Exportar** e selecione **Exportar definição JSON**.

1. Salve a definição de ASL exportada no diretório do seu projeto.

   Você passa a definição de ASL exportada como um parâmetro de entrada para o recurso do [https://registry.terraform.io/modules/terraform-aws-modules/step-functions/aws/latest](https://registry.terraform.io/modules/terraform-aws-modules/step-functions/aws/latest) Terraform que usa a função [https://developer.hashicorp.com/terraform/language/functions/templatefile](https://developer.hashicorp.com/terraform/language/functions/templatefile). Essa função é usada dentro do campo de definição que passa a definição de ASL exportada e quaisquer substituições de variáveis.
**dica**  
Como o arquivo de definição ASL pode conter blocos de texto longos, recomendamos que você evite o método EOF em linha. Isso facilita a substituição de parâmetros na definição da máquina de estado.

1. (Opcional) Atualize a definição de ASL em seu IDE e visualize suas alterações usando o AWS Toolkit for Visual Studio Code.  
![\[Captura de tela da definição ASL de um fluxo de trabalho no Visual Studio Code e sua representação visual.\]](http://docs.aws.amazon.com/pt_br/step-functions/latest/dg/images/visualize-sm-terraform-iac.png)

   Para evitar exportar continuamente sua definição e refatorá-la em seu projeto, recomendamos que você faça atualizações localmente em seu IDE e acompanhe essas atualizações com o [Git](https://git-scm.com/). 

1. Teste seu fluxo de trabalho usando o [Step Functions Local](sfn-local.md).
**dica**  
Você também pode testar localmente integrações de serviços com funções Lambda e API APIs Gateway em sua máquina de estado usando a [AWS SAM CLI](sfn-local-lambda.md) Local.

1. Visualize sua máquina de estado e outros AWS recursos antes de implantá-la. Para fazer isso, execute o comando a seguir.

   ```
   terraform plan
   ```

1. Implante sua máquina de estado a partir do seu ambiente local ou por meio de [pipelines de CI/CD](https://aws.amazon.com/blogs/developer/build-infrastructure-ci-for-terraform-code-leveraging-aws-developer-tools-and-terratest/) usando o comando a seguir.

   ```
   terraform apply
   ```

1. (Opcional) Limpe seus recursos e exclua a máquina de estado usando o comando a seguir.

   ```
   terraform destroy
   ```

## Perfis e políticas do IAM para sua máquina de estado
<a name="terraform-sfn-iam-policy"></a>

Use as [políticas de integração de serviços do Terraform](https://registry.terraform.io/modules/terraform-aws-modules/step-functions/aws/latest#service-integration-policies) para adicionar as permissões necessárias do IAM à sua máquina de estado, por exemplo, permissão para invocar funções do Lambda. Você também pode definir perfis e políticas explícitas e associá-las à sua máquina de estado.

O exemplo de política do IAM a seguir concede à sua máquina de estado acesso para invocar uma função do Lambda chamada `myFunction`.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "lambda:InvokeFunction"
      ],
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:myFunction"
    }
  ]
}
```

Também recomendamos usar a fonte de dados [https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) ao definir políticas do IAM para suas máquinas de estado no Terraform. Isso ajuda a verificar se sua política está malformada e a substituir quaisquer recursos por variáveis.

O exemplo de política do IAM a seguir usa a fonte de dados `aws_iam_policy_document` e concede à sua máquina de estado acesso para invocar uma função do Lambda chamada `myFunction`.

```
data "aws_iam_policy_document" "state_machine_role_policy" {
  
  statement {
    effect = "Allow"

    actions = [
      "lambda:InvokeFunction"
    ]

    resources = ["${aws_lambda_function.function-1.arn}:*"]
  }
  
}
```

**dica**  
Para ver padrões AWS arquitetônicos mais avançados implantados com o Terraform, consulte [exemplos do Terraform na Serverless](https://serverlessland.com/workflows?framework=Terraform) Land Workflows Collection.

# Exportar seu fluxo de trabalho para modelos de IaC
<a name="exporting-iac-templates"></a>

O console do AWS Step Functions oferece a capacidade de exportar e baixar fluxos de trabalho salvos como modelos do AWS CloudFormation ou AWS SAM (SAM). Para Regiões da AWS compatíveis com o AWS Infrastructure Composer, ele também fornece a capacidade de exportar seus fluxos de trabalho para o Infrastructure Composer e navegar até o console do Infrastructure Composer, onde você pode continuar trabalhando com o modelo recém-gerado.

## Opções de configuração de modelo
<a name="exporting-iac-templates-config-options"></a>

As opções a seguir estão disponíveis neste recurso. Se você optar por exportar e baixar um arquivo de modelo de IaC, o console exibirá as opções que se aplicam à sua máquina de estado salva para seleção. Se você estiver exportando para o Infrastructure Composer, o console do Step Functions implementa automaticamente as configurações que se aplicam à sua máquina de estado.
+  **Incluir o perfil do IAM criado pelo console em seu nome**: essa opção exporta as políticas do perfil de execução. Ele constrói um perfil do IAM no modelo e o anexa ao recurso da máquina de estado. Essa opção só é aplicável se a máquina de estado tiver um perfil de execução criado pelo console.
+  **Incluir o Grupo de logs do CloudWatch**: desenvolve um grupo de logs do CloudWatch no modelo e o anexa ao recurso da máquina de estado. Essa opção só é aplicável se a máquina de estado tiver um grupo de logs do CloudWatch anexado a ela e o [nível do log](cw-logs.md#cloudwatch-log-level) *não* estiver definido como `OFF`. 
+  **Substituir referências de recursos por DefinitionSubstitutions**: essa opção gera [DefinitionSubstitutions](concepts-sam-sfn.md#sam-definition-substitution-eg) para os seguintes componentes: 
  + Campos de [mapa distribuído](state-map-distributed.md) do S3.
  + `Activity`Recursos da . A exportação inclui recursos de `Activity` no modelo CloudFormation para qualquer tarefa `Run Activity`. A exportação também fornece referência de `DefinitionSubstitutions` aos recursos de `Activity` criados.
  + Qualquer `ARN` ou `S3URI` no campo Carga útil para todas as integrações de serviços.
  + Além dos campos `ARN` e `S3URI`, a exportação gera `DefinitionSubstitutions` para outros campos de carga útil de integração de serviços usados com frequência. As integrações de serviços específicas são as seguintes: 
    + `athena:startQueryExecution`
    + `batch:submitJob`
    +  `dynamodb:getItem`, `dynamodb:updateItem`, `dynamodb:updateItem`, `dynamodb:deleteItem` 
    + `ecs:runTask`
    + `glue:startJobRun`
    + `http:invoke`
    + `lambda:invoke`
    + `sns:publish`
    + `sqs:sendMessage`
    + `states:startExecution`

## Exportar e baixar o modelo de IaC do fluxo de trabalho
<a name="exporting-iac-templates-files-procedure"></a>

**Como exportar seu fluxo de trabalho para um arquivo de modelo de IaC**

1. Abra o [console do Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) e selecione a máquina de estado com a qual você deseja trabalhar. Verifique se as alterações na máquina de estado foram salvas antes de prosseguir para a próxima etapa.

1. Selecione **Exportar para o modelo do CloudFormation ou SAM** no menu **Ações**.

1. Selecione **Tipo** como **SAM** ou **CloudFormation** na caixa de diálogo exibida.
   + Se você selecionou o modelo **CloudFormation**, selecione o formato de arquivo **JSON** ou **YAML**.
   + Se você selecionou o modelo **SAM**, nenhuma opção de formato será apresentada. O modelo SAM usa como padrão o formato de arquivo YAML.

1. Expanda **Configurações adicionais**. Por padrão, todas as opções são selecionadas. Revise e atualize a seleção de opções para seu modelo de IaC. As opções são descritas em detalhes na seção anterior, intitulada [Opções de configuração de modelo](#exporting-iac-templates-config-options). 

   Se uma opção não se aplicar ao seu fluxo de trabalho específico, ela não será exibida na caixa de diálogo.

1. Selecione **Fazer download** para exportar e baixar seu arquivo de modelo de IaC gerado.

## Exportar o fluxo de trabalho diretamente para o AWS Infrastructure Composer
<a name="exporting-iac-templates-infra-composer-procedure"></a>

**Como exportar seu fluxo de trabalho para o Infrastructure Composer**

1. Abra o [console do Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) e selecione a máquina de estado com a qual você deseja trabalhar. Verifique se as alterações na máquina de estado foram salvas antes de prosseguir para a próxima etapa.

1. Selecione **Exportar para o Infrastructure Composer** no menu **Ações**.

1. A caixa de diálogo **Exportar para o Infrastructure Composer** é exibida. Você pode usar o nome padrão exibido no campo **Nome do bucket de transferência** ou inserir um novo nome. Os nomes de buckets do Amazon S3 devem ser exclusivos no mundo todo e seguir as [regras de nomenclatura de buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).

1. Selecione a opção **Confirmar e criar projeto** para exportar seu fluxo de trabalho para o Infrastructure Composer.

1. Para salvar o projeto e a definição de fluxo de trabalho no Infrastructure Composer, ative o [modo de sincronização local](https://docs.aws.amazon.com/application-composer/latest/dg/reference-features-local-sync.html).

**nota**  
Se você já usou o recurso **Exportar para o Infrastructure Composer** antes e criou um bucket do Amazon S3 usando o nome padrão, o Step Functions pode reutilizar esse bucket, caso ele ainda exista. Aceite o nome padrão do bucket na caixa de diálogo para reutilizar o bucket existente.

### Configuração de transferência do bucket do Amazon S3
<a name="export-appcomposer-bucket-info"></a>

O bucket do Amazon S3 que o Step Functions cria para transferir o fluxo de trabalho automaticamente criptografa os objetos usando o padrão de criptografia AES 256. O Step Functions também configura o bucket para usar a [condição de proprietário do bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-owner-condition.html) a fim de garantir que somente sua Conta da AWS possa adicionar objetos ao bucket.

O nome padrão do bucket usa o prefixo `states-templates`, uma sequência alfanumérica de dez dígitos, e a Região da AWS em que você criou o fluxo de trabalho em `states-templates-amzn-s3-demo-bucket-us-east-1`. Para evitar que cobranças adicionais sejam incluídas na sua Conta da AWS, recomendamos que você exclua o bucket do Amazon S3 assim que terminar de exportar o fluxo de trabalho para o Infrastructure Composer.

Os [preços padrão do Amazon S3](https://aws.amazon.com/s3/pricing/) se aplicam.

### Permissões obrigatórias
<a name="export-appcomposer-permissions"></a>

Para usar esse recurso de exportação do Step Functions com o Infrastructure Composer, é preciso ter certas permissões para baixar um modelo do AWS SAM e gravar suas configurações de modelo no Amazon S3.

Para baixar um modelo do AWS SAM, você deve ter permissão para usar as seguintes ações de API:
+ [iam:GetPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicy.html)
+ [iam:GetPolicyVersion](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicyVersion.html)
+ [iam:GetRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html)
+ [iam:GetRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRolePolicy.html)
+ [iam:ListAttachedRolePolicies](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedRolePolicies.html)
+ [iam:ListRolePolicies](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRolePolicies.html)
+ [iam:ListRoles](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html)

Para o Step Functions gravar a configuração da sua função no Amazon S3, você precisa ter permissão para usar as seguintes ações de API:
+ [S3:PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [S3:CreateBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html)
+ [S3:PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)

Caso não possa exportar a configuração da função para o Infrastructure Composer, verifique se a conta tem as permissões necessárias para essas operações. 