Las capas públicas oficiales de Function Compute (FC) incluyen entornos de ejecución preconfigurados y dependencias comunes para los lenguajes de programación más populares. Asocie una capa a su función en lugar de empaquetar las dependencias dentro del archivo de código. A diferencia de las capas personalizadas, las capas públicas oficiales no requieren configurar el entorno, ya que los entornos de ejecución y las bibliotecas vienen preinstalados.
Razones para usar capas públicas oficiales:
Paquetes de despliegue más pequeños. Mantenga las dependencias fuera del archivo de código.
Cero configuración de entorno. Los entornos de ejecución y las bibliotecas estándar vienen preinstalados.
Reutilización entre funciones. Asocie la misma capa a cualquier función de su cuenta.
Actualizaciones independientes. Actualice el código de la función sin modificar sus dependencias.
Para consultar las versiones más recientes de las capas y sus instrucciones de uso, consulte awesome-layers.
Ejemplo 1: capturar imágenes de páginas web con Node.js 16 y Puppeteer
Puppeteer automatiza tareas del navegador mediante Chrome o Chromium. Entre estas tareas se encuentran la captura de imágenes, la generación de archivos PDF, el envío de formularios, la ejecución de pruebas de interfaz y la simulación de entrada por teclado. Se ejecuta como un navegador headless sobre Node.js.
En este ejemplo se crea una función que toma una imagen de página completa de cualquier URL y devuelve la imagen en formato PNG.
Steps overview: Cree una función de evento → Agregue el código de la función → Asocie la capa pública de Puppeteer → Pruebe la función.
Paso 1: cree una función de evento
En la página Create Function, establezca los parámetros a continuación y conserve los valores predeterminados para el resto. Para obtener más información, consulte Create an event function.
|
Parámetro |
Valor |
|
Function type |
Event Function |
|
Runtime |
Node.js 16 |
|
Memory Capacity |
1024 MB |
Paso 2: agregue el código de la función
En la página de detalles de la función, haga clic en la pestaña Code. Reemplace el contenido de index.js con el siguiente código y, a continuación, haga clic en 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);
}
};
Paso 3: asocie la capa pública de Puppeteer
Asocie la capa pública oficial Puppeteer17x a su función. Para ver las instrucciones detalladas, consulte Configure common layers in the Function Compute console.

Paso 4: pruebe la función
Cree un disparador HTTP. En la columna Configurations del disparador, copie la URL de Internet Endpoint y péguela en un navegador. Para ver las instrucciones, consulte Create a trigger.

Se captura una imagen PNG de página completa del sitio web de Serverless Devs y se descarga automáticamente en su computadora local.
Ejemplo 2: ejecutar un entorno de ejecución personalizado de .NET 6 con capas públicas
Este ejemplo muestra cómo usar una capa pública oficial para ejecutar una función web de .NET 6 sin incluir el entorno de ejecución de .NET en el archivo de código.
Steps overview: Cree una función web → Pruebe la función.
Paso 1: cree una función web
En la página Create Function, configure los parámetros como se muestra a continuación y conserve los valores predeterminados para el resto. Para obtener más información, consulte Create a web function.

Una vez creada la función, abra el archivo de ejemplo Program.cs en WebIDE:

El código de ejemplo define cuatro comportamientos clave:
① El servidor escucha en
0.0.0.0:9000. Los servicios de entornos de ejecución personalizados deben escuchar en0.0.0.0:CAPorto*:CAPort, y no en127.0.0.1ni enlocalhost. Para obtener más información, consulte Principles.② La ruta
/devuelve la cadena"Hello World! ".③ La ruta
/invokegestiona las invocaciones de la función. Para obtener más información, consulte Web functions.④ La ruta
/initializese asigna al hook de ciclo de vida Initializer, que se ejecuta una sola vez durante el inicio de la instancia. Para obtener más información, consulte Lifecycle hooks for function instances.
Paso 2: pruebe la función
Probar la ruta raíz
En la columna Configurations del disparador, copie la URL de Internet Endpoint y péguela directamente en un navegador, sin agregar ningún sufijo de ruta. La respuesta se descarga automáticamente en su computadora local.

Probar las rutas invoke e initialize
Agregue /invoke o /initialize al endpoint público y envíe una solicitud POST:
curl -XPOST <public-endpoint>/invoke
curl -XPOST <public-endpoint>/initialize
La siguiente figura muestra el resultado de la ejecución.
