Para criar uma máquina de estado, você usa o console do AWS Step Functions. O Step Functions é um serviço web que permite coordenar componentes de aplicações distribuídas e microsserviços usando fluxos de trabalho visuais. As funções do Lambda são invocadas quando a máquina de estado é executada e atinge o estado de tarefa.
Para este projeto, a máquina de estado executa as seguintes tarefas:
- Cria um construtor de imagens do AppStream 2.0.
- Obtém o status da frota e do construtor de imagens do AppStream 2.0.
- Envia um URL de streaming.
- Obtém o nome da imagem do AppStream 2.0.
- Cria uma frota e pilha do AppStream e associa a frota a uma pilha.
- Interrompe a frota e o construtor de imagens do AppStream 2.0.
Para criar a máquina de estado, execute as seguintes etapas:
- Abra o console do AWS Step Functions em https://console.aws.amazon.com/states/.
- Execute uma das seguintes ações:
- Caso não tenha criado funções de máquinas de estado, aparecerá uma página Getting Started (Conceitos básicos). Escolha Getting Started (Conceitos básicos) e State Machines (Máquinas de estado).
- Caso já tenha criado uma função Máquinas de estado, no canto superior direito da página State machines (Máquinas de estado), selecione Create state machine (Criar máquina de estado).
- Na página Define State Machine (Definir máquina de estado), mantenha Author from code snippet (Autor de trecho de código) selecionado.
- Na seção Type (Tipo), mantenha Standard (Padrão) selecionado.
- Na seção State machine definition (Definição de máquina de estado), exclua o código de espaço reservado e cole o código a seguir na janela de edição.
{
"StartAt": "Create Image Builder",
"States": {
"Create Image Builder": {
"Type": "Task",
"Resource":
"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_createimagebuilder",
"ResultPath": "$.type",
"Next": "Resource Created?"
},
"Resource Created?": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.type",
"NumericEquals": -1,
"Next": "Creation Failed"
},
{
"Variable": "$.type",
"NumericEquals": 1,
"Next": "Sleep"
},
{
"Variable": "$.type",
"NumericEquals": 2,
"Next": "Sleep"
}
],
"Default": "Sleep"
},
"Sleep": {
"Type": "Wait",
"Seconds": 300,
"Next": "Get Status"
},
"Get Status": {
"Type": "Task",
"Resource":
"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_getstatus",
"Next": "Instance Status",
"ResultPath": "$.status"
},
"Instance Status": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.status",
"NumericEquals": -1,
"Next": "Creation Failed"
},
{
"Variable": "$.status",
"NumericEquals": 1,
"Next": "Send StreamingURL"
}
],
"Default": "Sleep"
},
"Send StreamingURL": {
"Type": "Task",
"Resource":
"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_sendstreamingurl",
"Next": "Split",
"ResultPath": "$.status"
},
"Split": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.type",
"NumericEquals": 1,
"Next": "Wait For Snapshot"
},
{
"Variable": "$.type",
"NumericEquals": 2,
"Next": "1 Hour Timer"
}
],
"Default": "1 Hour Timer"
},
"Wait For Snapshot": {
"Type": "Wait",
"Seconds": 1500,
"Next": "IB Status"
},
"IB Status": {
"Type": "Task",
"Resource":"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_getstatus",
"ResultPath": "$.status",
"Next": "Snapshotting?"
},
"Snapshotting?": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.status",
"NumericEquals": 2,
"Next": "Get ImageName"
},
{
"Variable": "$.status",
"NumericEquals": 3,
"Next": "Get ImageName"
}
],
"Default": "Wait For Snapshot"
},
"Get ImageName": {
"Type": "Task",
"Resource":"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_getimagename",
"ResultPath": "$.imagename",
"Next": "Wait For ImageReady"
},
"Wait For ImageReady": {
"Type": "Wait",
"Seconds": 300,
"Next": "Image Status"
},
"Image Status": {
"Type": "Task",
"Resource":"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_getstatus",
"ResultPath": "$.status",
"Next": "ImageReady?"
},
"ImageReady?": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.status",
"NumericEquals": 3,
"Next": "Create Fleet"
}
],
"Default": "Wait For ImageReady"
},
"Create Fleet": {
"Type": "Task",
"Resource":"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_createfleet",
"ResultPath": "$.type",
"Next": "Resource Created?"
},
"1 Hour Timer": {
"Type": "Wait",
"Seconds": 3600,
"Next": "StopResources"
},
"Creation Failed": {
"Type": "Fail",
"Cause": "Process Failed",
"Error": "Process Failed"
},
"StopResources": {
"Type": "Task",
"Resource":
"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_stopresources",
"End": true
}
}
}
6. Substitua o seguinte por seus próprios valores:
• Substitua <AWS-ACCOUNT-ID> pelo número da sua conta da AWS.
• Substitua <REGION-CODE> pela Região da AWS que você escolher. O valor deve estar todo em letras minúsculas.
7. Selecione
Next (Próximo).
8. Em
Name (Nome), digite
examplecorp_eao.
9. Na seção
Permissions (Permissões), selecione
Choose an existing role (Escolher uma função existente).
10. Na lista suspensa
Existing roles (Funções existentes), selecione
examplecorp_eao_role, a função do IAM que você criou no Módulo 2.
11. Escolha
Create state machine (Criar máquina de estado).
12. Na parte superior da página, na seção
Details (Detalhes), o
ARN da máquina de estado aparece. Anote esse ARN. Esse ARN será necessário depois no projeto e está formatado como arn:aws:states:<REGION-CODE>:<AWS_ACCOUNT-ID>:stateMachine:<STATE-MACHINE-NAME>