Essayez Amazon Simple Workflow Service (SWF) avec Python et boto3

Source à essayer

https://github.com/rysk92/aws-swf-boto3/

essayer

cp config.json.sample config.json

Écrivez le nom de chaque élément swf dans. AWS_PROFILE décrit celui qui a accès à SWF.

{
  "swf": {
    "DOMAIN": "test-domain",
    "WORKFLOW": "test-workflow",
    "TASKNAME": "test-taskname",
    "VERSION": "0.1",
    "TASKLIST": "test-tasklist"
  },
  "aws": {
    "profile": "AWS_PROFILE"
  }
}

Créer un domaine / un type de flux de travail / un type d'activité

Créer

python testcreate.py

Confirmation de domaine

aws swf describe-domain --name test-domain --profile AWS_PROFILE
{
    "domainInfo": {
        "status": "REGISTERED", 
        "name": "test-domain", 
        "description": "Test SWF domain"
    }, 
    "configuration": {
        "workflowExecutionRetentionPeriodInDays": "10"
    }
}

Confirmation du type de workflow

List

aws swf list-workflow-types --domain "test-domain" --registration-status REGISTERED --profile=AWS_PROFILE
{
    "typeInfos": [
        {
            "status": "REGISTERED", 
            "creationDate": 1472616047.186, 
            "workflowType": {
                "version": "0.1", 
                "name": "test-workflow"
            }, 
            "description": "Test workflow"
        }
    ]
}

Describe

aws swf describe-workflow-type --domain "test-domain" --workflow-type "name=test-workflow,version=0.1" --profile=AWS_PROFILE
{
    "configuration": {
        "defaultTaskStartToCloseTimeout": "NONE", 
        "defaultExecutionStartToCloseTimeout": "250", 
        "defaultTaskList": {
            "name": "test-tasklist"
        }, 
        "defaultChildPolicy": "TERMINATE"
    }, 
    "typeInfo": {
        "status": "REGISTERED", 
        "creationDate": 1472616047.186, 
        "workflowType": {
            "version": "0.1", 
            "name": "test-workflow"
        }, 
        "description": "Test workflow"
    }
}

Confirmation du type d'activité

List

aws swf list-activity-types --domain test-domain --registration-status REGISTERED --profile AWS_PROFILE  
{
    "typeInfos": [
        {
            "status": "REGISTERED", 
            "creationDate": 1472616047.336, 
            "activityType": {
                "version": "0.1", 
                "name": "test-taskname"
            }, 
            "description": "Test worker"
        }
    ]
}

Describe

aws swf describe-activity-type --domain "test-domain" --activity-type "name=test-taskname,version=0.1" --profile=AWS_PROFILE

{
    "configuration": {
        "defaultTaskStartToCloseTimeout": "NONE", 
        "defaultTaskList": {
            "name": "test-tasklist"
        }
    }, 
    "typeInfo": {
        "status": "REGISTERED", 
        "creationDate": 1472616047.336, 
        "activityType": {
            "version": "0.1", 
            "name": "test-taskname"
        }, 
        "description": "Test worker"
    }
}

Décider de départ

python testdecider.py
Listening for Decision Tasks
Poll timed out, no new task.  Repoll

Démarrer un travailleur

python testworker.py   
Listening for Worker Tasks
Poll timed out, no new task.  Repoll

Créer un WorkFlow

Créez un workflow en spécifiant le domaine, le workflowId, le nom et la version du workflowType et le nom de la liste des tâches.

Créer

