在不使用API​​网关和EC2实例的情况下调用aws Lambda函数

时间:2017-05-04 10:06:52

标签: aws-lambda

我们可以在不使用API​​网关的情况下从外部aws调用lambda函数吗?我想直接从外部aws服务调用lambda函数是否可能?

3 个答案:

答案 0 :(得分:11)

AWS Lambda函数可以通过以下方式触发:

  • 在其他AWS服务上发生的事件(例如,上传到Amazon S3存储桶的对象)
  • 发送到AWS API Gateway的消息(例如REST呼叫)
  • Amazon CloudWatch Events中的计划
  • 直接API调用

来自Supported Event Sources文档:

  

除了使用事件源调用Lambda函数之外,您还可以按需调用Lambda函数。在这种情况下,您不需要预先配置任何事件源映射。但是,请确保自定义应用程序具有调用Lambda函数所需的权限。

     

例如,用户应用程序也可以生成事件(构建您自己的自定义事件源)。客户端,移动或Web应用程序等用户应用程序可以使用AWS SDK或AWS Mobile SDK(例如适用于Android的AWS Mobile SDK)发布事件并调用Lambda函数。

因此,Internet上的任何内容都可以调用Lambda函数,但需要使用AWS凭据进行身份验证。

答案 1 :(得分:0)

这是在Android中调用没有API GateWay的AWS lambda函数的方式。

接口类

 @LambdaFunction(functionName = "lambdafunctionName", invocationType = "RequestResponse")
 String lambdafunctionName(String str);

Android代码(Java)

  new AsyncTask<Response, Void, String>() {
   @Override
    protected String doInBackground(Response... params) {
    try{
        CognitoCachingCredentialsProvider cognitoProvider = new 
        CognitoCachingCredentialsProvider(MainActivity.this, "#identitypoolID", #Region);     
    // creates an invocation factory
         LambdaInvokerFactory factory = new LambdaInvokerFactory(MainActivity.this,
                                    #Region, cognitoProvider);

    // create a proxied object of lambdafunctionName
          MyInterface lambdaFuction = factory.build(MyInterface.class,
                                    new LambdaJsonBinder());

   // invoke it just like a regular method
         String AWSResponse = lambdaFuction.lambdafunctionName(#Parameter to AWS lambda) ;
                            return AWSResponse;

     }catch(Exception e){

     Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
                          return null;
                        }

                    }
 @Override
  protected void onPostExecute(String result) {
   if (result == null) {
   Toast.makeText(MainActivity.this,"Error !", Toast.LENGTH_LONG).show();
   return;
   }
  Toast.makeText(MainActivity.this,"Response From AWS " +  result, Toast.LENGTH_LONG).show();
                    }
                }.execute();

答案 2 :(得分:0)

您还可以使用应用程序负载平衡器来调用lambda。 超时时间超过30秒时,此选项很有用。 要使用此选项,您需要向lambda函数添加触发器,然后选择Application Load Balancer,然后继续进行并不困难的配置。

与使用API​​网关相比,这太糟糕了,因为它为每个lambda创建了一个目标组,但是...有时候很有用。