跳转到主要内容

未提供项目描述

项目描述

fabnodes

fabnodes是一个Python CLI应用程序,用于创建预制lambda节点。使用这些“节点预制件”,可以创建复杂分布式进程。

需求

Python需求存储在requirements.txt中。fabnodes目前使用cfndsl来生成CloudFormation JSON文件。安装cfndsl的说明可通过提供的链接获取。

基本设置

安装需求

$ pip install -r requirements.txt

运行应用程序

$ python -m fabnodes --help

运行测试(待办事项)

    $ pytest

预制:基本节点

基本节点(samples/basic_node/node.py)将创建具有以下功能的最基本的节点

  • N SQS输入,其中N可以是0或更大
  • M SNS输出,其中M可以是0或更大
  • 1个Lambda函数,可以在任何输入上触发,并可以写入任何输出

以下是一个试图说明的杰作

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



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

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



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

要创建此节点,您的cwd需要与node.py相同

fabnodes create node.py --account-arn XXXXXXXXXXXX

目前,由于安全原因,必须传递account-arn

这将调用创建上述基础设施所需的CloudFormation调用。

用例

基本节点有以下用例

  • 源节点:从输入源(不是另一个预制节点)读取的节点,然后可以通过主题(0:M节点)转发到多个节点
  • 路由器:一个节点,可以接收输入并通过命名主题(1:M节点)将其分配给专门设计的工人(其他预制节点)。
  • 工人:一个监听主题、执行特定任务然后创建输出的节点(1:1节点)。
  • 摄入:一个监听多个主题、消费数据并然后为非预制节点生成输出的节点(M:0节点)。

示例:node.py

以下是对提供的示例的解释。

@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)
  • lambda_handler 方法定义得和正常的 lambda 处理器完全一样
  • 装饰器
    • Distribution:定义了将代码放入的 S3 桶
    • Inputs(字典列表):创建一个订阅定义的 SNS 主题的 SQS 触发器
    • Outputs(字典列表):创建一个可以参考的 SNS 主题,可以在 os.environ 字典中使用
    • Node:定义了 lambda 函数的名称、堆栈的名称和堆栈的描述
      • 堆栈的名称可以在其他预制中用作参考以创建输入/输出连接

参考

fabnodes 是由 https://github.com/roaet/rorochip-cookies 生成的 Python CLI 应用程序

由以下提供支持