{ "cells": [ { "cell_type": "markdown", "source": [ "# Canned Actions\n", "\n", "AWS StepFunction Visual Editor provides a \"low code\", \"drag and drop\" development experience. As developer, we would like to take the same benefit, but in codes.\n", "\n", "All available canned actions are defined in ``aws_stepfunction.actions.${action_name}`` name space. Feel free to [submit feature request](https://github.com/MacHu-GWU/aws_stepfunction-project/issues/new) to support more canned actions.\n", "\n", "\"\"" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } } }, { "cell_type": "code", "execution_count": 14, "outputs": [], "source": [ "import aws_stepfunction as sfn\n", "from rich import print\n", "\n", "sfn.task_context.aws_account_id = \"111122223333\"\n", "sfn.task_context.aws_region = \"us-east-1\"" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "code", "execution_count": 15, "outputs": [ { "data": { "text/plain": "\u001B[1m{\u001B[0m\n \u001B[32m'Type'\u001B[0m: \u001B[32m'Task'\u001B[0m,\n \u001B[32m'Resource'\u001B[0m: \u001B[32m'arn:aws:states:::lambda:invoke'\u001B[0m,\n \u001B[32m'End'\u001B[0m: \u001B[3;92mTrue\u001B[0m,\n \u001B[32m'Parameters'\u001B[0m: \u001B[1m{\u001B[0m\u001B[32m'Payload.$'\u001B[0m: \u001B[32m'$'\u001B[0m, \u001B[32m'FunctionName'\u001B[0m: \u001B[32m'arn:aws:lambda:us-east-1:111122223333:my_lbd_func'\u001B[0m\u001B[1m}\u001B[0m,\n \u001B[32m'OutputPath'\u001B[0m: \u001B[32m'$.Payload'\u001B[0m,\n \u001B[32m'Retry'\u001B[0m: \u001B[1m[\u001B[0m\n \u001B[1m{\u001B[0m\n \u001B[32m'ErrorEquals'\u001B[0m: \u001B[1m[\u001B[0m\u001B[32m'Lambda.ServiceException'\u001B[0m, \u001B[32m'Lambda.AWSLambdaException'\u001B[0m, \u001B[32m'Lambda.SdkClientException'\u001B[0m\u001B[1m]\u001B[0m,\n \u001B[32m'IntervalSeconds'\u001B[0m: \u001B[1;36m2\u001B[0m,\n \u001B[32m'BackoffRate'\u001B[0m: \u001B[1;36m2\u001B[0m,\n \u001B[32m'MaxAttempts'\u001B[0m: \u001B[1;36m3\u001B[0m\n \u001B[1m}\u001B[0m\n \u001B[1m]\u001B[0m\n\u001B[1m}\u001B[0m\n", "text/html": "
{\n    'Type': 'Task',\n    'Resource': 'arn:aws:states:::lambda:invoke',\n    'End': True,\n    'Parameters': {'Payload.$': '$', 'FunctionName': 'arn:aws:lambda:us-east-1:111122223333:my_lbd_func'},\n    'OutputPath': '$.Payload',\n    'Retry': [\n        {\n            'ErrorEquals': ['Lambda.ServiceException', 'Lambda.AWSLambdaException', 'Lambda.SdkClientException'],\n            'IntervalSeconds': 2,\n            'BackoffRate': 2,\n            'MaxAttempts': 3\n        }\n    ]\n}\n
\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "task_lambda_invoke = sfn.actions.lambda_invoke(\n", " func_name=\"my_lbd_func\",\n", ")\n", "task_lambda_invoke.end = True\n", "print(task_lambda_invoke.serialize())" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "code", "execution_count": 16, "outputs": [ { "data": { "text/plain": "\u001B[1m{\u001B[0m\n \u001B[32m'Type'\u001B[0m: \u001B[32m'Task'\u001B[0m,\n \u001B[32m'Resource'\u001B[0m: \u001B[32m'arn:aws:states:::ecs:runTask.sync'\u001B[0m,\n \u001B[32m'End'\u001B[0m: \u001B[3;92mTrue\u001B[0m,\n \u001B[32m'Parameters'\u001B[0m: \u001B[1m{\u001B[0m\n \u001B[32m'LaunchType'\u001B[0m: \u001B[32m'FARGATE'\u001B[0m,\n \u001B[32m'Cluster'\u001B[0m: \u001B[32m'arn:aws:ecs:REGION:ACCOUNT_ID:cluster/MyECSCluster'\u001B[0m,\n \u001B[32m'TaskDefinition'\u001B[0m: \u001B[32m'arn:aws:ecs:us-east-1:111122223333:task-definition/my-task:1'\u001B[0m\n \u001B[1m}\u001B[0m\n\u001B[1m}\u001B[0m\n", "text/html": "
{\n    'Type': 'Task',\n    'Resource': 'arn:aws:states:::ecs:runTask.sync',\n    'End': True,\n    'Parameters': {\n        'LaunchType': 'FARGATE',\n        'Cluster': 'arn:aws:ecs:REGION:ACCOUNT_ID:cluster/MyECSCluster',\n        'TaskDefinition': 'arn:aws:ecs:us-east-1:111122223333:task-definition/my-task:1'\n    }\n}\n
\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "task_ecs_run_task = sfn.actions.ecs_run_task(\n", " task_def=\"my-task:1\",\n", ")\n", "task_ecs_run_task.end = True\n", "print(task_ecs_run_task.serialize())" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "code", "execution_count": 17, "outputs": [ { "data": { "text/plain": "\u001B[1m{\u001B[0m\n \u001B[32m'Type'\u001B[0m: \u001B[32m'Task'\u001B[0m,\n \u001B[32m'Resource'\u001B[0m: \u001B[32m'arn:aws:states:::glue:startJobRun.sync'\u001B[0m,\n \u001B[32m'End'\u001B[0m: \u001B[3;92mTrue\u001B[0m,\n \u001B[32m'Parameters'\u001B[0m: \u001B[1m{\u001B[0m\u001B[32m'JobName'\u001B[0m: \u001B[32m'my_etl_job'\u001B[0m\u001B[1m}\u001B[0m\n\u001B[1m}\u001B[0m\n", "text/html": "
{\n    'Type': 'Task',\n    'Resource': 'arn:aws:states:::glue:startJobRun.sync',\n    'End': True,\n    'Parameters': {'JobName': 'my_etl_job'}\n}\n
\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "task_glue_start_job_run = sfn.actions.glue_start_job_run(\n", " job_name=\"my_etl_job\"\n", ")\n", "task_glue_start_job_run.end = True\n", "print(task_glue_start_job_run.serialize())" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "code", "execution_count": 18, "outputs": [ { "data": { "text/plain": "\u001B[1m{\u001B[0m\n \u001B[32m'Type'\u001B[0m: \u001B[32m'Task'\u001B[0m,\n \u001B[32m'Resource'\u001B[0m: \u001B[32m'arn:aws:states:::sns:publish'\u001B[0m,\n \u001B[32m'End'\u001B[0m: \u001B[3;92mTrue\u001B[0m,\n \u001B[32m'Parameters'\u001B[0m: \u001B[1m{\u001B[0m\n \u001B[32m'TopicArn'\u001B[0m: \u001B[32m'arn:aws:sns:us-east-1:111122223333:my_topic'\u001B[0m,\n \u001B[32m'Message'\u001B[0m: \u001B[1m{\u001B[0m\u001B[32m'body'\u001B[0m: \u001B[32m'something happens'\u001B[0m\u001B[1m}\u001B[0m\n \u001B[1m}\u001B[0m\n\u001B[1m}\u001B[0m\n", "text/html": "
{\n    'Type': 'Task',\n    'Resource': 'arn:aws:states:::sns:publish',\n    'End': True,\n    'Parameters': {\n        'TopicArn': 'arn:aws:sns:us-east-1:111122223333:my_topic',\n        'Message': {'body': 'something happens'}\n    }\n}\n
\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "task_sns_publish = sfn.actions.sns_publish(\n", " topic=\"my_topic\",\n", " message={\"body\": \"something happens\"},\n", ")\n", "task_sns_publish.end = True\n", "print(task_sns_publish.serialize())" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "code", "execution_count": 18, "outputs": [], "source": [], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 0 }