Rest控制器触发AWS Lambda

时间:2019-09-09 10:44:04

标签: java amazon-web-services rest aws-lambda amazon-sns

我是aws的新手,我想知道如何解决我的问题。

我的情况如下: 我有一个rest控制器,该控制器返回一个整数(此数字表示以毫秒为单位的时间)。

当整数大于某个数字时,我想触发aws lambda。

我正在进行研究以找到一些解决方案,并且我知道我可能会定期(每5分钟或1小时)向控制器询问该值,但是我想知道是否有其他方法可以解决此问题? / p>

感谢您的帮助!

PS。我不想定期安排它,而要使用诸如监听器之类的东西来休息。 例如我的rest控制器返回的值是3,并且还可以,但是当我的控制器返回的值大于(比如说10)时,我希望它触发lambda。

3 个答案:

答案 0 :(得分:0)

我不确定我是否正确解决了核心问题,但是如果您的用例只是为了安排触发lambda的时间表,那么您实际上并不需要外部服务来调用它每隔一段时间。

您可以使用CloudWatch,在“事件”->“规则”中可以设置自定义计划并将lambda设置为目标。

在此处找到了如何操作的指南:https://www.youtube.com/watch?v=FynLOwBgJAU

答案 1 :(得分:0)

  • 以下是调用lambda同步和异步aws bogaws docs的不同方式
  • 您可以通过使用Amazon API Gateway定义自定义RESTful API来通过HTTPS调用Lambda函数。这为您的函数提供了一个端点,该端点可以响应REST调用,例如GET,PUT和POST。
  • 您可以使用rate或cron aws docs安排对cloudwatch事件aws docs安排表达式的lambda触发器
  • SNS to trigger a lambda function

答案 2 :(得分:0)

如果您在半标准JAX-RS环境中运行,则可以使用ContainerResponseFilter在内部触发此操作。骨架:

import java.io.IOException;

import javax.annotation.Priority;
import javax.ws.rs.Priorities;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;

@Provider
@Priority(Priorities.USER) // or whatever makes sense
public class ResponseFilterImpl implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext,
                       ContainerResponseContext responseContext) throws IOException {

        // get response body with responseContext.getEntity().toString() or whatever works
        // if it contains what you want, trigger a Lambda
    }
}