As camadas públicas oficiais do Function Compute (FC) fornecem runtimes pré-configurados e dependências comuns para linguagens de programação populares. Anexe uma camada à sua função em vez de empacotar as dependências no pacote de código. Diferentemente das camadas personalizadas, as camadas públicas oficiais dispensam configuração de ambiente, pois os runtimes e as bibliotecas já vêm pré-instalados.
Vantagens das camadas públicas oficiais:
Pacotes de implantação menores: mantenha as dependências fora do arquivo de código.
Nenhuma configuração de ambiente: runtimes e bibliotecas padrão já estão pré-instalados.
Reutilização entre funções: anexe a mesma camada a qualquer função da sua conta.
Atualizações independentes: atualize o código da função sem alterar as dependências.
Para obter as versões mais recentes das camadas e instruções de uso, consulte awesome-layers.
Exemplo 1: Capturar capturas de tela de páginas web com Node.js 16 e Puppeteer
O Puppeteer automatiza tarefas de navegador por meio do Chrome ou Chromium, como captura de telas, geração de PDFs, envio de formulários, execução de testes de UI e simulação de entrada de teclado. Ele opera como um navegador headless no Node.js.
Este exemplo cria uma função que captura uma imagem de página inteira de qualquer URL e retorna o arquivo como PNG.
Steps overview: Crie uma função de evento → Adicione o código da função → Anexe a camada pública do Puppeteer → Teste a função.
Etapa 1: Criar uma função de evento
Na página Create Function, defina os parâmetros abaixo e mantenha os valores padrão para os demais campos. Para mais detalhes, consulte Create an event function.
|
Parâmetro |
Valor |
|
Function type |
Event Function |
|
Runtime |
Node.js 16 |
|
Memory Capacity |
1024 MB |
Etapa 2: Adicionar o código da função
Na página de detalhes da função, clique na aba Code, substitua o conteúdo de index.js pelo código a seguir e clique em Deploy.
const fs = require('fs');
const puppeteer = require('puppeteer');
function autoScroll(page) {
return page.evaluate(() => {
return new Promise((resolve, reject) => {
var totalHeight = 0;
var distance = 100;
var timer = setInterval(() => {
var scrollHeight = document.body.scrollHeight;
window.scrollBy(0, distance);
totalHeight += distance;
if (totalHeight >= scrollHeight) {
clearInterval(timer);
resolve();
}
}, 100);
})
});
}
exports.handler = async (event, context, callback) => {
console.log('Node version is: ' + process.version);
try {
const browser = await puppeteer.launch({
headless: true,
args: [
'--disable-gpu',
'--disable-dev-shm-usage',
'--disable-setuid-sandbox',
'--no-first-run',
'--no-zygote',
'--no-sandbox'
]
});
// 1. Read the target URL from the query string; fall back to the Serverless Devs homepage
let url = 'https://www.serverless-devs.com';
if (event.queryStringParameters && event.queryStringParameters.url) {
url = event.queryStringParameters.url;
}
if (!url.startsWith('https://') && !url.startsWith('http://')) {
url = 'http://' + url;
}
const page = await browser.newPage();
await page.emulateTimezone('Asia/Shanghai');
await page.goto(url, { waitUntil: 'networkidle2' });
await page.setViewport({ width: 1200, height: 800 });
// 2. Scroll the full page before taking the screenshot
await autoScroll(page);
// 3. Save a full-page PNG screenshot to /tmp/example
let path = '/tmp/example';
let contentType = 'image/png';
await page.screenshot({ path: path, fullPage: true, type: 'png' });
await browser.close();
const screenshot = fs.readFileSync(path);
// 4. Return the screenshot as a base64-encoded HTTP response body
const response = {
statusCode: 200,
headers: {
'Content-Type': contentType
},
body: screenshot.toString('base64'),
isBase64Encoded: true
};
callback(null, response);
} catch (err) {
const errorResponse = {
statusCode: 500,
headers: {
'Content-Type': 'text/plain'
},
body: err.message
};
callback(null, errorResponse);
}
};
Etapa 3: Anexar a camada pública do Puppeteer
Anexe a camada pública oficial Puppeteer17x à sua função. Para instruções passo a passo, consulte Configure common layers in the Function Compute console.

Etapa 4: Testar a função
Crie um gatilho http. Na coluna Configurations do gatilho, copie a URL do Internet Endpoint e cole-a em um navegador. Para instruções, consulte Create a trigger.

Uma captura de tela PNG de página inteira do site Serverless Devs é gerada e baixada automaticamente para sua máquina local.
Exemplo 2: Executar um runtime personalizado .NET 6 com camadas públicas
Este exemplo demonstra como usar uma camada pública oficial para executar uma função web .NET 6 sem incluir o runtime .NET no pacote de código.
Steps overview: Crie uma função web → Teste a função.
Etapa 1: Criar uma função web
Na página Create Function, configure os parâmetros conforme mostrado abaixo e mantenha os valores padrão para os demais campos. Para mais detalhes, consulte Create a web function.

Após criar a função, abra o arquivo de exemplo Program.cs no WebIDE:

O código de exemplo define quatro comportamentos principais:
① O servidor escuta em
0.0.0.0:9000. Serviços de runtime personalizado devem escutar em0.0.0.0:CAPortou*:CAPort, e não em127.0.0.1oulocalhost. Para mais detalhes, consulte Principles.② A rota
/retorna a string"Hello World! ".③ A rota
/invokegerencia as invocações da função. Para mais detalhes, consulte Web functions.④ A rota
/initializemapeia para o hook de ciclo de vida Initializer, executado uma vez durante a inicialização da instância. Para mais detalhes, consulte Lifecycle hooks for function instances.
Etapa 2: Testar a função
Testar a rota raiz
Na coluna Configurations do gatilho, copie a URL do Internet Endpoint e cole-a diretamente em um navegador (sem sufixo de caminho). A resposta será baixada automaticamente para sua máquina local.

Testar as rotas invoke e initialize
Adicione /invoke ou /initialize ao endpoint público e envie uma requisição POST:
curl -XPOST <public-endpoint>/invoke
curl -XPOST <public-endpoint>/initialize
A figura a seguir mostra o resultado da execução.
