Probieren Sie Amazon Simple Workflow Service (SWF) mit Python und boto3 aus

Quelle zum Ausprobieren

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

Versuchen

cp config.json.sample config.json

Schreiben Sie den Namen jedes SWF-Elements in. AWS_PROFILE beschreibt denjenigen, der Zugriff auf SWF hat.

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

Erstellen Sie eine Domäne / einen Workflow-Typ / einen Aktivitätstyp

Erstellen

python testcreate.py

Domainbestätigung

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

Bestätigung des Workflow-Typs

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"
    }
}

Bestätigung des Aktivitätstyps

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"
    }
}

Starten Sie Decider

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

Starten Sie einen Arbeiter

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

Erstellen Sie einen WorkFlow

Erstellen Sie einen Workflow, indem Sie die Domäne, die Workflow-ID, den Namen und die Version des Workflow-Typs sowie den Namen der TaskList angeben.

Erstellen

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'}}}

Bestätigung

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"
            }
        }
    ]
}

Überprüfen Sie die Reaktion von 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

Überprüfen Sie die Reaktion des Arbeiters

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

Verlauf der Workflow-Ausführung anzeigen

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

Probieren Sie Amazon Simple Workflow Service (SWF) mit Python und boto3 aus
Verwenden Sie den Amazon Simple Notification Service mit Python
Versuchen Sie, Google Chrome mit Python und Selenium auszuführen
Versuchen Sie es mit Python.
Versuchen Sie, eine einfache Website mit Responder und sqlite3 zu erstellen
Probieren Sie einfach Amazon EMR / Cloud Dataproc mit Python aus [mrjob]
Installieren Sie Selenium auf Ihrem Mac und probieren Sie es mit Python aus
Probieren Sie die DB-Operation mit Python aus und visualisieren Sie sie mit d3
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Crawlen mit Python und Twitter API 1-Einfache Suchfunktion
Programmieren mit Python und Tkinter
Versuchen Sie, mit Python schnell und einfach auf die Twitter-API zuzugreifen
Ver- und Entschlüsselung mit Python
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
S3-Betrieb mit Python Boto3
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen
Versuchen Sie, Python mit Try Jupyter auszuführen
Python mit Pyenv und Venv
Versuchen Sie die Gesichtserkennung mit Python
Funktioniert mit Python und R.
Ich habe eine einfache Schaltung mit Python gemacht (AND, OR, NOR, etc.)
[Maschinelles Lernen] Versuchen Sie, Spark MLlib mit Python auszuführen, und geben Sie Empfehlungen ab
Erstellen Sie mit Python und OpenCV ein einfaches OMR (Mark Sheet Reader)
Versuchen Sie, Google Map und Geography Map mit Python anzuzeigen
[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Leuchtendes Leben mit Python und OpenCV
Versuchen Sie es mit Python + Beautiful Soup
Roboter läuft mit Arduino und Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
AM-Modulation und Demodulation mit Python
Scraping mit Node, Ruby und Python
Scraping mit Python, Selen und Chromedriver
Versuchen Sie, Facebook mit Python zu betreiben
Versuchen Sie die Singularwertzerlegung mit Python
Kratzen mit Python und schöner Suppe
JSON-Codierung und -Decodierung mit Python
Hadoop-Einführung und MapReduce mit Python
[GUI in Python] PyQt5-Drag & Drop-
Lesen und Schreiben von NetCDF mit Python
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Ich habe mit PyQt5 und Python3 gespielt
Lesen und Schreiben von CSV mit Python
Versuchen Sie die Frequenzsteuerungssimulation mit Python
Automatisieren Sie einfache Aufgaben mit Python Part0
Mehrfachintegration mit Python und Sympy
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Sugoroku-Spiel und Zusatzspiel mit Python
FM-Modulation und Demodulation mit Python
Versuchen Sie es mit Amazon DynamoDB von Python
Einführung und Verwendung der Python-Flasche ・ Versuchen Sie, einen einfachen Webserver mit Anmeldefunktion einzurichten
Setzen Sie Cabocha 0.68 in Windows ein und versuchen Sie, die Abhängigkeit mit Python zu analysieren
Versuchen Sie, Breiten- / Längen- und Weltkoordinaten mit Python ineinander umzuwandeln
Versuchen Sie, Foldl und Foldr mit Python: Lambda zu machen. Auch Zeitmessung