【发布时间】:2021-07-15 09:03:33
【问题描述】:
我使用 puppeteer 和 chrome-aws-lambda 收集数据。我计划将其推送到 AWS Lambda,但在本地测试时出现错误:
Error: Protocol error (Runtime.callFunctionOn): Target closed.
当我打电话给waitForSelector时。
我有一些帖子提到,chrome 进程有可能在 docker 中获得太少的内存。问题是:如何获得更多内存?我还读到disable-dev-shm-usage 可能有帮助,但它没有。我现在就是这样做的(最后一行是发生错误的地方):
const chromium = require('chrome-aws-lambda');
browser = await chromium.puppeteer.launch({
args: [...chromium.args, `--proxy-server=${proxyUrl}`, '--disable-dev-shm-usage'],
defaultViewport: chromium.defaultViewport,
executablePath: await chromium.executablePath,
headless: chromium.headless,
ignoreHTTPSErrors: true,
});
const page = await browser.newPage();
await page.authenticate({ username, password });
await page.goto(MY_URL, { waitUntil: 'domcontentloaded' })
await page.click(SUBMIT_SELECTOR);
await page.waitForSelector('#myDiv')
.then(() => console.log('got it')).
catch((e)=>console.log('Error happens: '+ e));
更新:有关本地设置的更多信息:
我使用sam local start-api 在本地运行它。
这是我的template.yaml 的内容(只是一个稍微更新的hello-world 模板:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
samnode
Sample SAM Template for samnode
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
Function:
Timeout: 60
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: hello-world/
Handler: app.lambdaHandler
Runtime: nodejs14.x
MemorySize: 4096
Layers:
- !Sub 'arn:aws:lambda:${AWS::Region}:764866452798:layer:chrome-aws-lambda:22'
Events:
HelloWorld:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /hello
Method: get
Outputs:
# ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
# Find out more about other implicit resources you can reference within SAM
# https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
HelloWorldApi:
Description: "API Gateway endpoint URL for Prod stage for Hello World function"
Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
HelloWorldFunction:
Description: "Hello World Lambda Function ARN"
Value: !GetAtt HelloWorldFunction.Arn
HelloWorldFunctionIamRole:
Description: "Implicit IAM Role created for Hello World function"
Value: !GetAtt HelloWorldFunctionRole.Arn
【问题讨论】:
-
您能否提供更多有关您在本地运行情况的详细信息,例如您使用的是 SAM 还是其他框架?
-
@GSSwain,谢谢!我刚刚在帖子中添加了包含此信息的更新。
-
从 StackOverflow 问题中的模板中删除 AWS 帐号。
-
如果你的意思是:
764866452798,它只是一个公开可用的 chrome-aws-lambda 的 id。在此处看不到任何其他帐号 -
那么是内存问题还是其他问题?如果您可以添加对您有用的内容,那就太好了。
标签: amazon-web-services puppeteer chrome-aws-lambda