Skip to content

Commit

Permalink
add retry for browser launch
Browse files Browse the repository at this point in the history
  • Loading branch information
tabiodun committed Jun 15, 2024
1 parent 1cac756 commit 6764e34
Showing 1 changed file with 38 additions and 12 deletions.
50 changes: 38 additions & 12 deletions packages/construct/awscdk/pdf-renderer/src/handler.lambda.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,21 +33,47 @@ const doRender = async (
return pdf
}

const launchBrowserWithRetry = async (
path: string,
retries = 3,
delay = 1000,
) => {
while (retries > 0) {
try {
const browser = await puppeteer.launch({
executablePath: path,
headless: chrome.headless,
args: chrome.args,
})
return browser
} catch (error) {
if (retries > 1) {
console.warn(
`Retrying to launch browser... ${retries - 1} retries left.`,
)
retries--
await new Promise((res) => setTimeout(res, delay))
} else {
throw error
}
}
}
}

export async function handler(event: APIGatewayEvent) {
console.log('Incoming event:', event)

const payload = await schema.parseAsync(JSON.parse(event.body!))
console.log('Received payload:', payload)
const path = await chrome.executablePath
console.log('Path is:', path)

const browser = await puppeteer.launch({
executablePath: path,
headless: chrome.headless,
args: chrome.args,
})

const path = await chrome.executablePath
console.log('Resolved Chromium path:', path)
let browser: Browser | undefined
try {
browser = await launchBrowserWithRetry(path || '/usr/bin/chromium-browser')
if (!browser) {
throw new Error('Failed to launch browser')
}
const pdf = await doRender(browser, payload)
return {
statusCode: 200,
Expand All @@ -63,15 +89,15 @@ export async function handler(event: APIGatewayEvent) {
console.error('Error rendering PDF:', e)
return {
statusCode: 500,
headers: {
'Content-Type': 'application/json',
},
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
error: e instanceof Error ? e.message : String(e),
}),
}
} finally {
console.log('Closing browser')
await browser.close()
if (browser) {
await browser.close()
}
}
}

0 comments on commit 6764e34

Please sign in to comment.