

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á.

# Tutorial: Testando fluxos de trabalho usando Step Functions e AWS SAM CLI Local
<a name="sfn-local-lambda"></a>

**O Step Functions Local não é compatível**  
O Step Functions Local **não** fornece paridade de recursos e não é **compatível**.  
Considere usar soluções de terceiros que emulam o Step Functions para fins de teste.  
Como alternativa ao Step Functions Local, você pode usar a TestState API para testar a unidade da lógica da máquina de estado antes de implantá-la em sua AWS conta. Para obter mais informações, consulte [Teste de máquinas de estado com TestState API](https://docs.aws.amazon.com/step-functions/latest/dg/test-state-isolation.html).

Com ambos AWS Step Functions e em AWS Lambda execução em sua máquina local, você pode testar sua máquina de estado e as funções do Lambda sem implantar seu código em. AWS

Para saber mais, consulte os seguintes tópicos:
+ [Testar máquinas de estado com Step Functions Local (sem suporte)](sfn-local.md)
+ [Configurar AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-quick-start.html)

## Etapa 1: Configurar AWS SAM
<a name="install-sam"></a>

AWS Serverless Application Model (AWS SAM) O CLI Local requer que o AWS Command Line Interface AWS SAM, e o Docker sejam instalados. 

1. [Instale a AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html).
**nota**  
Antes de instalar a AWS SAM CLI, você precisa instalar o AWS CLI e o Docker. Consulte os [pré-requisitos](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html) para instalar a CLI. AWS SAM 

1. Consulte a documentação do [Início rápido do AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-quick-start.html). Siga as etapas para fazer o seguinte:

   1. [Inicializar o aplicativo](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-quick-start.html#gs-ex1-setup-local-app)

   1.  [Testar o aplicativo localmente](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-quick-start.html#gs-ex1-test-locally) 

   

   Isso cria um diretório `sam-app` e cria um ambiente que inclui uma função Olá, mundo do Lambda baseada em Python.

   

## Etapa 2: Testar a AWS SAM CLI local
<a name="test-local-lambda"></a>

Agora que você instalou AWS SAM e criou a função Hello World Lambda, você pode testar a função. No diretório `sam-app`, insira o comando a seguir.

```
sam local start-api
```

Isso executa uma instância local da sua função do Lambda. Você deve ver uma saída semelhante a:

```
2019-01-31 16:40:27 Found credentials in shared credentials file: ~/.aws/credentials
2019-01-31 16:40:27 Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
2019-01-31 16:40:27 You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template
2019-01-31 16:40:27  * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
```

Abra um navegador e insira o seguinte:

```
http://127.0.0.1:3000/hello
```

Isso vai gerar uma resposta semelhante ao seguinte:

```
{"message": "hello world", "location": "72.21.198.66"}
```

Insira **CTRL\+C** para finalizar a API do Lambda.

## Etapa 3: Iniciar a AWS SAM CLI local
<a name="start-local-lambda"></a>

Agora que você testou se a função funciona, inicie o AWS SAM CLI Local. No diretório `sam-app`, insira o comando a seguir.

```
sam local start-lambda
```

Isso inicia o AWS SAM CLI Local e fornece o endpoint a ser usado, semelhante à saída a seguir:

```
2019-01-29 15:33:32 Found credentials in shared credentials file: ~/.aws/credentials
2019-01-29 15:33:32 Starting the Local Lambda Service. You can now invoke your Lambda Functions defined in your template through the endpoint.
2019-01-29 15:33:32  * Running on http://127.0.0.1:3001/ (Press CTRL+C to quit)
```

## Etapa 4: Iniciar o Step Functions Local
<a name="start-stepfunctions-local"></a>

### Arquivo JAR
<a name="start-local-jar"></a>

Se estiver usando a versão `.jar` do arquivo do Step Functions Local, inicie o Step Functions e especifique o endpoint do Lambda. No diretório onde você extraiu os arquivos `.jar`, insira o seguinte comando:

```
java -jar StepFunctionsLocal.jar --lambda-endpoint http://localhost:3001
```

Quando o Step Functions Local for iniciado, ele verificará o ambiente e as credenciais configuradas no seu arquivo `~/.aws/credentials`. Por padrão, ele é iniciado usando um ID de usuário fictício e é listado como `region us-east-1`.

```
2019-01-29 15:38:06.324: Failed to load credentials from environment because Unable to load AWS credentials from environment variables (AWS_ACCESS_KEY_ID (or AWS_ACCESS_KEY) and AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY))
2019-01-29 15:38:06.326: Loaded credentials from profile: default
2019-01-29 15:38:06.326: Starting server on port 8083 with account {{account-id}}, region us-east-1
```

### Docker
<a name="start-local-docker"></a>

Se estiver usando a versão do Docker do Step Functions Local, execute-o com o comando a seguir.

```
docker run -p 8083:8083 amazon/aws-stepfunctions-local
```

Para obter informações sobre a instalação da versão do Docker do Step Functions, consulte [Configurar o Step Functions Local (versão para download) no Docker](sfn-local.md#sfn-local-docker).

**nota**  
Você poderá especificar o endpoint por meio da linha de comando ou definindo variáveis do ambiente se executar o Step Functions a partir do arquivo `.jar`. Para a versão do Docker, você deve especificar os endpoints e as credenciais em um arquivo de texto. Consulte [Definindo opções de configuração para Step Functions Local](sfn-local.md#sfn-local-config-options).

## Etapa 5: Crie uma máquina de estado que faça referência à sua função AWS SAM local da CLI
<a name="create-local-statemachine"></a>

Depois que o Step Functions Local estiver em execução, crie uma máquina de estado que faça referência à `HelloWorldFunction` inicializada em [Etapa 1: Configurar AWS SAM](#install-sam).

```
aws stepfunctions --endpoint http://localhost:8083 create-state-machine --definition "{\
  \"Comment\": \"A Hello World example of the Amazon States Language using an AWS Lambda Local function\",\
  \"StartAt\": \"HelloWorld\",\
  \"States\": {\
    \"HelloWorld\": {\
      \"Type\": \"Task\",\
      \"Resource\": \"arn:aws:lambda:{{region}}:{{account-id}}:function:HelloWorldFunction\",\
      \"End\": true\
    }\
  }\
}\" --name "HelloWorld" --role-arn "arn:aws:iam::012345678901:role/DummyRole"
```

Isso criará uma máquina de estado e fornecerá um nome do recurso da Amazon (ARN) que pode ser usado para iniciar uma execução.

```
{
    "creationDate": 1548805711.403, 
    "stateMachineArn": "arn:aws:states:{{region}}:{{account-id}}:stateMachine:HelloWorld"
}
```

## Etapa 6: Iniciar uma execução da máquina de estado local
<a name="run-local-statemachine"></a>

Depois de criar uma máquina de estado, inicie uma execução. Você precisará referenciar o ARN do endpoint e da máquina de estado ao usar o seguinte comando **aws stepfunctions**:

```
aws stepfunctions --endpoint http://localhost:8083 start-execution --state-machine arn:aws:states:{{region}}:{{account-id}}:stateMachine:HelloWorld --name test
```

Isso inicia uma execução chamada `test` em sua máquina de estado `HelloWorld`.

```
{
    "startDate": 1548810641.52, 
    "executionArn": "arn:aws:states:{{region}}:{{account-id}}:execution:HelloWorld:test"
}
```

Agora que o Step Functions está sendo executado localmente, você pode interagir com ele usando AWS CLI o. Por exemplo, para obter informações sobre essa execução, use o seguinte comando:

```
aws stepfunctions --endpoint http://localhost:8083 describe-execution --execution-arn arn:aws:states:{{region}}:{{account-id}}:execution:HelloWorld:test
```

Chamar `describe-execution` para uma execução fornece detalhes mais completos, semelhante ao resultado abaixo:

```
{
    "status": "SUCCEEDED", 
    "startDate": 1549056334.073, 
    "name": "test", 
    "executionArn": "arn:aws:states:{{region}}:{{account-id}}:execution:HelloWorld:test", 
    "stateMachineArn": "arn:aws:states:{{region}}:{{account-id}}:stateMachine:HelloWorld", 
    "stopDate": 1549056351.276, 
    "output": "{\"statusCode\": 200, \"body\": \"{\\\"message\\\": \\\"hello world\\\", \\\"location\\\": \\\"72.21.198.64\\\"}\"}", 
    "input": "{}"
}
```