Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从LambdaA启用/禁用AWS LambdaB的cron_Java_Amazon Web Services_Aws Lambda_Cron_Serverless - Fatal编程技术网

Java 如何从LambdaA启用/禁用AWS LambdaB的cron

Java 如何从LambdaA启用/禁用AWS LambdaB的cron,java,amazon-web-services,aws-lambda,cron,serverless,Java,Amazon Web Services,Aws Lambda,Cron,Serverless,我有一个在S3事件中触发的Lambda(LoadFile)。这种情况每年发生一到两次 加载文件后,在午夜,需要激活加载的数据。有一个lambda(ActivateData)可以做到这一点。有一个cron事件将在午夜运行此lambda。事件在创建时被“禁用” 加载文件lambda加载数据后如何“启用”ActivateData lambda的cron事件 要获得额外积分,ActivateData lambda如何禁用自己的cron事件 我对用Java做这件事特别感兴趣 SAM模板使用以下内容指定激活

我有一个在S3事件中触发的Lambda(LoadFile)。这种情况每年发生一到两次

加载文件后,在午夜,需要激活加载的数据。有一个lambda(ActivateData)可以做到这一点。有一个cron事件将在午夜运行此lambda。事件在创建时被“禁用”

加载文件lambda加载数据后如何“启用”ActivateData lambda的cron事件

要获得额外积分,ActivateData lambda如何禁用自己的cron事件

我对用Java做这件事特别感兴趣

SAM模板使用以下内容指定激活数据lambda:

  Events:
    ActivateFileDataEvent:
      Type: Schedule
      Properties:
        Schedule: cron(0 0 * * ? *)
        Description: Activates an already loaded file
        Enabled: false

我不认为cron是处理这个用例的最理想的方法。在大多数情况下,它将处于禁用状态。更好的方法可能是使用AWS Step函数,使用现有的两个Lambda函数

Step函数将包含3个节点-

  • 加载文件(任务节点)
  • 等待节点。您可以使此节点等待固定的秒数
  • ActivateData(任务节点)
  • 唯一棘手的部分是决定等待节点必须等待多长时间。这可以在加载文件Lambda中确定。您可以在那里获取currentTime,并计算下一个12 AM之前剩余的秒数。并在Step Functions状态中设置该值,以便等待节点可以拾取该值

    如果不希望损坏LoadData Lambda函数中的逻辑,可以在单独的Lambda函数中解耦时间计算逻辑,并将此新函数再次作为任务节点放入Step函数中


    与大多数事情一样,一旦你弄明白了,事情就变得非常简单了

    在SAM中:

    • 将要启用的事件的名称作为环境变量存储在加载文件Lambda中
    • 在“策略”部分中为该lambda授予必要的权限
    然后这段代码就成功了。ActivateData lambda在运行后必须禁用,这样它就不会在每晚午夜再次运行

    AmazonEventBridge eventBridge = AmazonEventBridgeClientBuilder.defaultClient();
    EnableRuleRequest request = new EnableRuleRequest();
    request.setName(System.getenv("ACTIVATE_EVENT_NAME"));
    try {
      EnableRuleResult result = eventBridge.enableRule(request);
    } catch (Throwable t){
      log.error("Something went wrong, event is still disabled.",t);
    }
    

    “cron事件”指的是CloudWatch事件调度规则?你不能在aws中直接(不使用cron)让LoadFileLambda调用ActivateData lambda吗?也许我误解了你的要求:)@SusanMustafa LoadFile lambda会在工作时间发生,并且ActivateData lambda必须在当晚午夜运行。@Marcin ActivateData lambda的SAM模板(上面编辑)中设置了一个禁用的cron事件。我想从加载文件lambda启用此事件