Serverless Custom (Container) Runtime,前端开发工程学习

Properties:

Description: ‘helloworld’

custom-runtime-ts: # 函数名称

Type: ‘Aliyun::Serverless::Function’

Properties:

Handler: index.handler # Handler 在此时没有实质意义,填写任意的一个满足函数计算 Handler 字符集约束的字符串即可, 例如 index.handler

Runtime: custom # custom 代表自定义运行时

MemorySize: 512

CodeUri: ‘./’

4.部署、调用测试、完成

(1)使用 fun deploy -y 命令将我们的自定义运行时和业务逻辑代码所有资源部署到阿里云。

(2)使用命令调用部署函数,验证

$ fun invoke -e “hello,my custom runtime”

看到成功输出,就代表我们的 Custom Runtime 大功告成了!它可以直接运行我们写的 TS 代码了。

实现 Custom Container Runtime


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)使用阿里云容器镜像服务创建命名空间和镜像仓库 (https://cr.console.aliyun.com/) 存放我们的自定义镜像

接下来,先编写 Dockerfile,再构建包含我们 Node 指定版本运行环境和应用代码的镜像,最后上传到自己的镜像仓库。

(有需要的同学可以先看下这篇文章如何把一个 Node.js web 应用程序给 Docker 化 (https://nodejs.org/zh-cn/docs/guides/nodejs-docker-webapp/) )

(1) 编写 Dockerfile:

# 基于基础镜像 node:16.1.0-alpine3.11 构建我们自己的镜像

FROM node:16.1.0-alpine3.11

# 设置容器工作目录

WORKDIR /usr/src/app

# 将 package.json 和 package-lock.json 都拷贝到工作目录

COPY package*.json ./

# 安装依赖

RUN npm install

# 将当前目录下的所有文件拷贝到容器工作目录中

COPY . .

# 暴露容器 8080 端口

EXPOSE 8080

# 在容器中启动应用程序

ENTRYPOINT [ “node”, “server.js” ]

(2)安装启动 Docker,登录阿里云镜像服务,构建并上传:

# 登录

$ sudo docker login --username=xxx registry.cn-hangzhou.aliyuncs.com

登录成功后,先构建 Docker 镜像:

# 指定 ACR 镜像地址:其中 my_serverless 为你自己的容器命名空间;nodejs 为你自己的镜像仓库名称;v16.1.0 为镜像版本号

$ export IMAGE_NAME=“registry.cnhangzhou.aliyuncs.com/my_serverless/nodejs:v16.1.0”

# 构建镜像

# -t 给镜像取名字打标签,通常 name:tag 或者 name 格式

  d o c k e r   b u i l d   − t    docker build -t   docker build t IMAGE_NAME .

再启动容器,本地打开浏览器 http://localhost:9000/ 看是否可以正常响应,来验证我们的自定义镜像是否可以运行成功:

# 启动容器:将容器的 9000 端口映射到主机的 9000 端口$ docker run -p 9000:9000 -d $IMAGE_NAME

验证通过后,最后上传镜像:

# 上传镜像

  d o c k e r   p u s h    docker push   docker push IMAGE_NAME

上传成功后,可以在阿里云镜像服务中看到我们的镜像。后面就可以使用它啦!

3.定义 template.yaml

创建一个 template.yaml文件如下:

ROSTemplateFormatVersion: ‘2015-09-01’

Transform: ‘Aliyun::Serverless-2018-04-03’

Resources:

CustomContainerRuntime: # 服务名称

Type: ‘Aliyun::Serverless::Service’

Properties:

Policies:

- AliyunContainerRegistryReadOnlyAccess

InternetAccess: true

nodejs-express-http: # 函数名称

Type: ‘Aliyun::Serverless::Function’

Properties:

Description: ‘HTTP function powered by nodejs express’

Runtime: custom-container # 表示自定义容器

Timeout: 60

CAPort: 9000 # 注意!这里Custom Container Runtime使用的监听端口一定要和HTTP Server监听的端口保持一致,否则会出现错误

Handler: not-used

MemorySize: 1024

CodeUri: ./   # Root directory for the function or the Dockerfile path

CustomContainerConfig: # 容器镜像配置

# Sample image value: registry-vpc.cn-shenzhen.aliyuncs.com/fc-demo/nodejs-express:v0.1  使用同地域的VPC镜像地址加速

Image: ‘registry.cn-hangzhou.aliyuncs.com/my_serverless/nodejs:v16.1.0’

Command: ‘[ “node”]’

Args: ‘[“server.js”]’

Events:

http-trigger-test:

Type: HTTP

Properties:

AuthType: ANONYMOUS

Methods: [‘GET’, ‘POST’, ‘PUT’]

4.部署测试

# 使用命令部署到 FC

$ fun deploy -y

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

最后

中年危机是真实存在的,即便有技术傍身,还是难免对自己的生存能力产生质疑和焦虑,这些年职业发展,一直在寻求消除焦虑的依靠。

  • 技术要深入到什么程度?

  • 做久了技术总要转型管理?

  • 我能做什么,我想做什么?

  • 一技之长,就是深耕你的专业技能,你的专业技术。(重点)

  • 独立做事,当你的一技之长达到一定深度的时候,需要开始思考如何独立做事。(创业)

  • 拥有事业,选择一份使命,带领团队实现它。(创业)

一技之长分五个层次

  • 栈内技术 - 是指你的前端专业领域技术

  • 栈外技术 - 是指栈内技术的上下游,领域外的相关专业知识

  • 工程经验 - 是建设专业技术体系的“解决方案”

  • 带人做事 - 是对团队协作能力的要求

  • 业界发声 - 工作经验总结对外分享,与他人交流

永远不要放弃一技之长,它值得你长期信仰持有

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

主要内容包括html,css,html5,css3,JavaScript,正则表达式,函数,BOM,DOM,jQuery,AJAX,vue 等等。


深度的时候,需要开始思考如何独立做事。(创业)

  • 拥有事业,选择一份使命,带领团队实现它。(创业)

一技之长分五个层次

  • 栈内技术 - 是指你的前端专业领域技术

  • 栈外技术 - 是指栈内技术的上下游,领域外的相关专业知识

  • 工程经验 - 是建设专业技术体系的“解决方案”

  • 带人做事 - 是对团队协作能力的要求

  • 业界发声 - 工作经验总结对外分享,与他人交流

永远不要放弃一技之长,它值得你长期信仰持有

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

主要内容包括html,css,html5,css3,JavaScript,正则表达式,函数,BOM,DOM,jQuery,AJAX,vue 等等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值