Skip to main content

No project description provided

Project description

fabnodes

fabnodes is a Python CLI application that creates prefabricated lambda nodes. Using these 'node prefabs' one can create complicated distributed processes.

Requirements

The python requirements are stored in requirements.txt. fabnodes currently uses cfndsl to generate CloudFormation JSON files. The instructions to install cfndsl is available through the provided link.

Basic setup

Install the requirements:

$ pip install -r requirements.txt

Run the application:

$ python -m fabnodes --help

To run the tests (todo):

    $ pytest

Prefab: Basic Node

The Basic Node (samples/basic_node/node.py) will create the most basic node with the following features:

  • N SQS inputs, where N can be 0 or greater
  • M SNS outputs, where M can be 0 or greater
  • 1 Lambda Function that triggers on any input, and can write to any output

Below is a masterpiece that will attempt to illustrate:

==========================================================================



                                    |----------- Basic Node ----------|

.. -> SNS(SomeNode.alpha) ----\                          /--> SNS(output) -> ..
                               ---> SQS(input) -> Lambda
.. -> SNS(random topic)    ---/                          \--> (something)



==========================================================================

To create this node your cwd needs to be the same as node.py:

fabnodes create node.py --account-arn XXXXXXXXXXXX

At the moment the account-arn needs to be passed in because security.

This will make the calls required to CloudFormation that will create the above infrastructure.

Use-cases:

The basic node has the following use-cases:

  • The Source Node: A node that reads from an input source (that isn't another prefab node) that then can forward to many through a topic (0:M node)
  • The Router: A node that takes an input and can 'farm' it out to specifically made workers (other prefab nodes) through named topics (1:M node)
  • The Worker: A node that listens on a topic, performs a specific task, then creates output (1:1 node)
  • The Ingest: A node that listens to many topics, consumes data, and then produces output for a non-prefab node (M:0 node)

The Sample: node.py

Below is an explanation of the provided sample.

@fablib.Distribution('jlh-dev-lambda-functions')
@fablib.Inputs([
    {'name': 'Router', 'source': 'snsRouterTopicId'}])
@fablib.Outputs([
    {'name': 'Alpha'}])
@fablib.Node('BasicNode', 'comRoaetFabnodeSample', 'Basic Node')
def lambda_handler(events, context):
    client = boto3.client('sns')
    sns_target_arn = os.environ['Alpha']
    body_content = json.dumps(events)
    response = client.publish(
        TargetArn=sns_target_arn,
        Message=json.dumps({'default': body_content}),
        MessageStructure='json'
    )
    print(response)
  • The lambda_handler method is defined exactly as a normal lambda handler
  • The decorators:
    • Distribution: defines the S3 bucket to put the code into
    • Inputs (a list of dictionaries): creates an SQS trigger that is subscribed to the defined SNS topic
    • Outputs (a list of dictionaries): creates an SNS topic that can be referenced in the os.environ dictionary
    • Node: defines the name of the lambda function, the name of the stack, and the description of the stack
      • The name of the stack can be used as a reference in other prefabs to create the input/output connections

References

fabnodes is a Python CLI application generated from https://github.com/roaet/rorochip-cookies

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fabnodes-0.0.1.tar.gz (18.4 kB view details)

Uploaded Source

File details

Details for the file fabnodes-0.0.1.tar.gz.

File metadata

  • Download URL: fabnodes-0.0.1.tar.gz
  • Upload date:
  • Size: 18.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3

File hashes

Hashes for fabnodes-0.0.1.tar.gz
Algorithm Hash digest
SHA256 4054c159018b6d094a20e4a1648473ff33495b9b65387fd2571672a4867382af
MD5 c0e20738005b090fbd7ec48fe7bbfff9
BLAKE2b-256 e25f8fed3793d224018ebadca7c6d20f91f6053df96d7d8a8e61d8e189416406

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page