赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 函数计算 FC 2.0
  4. 操作指南
  5. 函数管理
  6. 层管理
  7. 官方公共层使用示例

官方公共层使用示例

  • 层管理
  • 发布于 2025-04-16
  • 0 次阅读
文档编辑
文档编辑

本文介绍使用官方公共层的典型示例。

使用说明

关于官方公共层的最新版本和使用说明,请参见awesome-layers。

示例一:基于Node.js 16和Puppeteer实现网页截图示例程序

Puppeteer是一个Node.js库,提供高级的API并通过DevTools协议来控制Chrome(或Chromium)。通俗来讲,Puppeteer是一个headless Chrome浏览器,支持实现很多自动化流程,例如网页截图或PDF生成、表单的自动提交、UI自动化测试、键盘输入模拟等。

本示例使用Puppeteer完成一个网页截图示例程序。

  1. 选择使用内置运行时创建方式创建函数。

    具体操作,请参见创建函数。在创建函数页面,设置以下配置项,其余配置项保持默认值即可。

    • 请求处理程序类型选择处理HTTP请求。

    • 运行环境选择Node.js 16。

    • 内存规格选择1 GB。

  2. 在函数详情页面,单击函数代码页签,编辑index.js文件中的函数代码,然后单击部署代码。

    代码示例如下。

    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);
          })
      });
    }
    
    module.exports.handler = function (request, response, context) {
      console.log('Node version is: ' + process.version);
      (async () => {
        const browser = await puppeteer.launch({
          headless: true,
          args: [
            '--disable-gpu',
            '--disable-dev-shm-usage',
            '--disable-setuid-sandbox',
            '--no-first-run',
            '--no-zygote',
            '--no-sandbox'
          ]
        });
    
        let url = request.queries['url'];
    
        if (!url) {
          url = 'https://www.serverless-devs.com';
        }
    
        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
        });
        await autoScroll(page)
    
        let path = '/tmp/example';
        let contentType = 'image/png';
        await page.screenshot({ path: path, fullPage: true, type: 'png' });
        await browser.close();
    
        response.setStatusCode(200);
        response.setHeader('content-type', contentType);
        response.send(fs.readFileSync(path))
      })().catch(err => {
        response.setStatusCode(500);
        response.setHeader('content-type', 'text/plain');
    
        response.send(err.message);
      });
    };

    上述示例代码解析如下。首先解析query参数获取需要截图的URL地址(如果解析失败则默认使用Serverless Devs官网主页),然后使用Puppeteer对该网页进行截图,并保存到运行实例的/tmp/example文件夹中,最后将该路径作为HTTP请求的返回体直接返回。

  3. 为函数配置Puppeteer公共层。

    具体操作,请参见通过控制台配置官方公共层。选择官方公共层Puppeteer17x。puppeteer17x

    重要

    如果您使用的运行环境非Node.js 16,需添加环境变量。具体操作,请参见Nodejs-Puppeteer17x README。

  4. 在函数详情页面,单击触发器管理(URL)页签,在触发器配置信息列查看测试地址,然后单击该测试地址,下载配置脚本,执行脚本后可以在浏览器中使用该测试地址进行测试。

    test-URLdownload-script

    重要

    使用测试地址测试前,请单击该测试地址,然后在测试域名使用方式面板,下载适用您本地操作系统的配置脚本并执行脚本。

    测试结果如下所示,已成功将Serverless Devs官网进行截图。Web-screenshot-test-results

示例二:基于公共层快速实现.NET 6自定义运行时

  1. 选择使用自定义运行时创建方式创建函数。

    具体操作,请参见创建函数。在创建函数页面,设置以下配置项,其余配置项保持默认值即可。

    • 请求处理程序类型选择处理HTTP请求。

    • 运行环境选择.NET 6.0。

    创建完成后,您可以在Web IDE界面查看示例代码Program.cs。program.cs

    • ①:该示例监听了0.0.0.0的9000端口。Custom Runtime启动的服务一定要监听0.0.0.0:CAPort或*:CAPort端口,不能监听127.0.0.1或localhost。更多信息,请参见Custom Runtime基本原理。

    • ②:添加路由/,直接返回字符串"Hello World!"。

    • ③:添加路由/invoke,该路由为使用事件请求处理程序的路径。更多信息,请参见事件请求处理程序(Event Handler)。

    • ④:添加路由/initialize,该路由为函数初始化回调程序对应的路径。该回调程序的方法会在示例初始化时执行一次。更多信息,请参见函数实例生命周期回调。

  2. 测试函数。

    重要

    使用测试地址测试前,请单击该测试地址,然后在测试域名使用方式面板,下载适用您本地操作系统的配置脚本并执行脚本。

    1. 适用触发器管理(URL)页签中的测试地址进行测试。此时,不添加任何PATH信息。

      执行结果如下所示。result1

    2. 添加/invoke路径进行测试。该路由方法为POST,支持直接使用curl -XPOST命令测试。

      执行结果如下所示。result2

    3. 添加/initialize路径进行测试。

      执行结果如下所示。result3

      说明

      请先在函数配置页面的实例生命周期回调区域,配置Initializer 回调程序。初始化回调函数不需要主动调用,函数计算平台会在实例启动后自动调用该回调方法。

相关文章

创建自定义层 2025-04-16 14:22

层可以为您提供公共依赖库、运行时环境及函数扩展等发布与部署能力。您可以将函数依赖的公共库提炼到层或者使用函数计算官方公共层,以减少部署或更新函数时的代码包体积。本文介绍层的注意事项、各运行时使用层说明、如何构建层的ZIP包以及如何创建、删除自定义层。

在函数中配置自定义层 2025-04-16 14:22

本文介绍如何在函数中配置自定义层。 通过控制台配置

在函数中配置官方公共层 2025-04-16 14:22

函数计算提供了常用的公共层,您无需自定义层即可为您的函数配置层功能。本文介绍如何在函数中配置官方公共层。 函数计算支持

官方公共层使用示例 2025-04-16 14:22

本文介绍使用官方公共层的典型示例。 使用说明 关于官方公共层的最新版本和使用说明,请参见awesome-layers

如何基于Dockerfile构建层 2025-04-16 14:22

本文以Node.js安装Puppeteer依赖为例,介绍如何基于Dockerfile构建层。 背景信息 函数计算提供了多种构建层的方式,对于不包含动态链接库的依赖(例如纯Python库),可直接使用控制台

如何在Custom Runtime中引用层中的依赖 2025-04-16 14:22

Custom Runtime是自定义运行环境,内置了多种语言版本,比如Python、Node.js、Java和PHP等,这些语言的层打包的方法和原生Runtime是一致的。但是在Custom Runtime中,您需要将层依赖所在目录添加到运行时语言的依赖包搜索路径中。本文介绍Custom Runti

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号