Serverless Custom (Container) Runtime(1)

TS 的运行环境问题可以用 Custom Runtime 解决,但是 Node 某些版本平台不支持的问题,就不能用同样的办法了。因为 Node 是全局安装的,依赖系统环境。

FC 平台已经为我们想好了此类问题的解决办法,为我们提供了 Custom Container Runtime(自定义容器运行环境)的能力。FaaS 平台有这种能力,是因为它的底层实现原理是 Docker 容器,所以它通过运用容器技术,把我们的应用代码和运行环境打包为 Docker 镜像,保持环境一致性。实现一次构建,到处运行。

工作原理

Custom Container Runtime 工作原理与 Custom Runtime (https://help.aliyun.com/document_detail/132044.htm#Task-2259898) 基本相同:

  • 函数计算系统初始化执行环境实例前会扮演该函数的服务角色,获得临时用户名和密码并拉取镜像

  • 拉取成功后根据指定的启动命令 Command、参数 Args 及 CAPort 端口(默认 9000)启动自定义的 HTTP Server。

  • 然后这个 HTTP Server 接管了函数计算系统的所有请求,包括来自事件函数调用及 HTTP 函数调用。

下面我们自定义一个 Node V16.1.0 版本的容器运行环境。

操作步骤
1.自定义 HTTP Server

这一步和 Custom Runtime 相同,使用 Node.js Express 自定义一个 Http 服务 server.js,GET 和 POST 方法分别路由至不同的 Handler:

// server.js 文件

‘use strict’;

const express = require(‘express’);

// Constants

const PORT = 9000;

const HOST = ‘0.0.0.0’;

// HTTP 函数调用

const app = express();

app.get(‘/*’, (req, res) => {

res.send(Hello FunctionCompute, http function, runtime is : Node ${process.version}\n);

});

// 事件函数调用

app.post(‘/invoke’, (req, res) => {

res.send(Hello FunctionCompute, event function,runtime is : Node ${process.version}\n);

});

// 启动 HTTP 服务并监听 9000 端口

var server = app.listen(PORT, HOST);

console.log(Running on http://${HOST}:${PORT});

server.timeout = 0; // never timeout

server.keepAliveTimeout = 0; // keepalive, never timeout

启动服务,本地测试一下:

# 启动 HTTP 服务

$ node server.js

# 新开一个终端,通过 curl 命令测试

$ curl http://0.0.0.0:9000

Hello FunctionCompute, http GET, this runtime is : Node v11.5.0     # 这是我本地的 Node 版本,后面在自定义容器中会输出 v16.1.0

验证通过。

2.构建镜像并上传

同样的,需要先做两个准备工作:

  • 1)安装启动 Docker

  • 2)使用阿里云容器镜像服务创建命名空间和镜像仓库 (

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值