python testrequest.py 
Workflow requested:  {u'runId': u'abcdefghijklmnopqrstuvwxyz1234567890abcdefghij', 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': 'xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx', 'HTTPHeaders': {'x-amzn-requestid': 'xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx', 'content-length': '58', 'content-type': 'application/x-amz-json-1.0'}}}

Vérification

aws swf list-open-workflow-executions --domain "test-domain" --start-time-filter "oldestDate=1475593200,latestDate=1475679600" --profile=AWS_PROFILE
{
    "executionInfos": [
        {
            "startTimestamp": 1475654057.8, 
            "execution": {
                "workflowId": "test-1001", 
                "runId": "u'abcdefghijklmnopqrstuvwxyz1234567890abcdefghij"
            }, 
            "executionStatus": "OPEN", 
            "cancelRequested": false, 
            "workflowType": {
                "version": "0.1", 
                "name": "test-workflow"
            }
        }
    ]
}

Vérifiez la réaction de Decider

python testdecider.py
Listening for Decision Tasks
Poll timed out, no new task.  Repoll
Dispatching task to worker {u'workflowId': u'test-1001', u'runId': u'u'abcdefghijklmnopqrstuvwxyz1234567890abcdefghij'} {u'version': u'0.1', u'name': u'test-workflow'}
Task Dispatched: 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Task Completed!
Poll timed out, no new task.  Repoll

Vérifiez la réaction du travailleur

python testworker.py   
Listening for Worker Tasks
Poll timed out, no new task.  Repoll
New task arrived
Task Done

Afficher l'historique de l'exécution du workflow

aws swf get-workflow-execution-history --domain "test-domain" --execution "workflowId=test-1001,runId=abcdefghijklmnopqrstuvwxyz1234567890abcdefghij" --profile=AWS_PROFILE
{
    "events": [
        {
            "eventId": 1, 
            "eventType": "WorkflowExecutionStarted", 
            "workflowExecutionStartedEventAttributes": {
                "taskList": {
                    "name": "test-tasklist"
                }, 
                "parentInitiatedEventId": 0, 
                "taskStartToCloseTimeout": "NONE", 
                "childPolicy": "TERMINATE", 
                "executionStartToCloseTimeout": "250", 
                "input": "", 
                "workflowType": {
                    "version": "0.1", 
                    "name": "test-workflow"
                }
            }, 
            "eventTimestamp": 1475654722.825
        }, 
        {
            "eventId": 2, 
            "eventType": "DecisionTaskScheduled", 
            "decisionTaskScheduledEventAttributes": {
                "startToCloseTimeout": "NONE", 
                "taskList": {
                    "name": "test-tasklist"
                }
            }, 
            "eventTimestamp": 1475654722.825
        }, 
        {
            "eventId": 3, 
            "eventType": "DecisionTaskStarted", 
            "eventTimestamp": 1475654722.903, 
            "decisionTaskStartedEventAttributes": {
                "scheduledEventId": 2, 
                "identity": "decider-1"
            }
        }, 
        {
            "eventId": 4, 
            "eventType": "DecisionTaskCompleted", 
            "decisionTaskCompletedEventAttributes": {
                "startedEventId": 3, 
                "scheduledEventId": 2
            }, 
            "eventTimestamp": 1475654723.059
        }, 
        {
            "eventId": 5, 
            "eventType": "ActivityTaskScheduled", 
            "activityTaskScheduledEventAttributes": {
                "taskList": {
                    "name": "test-tasklist"
                }, 
                "scheduleToCloseTimeout": "NONE", 
                "activityType": {
                    "version": "0.1", 
                    "name": "test-taskname"
                }, 
                "decisionTaskCompletedEventId": 4, 
                "heartbeatTimeout": "NONE", 
                "activityId": "activityid-yyyyyyy-yyyyyyy-yyyyyyy-yyyyyyy-yyyyyyy", 
                "scheduleToStartTimeout": "NONE", 
                "startToCloseTimeout": "NONE", 
                "input": ""
            }, 
            "eventTimestamp": 1475654723.059
        }, 
        {
            "eventId": 6, 
            "eventType": "ActivityTaskStarted", 
            "eventTimestamp": 1475654723.109, 
            "activityTaskStartedEventAttributes": {
                "scheduledEventId": 5, 
                "identity": "worker-1"
            }
        }, 
        {
            "eventId": 7, 
            "eventType": "ActivityTaskCompleted", 
            "activityTaskCompletedEventAttributes": {
                "startedEventId": 6, 
                "scheduledEventId": 5, 
                "result": "success"
            }, 
            "eventTimestamp": 1475654723.147
        }, 
        {
            "eventId": 8, 
            "eventType": "DecisionTaskScheduled", 
            "decisionTaskScheduledEventAttributes": {
                "startToCloseTimeout": "NONE", 
                "taskList": {
                    "name": "test-tasklist"
                }
            }, 
            "eventTimestamp": 1475654723.147
        }, 
        {
            "eventId": 9, 
            "eventType": "DecisionTaskStarted", 
            "eventTimestamp": 1475654723.19, 
            "decisionTaskStartedEventAttributes": {
                "scheduledEventId": 8, 
                "identity": "decider-1"
            }
        }, 
        {
            "eventId": 10, 
            "eventType": "DecisionTaskCompleted", 
            "decisionTaskCompletedEventAttributes": {
                "startedEventId": 9, 
                "scheduledEventId": 8
            }, 
            "eventTimestamp": 1475654723.241
        }, 
        {
            "eventId": 11, 
            "eventType": "WorkflowExecutionCompleted", 
            "workflowExecutionCompletedEventAttributes": {
                "result": "success", 
                "decisionTaskCompletedEventId": 10
            }, 
            "eventTimestamp": 1475654723.241
        }
    ]
}

Recommended Posts

Essayez Amazon Simple Workflow Service (SWF) avec Python et boto3
Utiliser Amazon Simple Notification Service avec Python
Essayez d'exécuter Google Chrome avec Python et Selenium
Essayez de gratter avec Python.
Essayez de créer un site Web simple avec responder et sqlite3
Essayez facilement Amazon EMR / Cloud Dataproc avec Python [mrjob]
Installez le sélénium sur votre Mac et essayez-le avec python
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
Essayez de créer un jeu simple avec Python 3 et iPhone
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
Programmation avec Python et Tkinter
Essayez d'utiliser l'API Twitter rapidement et facilement avec Python
Chiffrement et déchiffrement avec Python
Essayez la sortie Python avec Haxe 3.2
Opération S3 avec python boto3
Essayez d'ouvrir une sous-fenêtre avec PyQt5 et Python
Essayez d'exécuter Python avec Try Jupyter
python avec pyenv et venv
Essayez la reconnaissance faciale avec Python
Fonctionne avec Python et R
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
[Apprentissage automatique] Essayez d'exécuter Spark MLlib avec Python et faites des recommandations
Créez un simple OMR (lecteur de feuille de marque) avec Python et OpenCV
Essayez d'afficher la carte google et la carte géographique avec python
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
Communiquez avec FX-5204PS avec Python et PyUSB
Briller la vie avec Python et OpenCV
Essayez de gratter avec Python + Beautiful Soup
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Modulation et démodulation AM avec python
Scraping avec Node, Ruby et Python
Grattage avec Python, Selenium et Chromedriver
Essayez d'exploiter Facebook avec Python
Essayez la décomposition de valeurs singulières avec Python
Grattage avec Python et belle soupe
Encodage et décodage JSON avec python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
Lire et écrire NetCDF avec Python
Essayez la reconnaissance faciale avec python + OpenCV
J'ai joué avec PyQt5 et Python3
Lire et écrire du CSV avec Python
Essayez la simulation de contrôle de fréquence avec Python
Automatisez des tâches simples avec Python Part0
Intégration multiple avec Python et Sympy
Coexistence de Python2 et 3 avec CircleCI (1.0)
Jeu Sugoroku et jeu d'addition avec Python
Modulation et démodulation FM avec Python
Essayez d'utiliser Amazon DynamoDB à partir de Python
Introduction et utilisation de la bouteille Python ・ Essayez de configurer un serveur Web simple avec une fonction de connexion
Mettez Cabocha 0.68 dans Windows et essayez d'analyser la dépendance avec Python
Essayez de convertir les coordonnées de latitude / longitude et du monde entre elles avec python
Essayez de créer foldl et foldr avec Python: lambda. Aussi mesure du temps