我们可以在不使用API网关的情况下从外部aws调用lambda函数吗?我想直接从外部aws服务调用lambda函数是否可能?
答案 0 :(得分:11)
AWS Lambda函数可以通过以下方式触发:
除了使用事件源调用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创建了一个目标组,但是...有时候很有用。