Todos os produtos
Search
Central de documentação

Function Compute:Exemplos de uso de camadas públicas

Última atualização: Sep 06, 2026

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.

image

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.

image

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.

image

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

program.cs

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 em 0.0.0.0:CAPort ou *:CAPort, e não em 127.0.0.1 ou localhost. Para mais detalhes, consulte Principles.

  • A rota / retorna a string "Hello World! ".

  • A rota /invoke gerencia as invocações da função. Para mais detalhes, consulte Web functions.

  • A rota /initialize mapeia 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.

image

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.

image