在本文中,我们将给您介绍关于ubuntu–无法让phantomjs在awslambda上工作的详细内容,并且为您解答ubuntu无法被ping的相关问题,此外,我们还将为您提供关于AWSLambdaJ
在本文中,我们将给您介绍关于ubuntu – 无法让phantomjs在aws lambda上工作的详细内容,并且为您解答ubuntu无法被ping的相关问题,此外,我们还将为您提供关于AWS Lambda Java:Lambda无法解压缩文件、AWS Lambda-无法导入模块“ lambda_function”、aws-lambda – AWS lambda调用不调用另一个lambda函数 – Node.js、com.amazonaws.services.lambda.AWSLambdaClientBuilder的实例源码的知识。
本文目录一览:- ubuntu – 无法让phantomjs在aws lambda上工作(ubuntu无法被ping)
- AWS Lambda Java:Lambda无法解压缩文件
- AWS Lambda-无法导入模块“ lambda_function”
- aws-lambda – AWS lambda调用不调用另一个lambda函数 – Node.js
- com.amazonaws.services.lambda.AWSLambdaClientBuilder的实例源码
ubuntu – 无法让phantomjs在aws lambda上工作(ubuntu无法被ping)
https://github.com/justengland/phantom-lambda-template
我在使用node43部署node-lambda时遇到了一些问题,但手动安装最新的源代码似乎在这方面有所帮助.
但是现在我在运行lambda函数时遇到了麻烦.我明白了
2016-04-12T16:47:12.133Z 3330adb9-00ce-11e6-9c08-d79a6bc84748 Calling phantom: /var/task/phantomjs [ '/var/task/phantomjs-script.js' ] 2016-04-12T16:47:12.236Z 3330adb9-00ce-11e6-9c08-d79a6bc84748 Error: spawn EACCES at exports._errnoException (util.js:870:11) at ChildProcess.spawn (internal/child_process.js:298:11)
看起来像lambda无法访问幻像二进制文件.
有什么办法可以让函数获得更多的权限吗?
谢谢
解决方法
如果您正在调用任何可执行文件或使用二进制文件附带的库,则需要在使用Amazon Linux的EC2计算机上编译它们,并使用Lambda函数中的结果. This is a very basic tutorial.
如果您已经这样做了,还要确保您使用的二进制文件是可执行的(您可以通过调用chmod 777 your_executable来完成此操作).我猜你已经这样做了(在你的情况下,phantomjs也应该照顾这个),但这是EACCES的主要错误来源.
AWS Lambda Java:Lambda无法解压缩文件
我正在尝试将Java与AWS Lambda结合使用。我创建了一个具有所有依赖项的jar文件(使用maven-assembly-
plugin)。上传后,我无法调用lambda。我收到错误消息Calling the Invoke API failed with message:
Lambda was not able to unzip the file
。jar文件为11 MB。我可以用java -jar
AWS Lambda-无法导入模块“ lambda_function”
像我之前的许多其他人一样,我正在尝试运行一个AWS Lambda函数,当我尝试对其进行测试时,
“ errorMessage”:“无法导入模块’lambda_function’”
我的处理程序设置为lambda_function.lambda_handler,我确实有一个名为lambda_function.py的文件,其中包含一个名为lambda_handler的函数。这是屏幕截图作为证明:
当我在随附的IDE中内联编写代码片段时,一切工作正常,但是当我将完整程序及其所有依赖项压缩并上传后,出现上述错误。
我正在使用Numpy和Scipy程序包,它们非常大。我的压缩目录为34 MB,未压缩的目录为122 MB。我认为这应该没问题,因为压缩目录的限制为50
MB。似乎上传正常,因为我看到以下消息:
Lambda函数“单镜头图像分类”的部署包太大,无法启用内联代码编辑。但是,您仍然可以立即调用函数。
我已经看到一些帖子通过使用virtualenv解决了这个问题,但是我对这种技术并不熟悉,我不确定如何正确使用它。
我也看到一些帖子说,有时依赖项具有依赖项,我可能需要包括这些依赖项,但是我不确定如何找到它。
这是lambda_function.py的顶部,应该足以查看我正在使用的库,并且确实具有lambda_handler函数:
import os
import boto3
import numpy as np
from scipy.ndimage import imread
from scipy.spatial.distance import cdist
def lambda_handler(event,context):
s3 = boto3.resource('s3')
这是我要上传的目录的未压缩版本的屏幕截图:
如果这可能是一个问题,我还可以发布Lambda使用的策略角色。
非常感谢任何见解!
更新:
这是我尝试的一种解决方案:1. git clone https://github.com/Miserlou/lambda-packages
2.在Documents中创建一个名为new_lambda的文件夹3.将我的lambda_function.py和numpy文件夹从lambda软件包复制到new_lambda中,以及我使用Docker
for AWS编译的scipy库文章:https : //serverlesscode.com/post/scikitlearn-with-amazon-
linux-container/ 4.右键单击new_lambda文件夹并选择“ compress”压缩它
我的结果:
无法导入模块“ lambda_function”:没有名为“ lambda_function”的模块
重申一下,我的文件名为lambda_function.py,并包含一个名为lambda_handler的函数,该函数接受两个参数(如上所示)。此信息与在Handler中看到的信息相同,也与上面看到的信息相同。
如果这很重要,我正在使用Mac计算机。
更新2
如果我按照上述步骤操作,而是直接选择要压缩的文件来压缩文件,然后右键单击并选择“压缩”,则会出现错误
无法导入模块“ lambda_function”:无法导入名称“ show_config”
另外,预编译的lambda软件包表示它们是为“至少Python 2.7”编译的,但是我的lambda运行时是3.6。这可能是个问题吗?
aws-lambda – AWS lambda调用不调用另一个lambda函数 – Node.js
我的羊羔在同一地区,同样的政策,同样的安全组织.另外VPC在两个羊羔都是一样的.唯一不同的是现在是lambda功能
这里是角色权利
1)创建AWSLambdaExecute和AWSLambdaBasicExecutionRole
2)创建一个要调用的lambda函数
Lambda_TEST
exports.handler = function(event,context) { console.log('Lambda TEST Received event:',JSON.stringify(event,null,2)); context.succeed(event); };
3)这是调用它的另一个函数.
var AWS = require('aws-sdk'); AWS.config.region = 'us-east-1'; var lambda = new AWS.Lambda(); exports.handler = function(event,context) { var params = { FunctionName: 'Lambda_TEST',// the lambda function we are going to invoke InvocationType: 'RequestResponse',LogType: 'Tail',Payload: '{ "name" : "Arpit" }' }; lambda.invoke(params,function(err,data) { if (err) { context.fail(err); } else { context.succeed('Lambda_TEST said '+ data.Payload); } }) };
参考文献:This link
解决方法
我将通过执行器来表示执行第二个lambda的lambda.
为什么超时?
由于执行者被“锁定”在VPC之后 – 所有互联网通信都被阻止.
这导致任何http(s)呼叫被超时,因为它们请求数据包不会到达目的地.
这就是aws-sdk完成的所有操作导致超时.
简单的解决方案
如果执行程序不必在VPC中,只需将其放在其中即可,如果没有VPC,则lambda也可以正常工作.
当lambda调用VPC中的资源时,需要在VPC中定位lambda.
真正的解决方案
从上述可以看出,位于VPC内部的资源无法访问互联网 – 这是不正确的 – 只需要进行几个配置.
>创建VPC.
>创建2个子网,一个私人和第二个公共(这些术语在前面解释,继续阅读).
>创建Internet网关 – 这是将VPC连接到互联网的虚拟路由器.
>创建NAT网关 – 选择公共子网并为其创建一个新的弹性IP(该IP是您的VPC本地) – 此组件将管道到互联网网关的通信.
>创建2个路由表 – 一个命名为public,第二个是私有的.
>在公共路由表中,转到路由并添加新路由:
Destination: 0.0.0.0/0
Target: the ID of the
internet-gateway
>在私有路由表中,转到路由并添加新路由:
Destination: 0.0.0.0/0
Target: the ID of the
nat-gateway
>私有子网是其路由表中的子网,没有到互联网网关的路由.
>公共子网是一个子网,它的路由表中有一个到互联网网关的路由
我们在这里
我们创建了这样的东西:
这允许私有子网中的资源调出互联网.
您可以找到更多文档here.
com.amazonaws.services.lambda.AWSLambdaClientBuilder的实例源码
public TestResult run() { final LambdaSeleniumService lambdaService = LambdaInvokerFactory.builder() .lambdaClient(AWSLambdaClientBuilder.defaultClient()) .build(LambdaSeleniumService.class); return lambdaService.runTest(request); }
void deploy(AwsKeyPair keyPair,String region,String zipFilename,String functionName,Proxy proxy) { long t = System.currentTimeMillis(); final AWSCredentialsProvider credentials = new AWsstaticCredentialsProvider( new BasicAWSCredentials(keyPair.key,keyPair.secret)); AWSLambda lambda = AWSLambdaClientBuilder.standard().withCredentials(credentials) .withClientConfiguration(Util.createConfiguration(proxy)).withRegion(region).build(); byte[] bytes; try { bytes = IoUtils.toByteArray(new FileInputStream(zipFilename)); } catch (IOException e) { throw new RuntimeException(e); } DecimalFormat df = new DecimalFormat("0.000"); log.info("deploying " + zipFilename + ",length=" + df.format(bytes.length / 1024.0 / 1024.0) + "MB,to functionName=" + functionName); lambda.updateFunctionCode( // new UpdateFunctionCodeRequest() // .withFunctionName(functionName) // .withPublish(true) // .withZipFile(ByteBuffer.wrap(bytes))); log.info("deployed in " + (System.currentTimeMillis() - t) + "ms"); }
@Test public void testLambdaInvokeSubsegmentContainsFunctionName() { // Setup test AWSLambda lambda = AWSLambdaClientBuilder.standard().withRequestHandlers(new TracingHandler()).withRegion(Regions.US_EAST_1).withCredentials(new AWsstaticCredentialsProvider(new BasicAWSCredentials("fake","fake"))).build(); AmazonHttpClient amazonHttpClient = new AmazonHttpClient(new ClientConfiguration()); ConnectionManagerAwareHttpClient apacheHttpClient = Mockito.mock(ConnectionManagerAwareHttpClient.class); HttpResponse httpResponse = new BasicHttpResponse(new BasicStatusLine(HttpVersion.HTTP_1_1,200,"OK")); Basichttpentity responseBody = new Basichttpentity(); responseBody.setContent(new ByteArrayInputStream("null".getBytes(StandardCharsets.UTF_8))); // Lambda returns "null" on successful fn. with no return value httpResponse.setEntity(responseBody); try { Mockito.doReturn(httpResponse).when(apacheHttpClient).execute(Mockito.any(HttpUriRequest.class),Mockito.any(HttpContext.class)); } catch (IOException e) { } WhiteBox.setInternalState(amazonHttpClient,"httpClient",apacheHttpClient); WhiteBox.setInternalState(lambda,"client",amazonHttpClient); // Test logic Segment segment = AWSXRay.beginSegment("test"); InvokeRequest request = new InvokeRequest(); request.setFunctionName("testFunctionName"); InvokeResult r = lambda.invoke(request); System.out.println(r.getStatusCode()); System.out.println(r); Assert.assertEquals(1,segment.getSubsegments().size()); Assert.assertEquals("Invoke",segment.getSubsegments().get(0).getAws().get("operation")); System.out.println(segment.getSubsegments().get(0).getAws()); Assert.assertEquals("testFunctionName",segment.getSubsegments().get(0).getAws().get("function_name")); }
public ConnectorModel(Regions region,String profileName) { ProfileCredentialsProvider profileCredentialsProvider = new ProfileCredentialsProvider(profileName); awsLambdaClient = AWSLambdaClientBuilder.standard() .withRegion(region) .withCredentials(profileCredentialsProvider) .build(); }
protected AWSLambda resolveAwsLambdaClient() { AWSLambda resolvedClient = awsLambdaClient; if (resolvedClient == null && region != null) { resolvedClient = AWSLambdaClientBuilder.standard().withRegion(region).build(); } return requiretoBuild(resolvedClient,"an awsLambdaClient or a region is required"); }
/** * Executes a lambda function and returns the result of the execution. */ @Override public cfData execute( cfSession _session,cfArgStructData argStruct ) throws cfmRunTimeException { AmazonKey amazonKey = getAmazonKey( _session,argStruct ); // Arguments to extract String payload = getNamedStringParam( argStruct,"payload",null ); String functionName = getNamedStringParam( argStruct,"function",null ); String qualifier = getNamedStringParam( argStruct,"qualifier",null ); try { // Construct the Lambda Client InvokeRequest invokeRequest = new InvokeRequest(); invokeRequest.setInvocationType( InvocationType.Event ); invokeRequest.setLogType( LogType.Tail ); invokeRequest.setFunctionName( functionName ); invokeRequest.setPayload( payload ); if ( qualifier != null ) { invokeRequest.setQualifier( qualifier ); } // Lambda client must be created with credentials BasicAWSCredentials awsCreds = new BasicAWSCredentials( amazonKey.getKey(),amazonKey.getSecret() ); AWSLambda awsLambda = AWSLambdaClientBuilder.standard() .withRegion( amazonKey.getAmazonRegion().toAWSRegion().getName() ) .withCredentials( new AWsstaticCredentialsProvider( awsCreds ) ).build(); // Execute awsLambda.invoke( invokeRequest ); } catch ( Exception e ) { throwException( _session,"AmazonLambdaAsyncExecute: " + e.getMessage() ); return cfBooleanData.FALSE; } return cfBooleanData.TRUE; }
/** * Creates a proxy instance of a supplied interface that contains methods annotated with * {@link LambdaFunction}. Provides automatic credential support to authenticate with an IAM * access keys using {@link BasicSessionCredentials} auto-configured from Spring Boot * configuration properties in {@link AmazonProperties}. * * @param type * @param <T> * @return */ public <T> T getFunctionInstance(Class<T> type) { return LambdaInvokerFactory.builder() .lambdaClient(AWSLambdaClientBuilder.standard() .withRegion(Regions.US_EAST_1) .withCredentials(new LambdaCredentialsProvider(amazonProperties)) .build()) .build(type); }
public AWSLambda getLambdaClient() { return AWSLambdaClientBuilder.standard() .withRegion(Regions.US_EAST_1) .withCredentials(new LambdaCredentialsProvider(amazonProperties)) .build(); }
/** * Executes a lambda function and returns the result of the execution. */ @Override public cfData execute( cfSession _session,null ); try { // Construct the Lambda Client InvokeRequest invokeRequest = new InvokeRequest(); invokeRequest.setInvocationType( InvocationType.RequestResponse ); invokeRequest.setLogType( LogType.Tail ); invokeRequest.setFunctionName( functionName ); invokeRequest.setPayload( payload ); if ( qualifier != null ) { invokeRequest.setQualifier( qualifier ); } // Lambda client must be created with credentials BasicAWSCredentials awsCreds = new BasicAWSCredentials( amazonKey.getKey(),amazonKey.getSecret() ); AWSLambda awsLambda = AWSLambdaClientBuilder.standard() .withRegion( amazonKey.getAmazonRegion().toAWSRegion().getName() ) .withCredentials( new AWsstaticCredentialsProvider( awsCreds ) ).build(); // Execute and process the results InvokeResult result = awsLambda.invoke( invokeRequest ); // Convert the returned result ByteBuffer resultPayload = result.getPayload(); String resultJson = new String( resultPayload.array(),"UTF-8" ); Map<String,Object> resultMap = Jackson.fromJsonString( resultJson,Map.class ); return tagUtils.convertToCfData( resultMap ); } catch ( Exception e ) { throwException( _session,"AmazonLambdaExecute: " + e.getMessage() ); return cfBooleanData.FALSE; } }
今天的关于ubuntu – 无法让phantomjs在aws lambda上工作和ubuntu无法被ping的分享已经结束,谢谢您的关注,如果想了解更多关于AWS Lambda Java:Lambda无法解压缩文件、AWS Lambda-无法导入模块“ lambda_function”、aws-lambda – AWS lambda调用不调用另一个lambda函数 – Node.js、com.amazonaws.services.lambda.AWSLambdaClientBuilder的实例源码的相关知识,请在本站进行查询。
本文标签: