如何使用CDK-Python示例部署aws EventBridge

如何使用CDK-Python示例部署aws EventBridge,python,amazon-web-services,aws-cdk,Python,Amazon Web Services,Aws Cdk,我需要一些aws EventBridge CDK部署-Python示例 有人有一些代码吗?下面的示例是一个运行良好的Python CDK代码 该示例演示如何使用AWS CDK(云部署工具包)部署同时触发Step函数和Lambda函数的AWS EventBridge 由yl 先决条件: Python 3.7 AWS CDK 步骤: 1) 部署lambda函数 2) 准备资源:EventBus、EventPattern(稍后将解释EventBridge筛选器) 3) 创建Step函数状态机 4)

我需要一些aws EventBridge CDK部署-Python示例


有人有一些代码吗?

下面的示例是一个运行良好的Python CDK代码

该示例演示如何使用AWS CDK(云部署工具包)部署同时触发Step函数和Lambda函数的AWS EventBridge

由yl

先决条件:

  • Python 3.7

  • AWS CDK

步骤:

1) 部署lambda函数

2) 准备资源:EventBus、EventPattern(稍后将解释EventBridge筛选器)

3) 创建Step函数状态机

4) 使用资源创建规则:EventBus、EventPattern、目标:Lambda和状态机

from aws_cdk import aws_events as events
from aws_cdk import aws_events_targets as targets
from aws_cdk import (
    aws_lambda as _lambda,
    aws_stepfunctions as sfn,
    aws_stepfunctions_tasks as sfn_tasks
)
from aws_cdk import core
import typing

class CdkEventBridgeStack(core.Stack):

    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        # 1) deploy lambda function
        base_lambda = CdkEventBridgeStack.lambdaDeploy(self)

        # 2) prepare resources EventBus, EventPattern, Rule-Target
        eventBus, eventPattern, lambdaTarget1 = CdkEventBridgeStack.creEventBusAndEventPatternAndLambdaTarget(self, base_lambda)

        # 3) create step functions StateMachine
        stateMachineTarget = CdkEventBridgeStack.createStateMachine(self, base_lambda)

        # 4) create rule using resources: EventBus, EventPattern, Rule-Targets: Lambda and State-Machine
        CdkEventBridgeStack.createRule(self, [lambdaTarget1, stateMachineTarget], eventBus, eventPattern)

    # -----------------------------------------------------------------------------------
    @staticmethod
    def lambdaDeploy(this) -> None:
        base_lambda = _lambda.Function(this, 'MyLambda',
                                       function_name='MyLambda1',
                                       handler='testTargtetLambda.lambda_handler',
                                       runtime=_lambda.Runtime.PYTHON_3_7,
                                       code=_lambda.Code.asset('cdk_event_bridge/functions'),
                                       )
        return base_lambda
    # -----------------------------------------------------------------------------------
    @staticmethod
    def creEventBusAndEventPatternAndLambdaTarget(this, base_lambda: _lambda.IFunction):
        eventBus      = events.EventBus(scope=this, id="orders1", event_bus_name="orders2")
        eventPattern  = events.EventPattern(source=['XXX'])
        lambdaTarget1 = targets.LambdaFunction(handler=base_lambda)

        return eventBus, eventPattern, lambdaTarget1
    # -----------------------------------------------------------------------------------
    @staticmethod
    def createRule(this, targetsList : typing.Optional[typing.List["IRuleTarget"]] = None, eventBus: typing.Optional["IEventBus"]=None, eventPattern: typing.Optional["EventPattern"]=None):
        events.Rule(scope=this,
                    id="x123",
                    rule_name="routeToLambda",
                    targets=targetsList,
                    description="cdk Test Rule navigates to Lambda",
                    event_bus=eventBus,
                    event_pattern=eventPattern,
                    )
    # -----------------------------------------------------------------------------------
    @staticmethod
    def createStateMachine(this, lambda_function: _lambda.IFunction):
        submit_job_activity = sfn.Activity(
            this, "SubmitJob"
        )
        check_job_activity = sfn.Activity(
            this, "CheckJob"
        )

        submit_job = sfn.Task(
            this, "Submit Job",
            # task=sfn_tasks.InvokeActivity(submit_job_activity),
            task=sfn_tasks.InvokeFunction(lambda_function),
            result_path="$.guid",
        )

        get_status = sfn.Task(
            this, "Get Job Status",
            # task=sfn_tasks.InvokeActivity(check_job_activity),
            task=sfn_tasks.InvokeFunction(lambda_function),
            input_path="$.guid",
            result_path="$.status",
        )

        finalStatus =  sfn.Succeed(
            this, 'Final Job Status'
        )

        # definition = submit_job.next(get_status).end_states(sfn.Succeed())
        definition = submit_job\
                     .next(get_status) ##.next(finalStatus)

        machineHandler = sfn.StateMachine(
            this, "StateMachine222",
            definition=definition,
            state_machine_name="CdkTestStateMachine",
            timeout=core.Duration.seconds(30),
        )
        #  machine: aws_cdk.aws_stepfunctions.IStateMachine
        stateMachineTarget = targets.SfnStateMachine(machine=machineHandler)
        return  stateMachineTarget

    # ----------------------------------------------------------------------------------- 
注:

关于Lambda函数展开

base_lambda = _lambda.Function(this, 'MyLambda',
                               function_name='MyLambda1',
                               handler='testTargtetLambda.lambda_handler',
                               runtime=_lambda.Runtime.PYTHON_3_7,
                               code=_lambda.Code.asset('cdk_event_bridge/functions'),
                               )
_lambda.Code.asset指向lambda代码所在的“函数”文件夹 当文件夹层次结构为:

/cdk_event_bridge+
                 +-cdk_event_bridge_stack.py  <= this cdk deployment script
                 +-/functions/+    <= a folder
                              +-testTargtetLambda.py  <= Lambda code
/cdk\u事件\u桥+
+-cdk_事件_桥_堆栈.py
/cdk_event_bridge+
                 +-cdk_event_bridge_stack.py  <= this cdk deployment script
                 +-/functions/+    <= a folder
                              +-testTargtetLambda.py  <= Lambda code