Amazon web services 在EC2实例中运行Puppeter时出现问题
我正在使用AWS CloudFormation在AWS内部部署我的应用程序。 我正在ECS集群中使用一个负载平衡的Amazon web services 在EC2实例中运行Puppeter时出现问题,amazon-web-services,amazon-ec2,amazon-cloudformation,puppeteer,google-chrome-headless,Amazon Web Services,Amazon Ec2,Amazon Cloudformation,Puppeteer,Google Chrome Headless,我正在使用AWS CloudFormation在AWS内部部署我的应用程序。 我正在ECS集群中使用一个负载平衡的t2.2xlargeEC2实例 我有一个用nodejs编写的微服务,它处理一些HTML,将其转换为PDF,并将输出上传到S3。那是我使用木偶演员的地方 问题是,每当我在ec2实例中执行应用程序时,代码都会到达一个点,在这个点上它会打开一个新页面并停止,而不是解析,或者永远不会结束。老实说,我不知道发生了什么事 这是它执行的代码段的一部分: const browser = await
t2.2xlarge
EC2实例
我有一个用nodejs编写的微服务,它处理一些HTML,将其转换为PDF,并将输出上传到S3。那是我使用木偶演员的地方
问题是,每当我在ec2实例中执行应用程序时,代码都会到达一个点,在这个点上它会打开一个新页面并停止,而不是解析,或者永远不会结束。老实说,我不知道发生了什么事
这是它执行的代码段的一部分:
const browser = await puppeteer.launch({
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-web-security'
]
});
console.log('Puppeteer before launch ...');
console.log(await browser.version());
console.log('Puppeteer launched ...');
const page = await browser.newPage();
console.log('Fetching contents ...');
const URL = `http://${FRONTEND_ENDPOINT}/Invoice/${invoiceData.id}`;
await page.goto(URL, {
waitUntil: ['networkidle0']
});
await page.content();
const bodyHandle = await page.$('body');
await page.evaluate(body => body.innerHTML, bodyHandle);
await bodyHandle.dispose();
console.log('Saving pdf file ...');
await page.emulateMedia('screen');
await page.pdf({
path: path.join(__dirname, '../tmp/page1.pdf'),
format: 'A4',
printBackground: true
});
await browser.close();
我基本上是在抓取一个页面,获取其HTML内容并将其转换为PDF
这些是我的日志:
您的实例是否有足够的RAM?我尝试了以下实例类型:“t2.micro”、“t2.small”、“m4.large”、“m4.2xlarge”、“c4.large”、“i2.xlarge”、“i2.8xlarge”。我不认为是拉姆。我目前正在测试,没有在集群内运行它,看看它是否有效。这是有道理的。你能试试极端的吗?删除
获取内容
日志后的所有内容,将该行和新建页面
行包装在try
/catch
中,然后查看是否捕获到任何错误。当然,我已将所有内容包装在try/catch中。这是主要问题,实际上它不会触发任何错误。它只是停止记录。我在没有集群的情况下运行它,它运行得非常好。问题是,当我在集群中使用应用程序负载平衡器运行它时,这真的很奇怪,听起来问题可能出在AWS方面,但不幸的是,我真的不知道。对不起,我帮不上忙了!