函数运行环境系统动态链接库版本太低?函数计算 fun 分忧解难

本文涉及的产品
简介:

场景介绍

用户问题

简要描述一下用户当时遇到的问题:

用户使用函数计算的 nodejs8 runtime,在本地自己的开发环境使用 npm install couchbase 安装了 couchbase 这个第三方库。couchbase 封装了 C 库,依赖系统底层动态链接库 libstdc++.so.6。因为用户自己的开发环境的操作系统内核比较新,所以本地安装、编译和调试都比较顺利。所以,最后按照函数计算的打包方式成功创建了 Function,但是执行 InvokeFunction 时,遇到了这样的错误:

"errorMessage": "/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /code/node_modules/couchbase/build/Release/couchbase_impl.node)",
    "errorType": "Error",
    "stackTrace": [
        "Error: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /code/node_modules/couchbase/build/Release/couchbase_impl.node)",
...

错误发生的原因如堆栈描述,即没有 CXXABI_1.3.9 这个版本,couchbase 2.6.5 版本已经修复了该问题,即使环境中没有CXXABI_1.3.9 这个版本也是可以使用的,可以直接使用 fun 工具直接安装该模块,但是需要确保 package.json 中 couchbase 版本在 2.6.5 以上即可。

下面我们就详细介绍一下利用 fun 工具安装 couchbase 模块的步骤。

代码项目搭建

前提:先按照 fun 的安装步骤安装 fun工具,并进行 fun config 配置。

在本地很快搭建了一个项目目录:

- test_code/
  - index.js
  - template.yml
  - Funfile
  

其中 index.js , template.yml 和 Funfile 的 内容分别为

# index.js
const couchbase = require('couchbase');

module.exports.handler = function(event, context, callback) {
    var cluster = new couchbase.Cluster('couchbase://127.0.0.1', {
        username: 'username',
        password: 'password',
      });
    var bucket = cluster.bucket('default');
    var coll = bucket.defaultCollection();
    coll.upsert('testdoc', {name:'Frank'}, (err, res) => {
        if (err) throw err;
       
        coll.get('testdoc', (err, res) => {
          if (err) throw err;
       
          console.log(res.value);
          // {name: Frank}
        });
      });
    callback(null, {
        hello: 'world'
    })
}


#template.yml 
ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
  fc: # service name
    Type: 'Aliyun::Serverless::Service'
    Properties:
      Description: 'fc test'
    helloworld: # function name
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Handler: index.handler
        Runtime: nodejs8
        CodeUri: './'
        Timeout: 60
 
       
#Funfile
RUNTIME nodejs8
RUN npm install couchbase         

执行 fun install 命令

$ fun install
using template: template.yml
start installing function dependencies without docker

building fc/helloworld
Funfile exist, Fun will use container to build forcely
Step 1/2 : FROM registry.cn-beijing.aliyuncs.com/aliyunfc/runtime-nodejs8:build-1.9.1
 ---> fff7345ce8a3
Step 2/2 : RUN npm install couchbase
 ---> Using cache
 ---> cdd1bba7c23e
sha256:cdd1bba7c23e162042da0df8c433674f1e7bfec8d49e133478dc06c9939bb891
Successfully built cdd1bba7c23e
Successfully tagged fun-cache-84cac7f3-5391-49a6-b108-b1ac7269ccf7:latest
copying function artifact to /Users/txd123/Desktop/nodejs

build function using image: fun-cache-84cac7f3-5391-49a6-b108-b1ac7269ccf7
running task flow NpmTaskFlow
running task: CopySource
running task: NpmInstall

Install Success


Tips for next step
======================
* Invoke Event Function: fun local invoke
* Invoke Http Function: fun local start
* Build Http Function: fun build
* Deploy Resources: fun deploy

发布上线

使用 fun deploy 发布上线,然后到控制台执行一下线上实际的运行效果:
image

总结

fun install 功能能够将代码和依赖文件分离开,独立安装系统依赖文件,而且 fun local 和 fun deply 都能够自动帮你设置第三方库的依赖引用路径,让您无需关心环境变量问题。

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
27天前
|
人工智能 关系型数据库 Serverless
Serverless 应用引擎常见问题之生成的函数镜像改为自定义的镜像如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
26 5
|
3月前
|
JSON 安全 Serverless
在使用阿里云函数计算(FC)服务时,您可以通过自定义域名来访问部署好的云函数
在使用阿里云函数计算(FC)服务时,您可以通过自定义域名来访问部署好的云函数【1月更文挑战第23天】【1月更文挑战第112篇】
222 7
|
27天前
|
人工智能 关系型数据库 Serverless
Serverless 应用引擎常见问题之API生成的函数镜像改为自定义的镜像如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
37 3
|
12天前
|
弹性计算 前端开发 Java
使用阿里云 mqtt serverless 版本超低成本快速实现 webscoket 长链接服务器
使用阿里云 MQTT Serverless 可轻松实现弹性伸缩的 WebSocket 服务,每日成本低至几元。适用于小程序消息推送的 MQTT P2P 模式。前端需注意安全,避免 AK 泄露,采用一机一密方案。后端通过调用 `RegisterDeviceCredential` API 发送消息。示例代码包括 JavaScript 前端连接和 Java 后端发送。
103 0
|
17天前
|
人工智能 弹性计算 Serverless
函数计算 3.0 版本升级
【4月更文挑战第2天】函数计算 3.0 版本升级
12 2
|
18天前
|
Linux 开发工具 Perl
Linux系统之fc命令的基本使用
Linux系统之fc命令的基本使用
27 2
Linux系统之fc命令的基本使用
|
27天前
|
监控 Serverless 对象存储
Serverless 应用引擎常见问题之代码和普通版本不一样如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
24 1
|
1月前
|
消息中间件 编解码 运维
阿里云 Serverless 异步任务处理系统在数据分析领域的应用
本文主要介绍异步任务处理系统中的数据分析,函数计算异步任务最佳实践-Kafka ETL,函数计算异步任务最佳实践-音视频处理等。
175296 348
|
3月前
|
存储 监控 Serverless
在处理阿里云函数计算3.0版本的函数时,如果遇到报错但没有日志信息的情况
在处理阿里云函数计算3.0版本的函数时,如果遇到报错但没有日志信息的情况【1月更文挑战第23天】【1月更文挑战第114篇】
63 5
|
2月前
|
人工智能 数据管理 Serverless
阿里云数据库走向Serverless与AI驱动的一站式数据平台具有重大意义和潜力
阿里云数据库走向Serverless与AI驱动的一站式数据平台具有重大意义和潜力
404 2

相关产品

  • 函数计算