开发事件函数示例 本章介绍函数工作流的开发事件函数的示例。 概述 使用自定义镜像开发事件函数时,用户需要在镜像中实现一个http server,并监听8000端口接收请求。其中,请求路径/init 默认为函数初始化入口,请根据需要实现该接口。请求路径/invoke为函数执行入口,触发器事件转到该接口处理。 步骤一:准备环境 本章节所有操作均默认具有操作权限,请确保您登录的用户已有“FunctionGraph Administrator”权限,即FunctionGraph服务管理员权限。 步骤二:制作镜像 以在linux x86 64位系统上制作镜像为例。 1. 创建一个空文件夹 mkdir customcontainereventexample && cd customcontainerevnetexample 2. 以Nodejs语言为例,实现一个Http Server,处理函数初始化init请求和函数调用invoke请求并响应。 创建一个main.js文件,引入express框架,实现Method为POST和Path为/invoke的函数执行入口,实现Method为POST和Path为/init的函数初始化入口。 const express require('express'); const PORT 8000; const app express(); app.use(express.json()); app.post('/init', (req, res) > { console.log('receive', req.body); res.send('Hello initn'); }); app.post('/invoke', (req, res) > { console.log('receive', req.body); res.send('Hello invoken'); }); app.listen(PORT, () > { console.log(Listening on }); 3. 创建一个package.json文件,此文件用于向npm提供信息,使其能够识别项目以及处理项目的依赖关系。 { "name": "customcontainereventexample", "version": "1.0.0", "description": "An example of a custom container event function", "main": "main.js", "scripts": {}, "keywords": [], "author": "", "license": "ISC", "dependencies": { "express": "^4.17.1" } } name:值为项目名。 version:值为项目版本。 main:列举文件为库的主入口。 dependencies:列出npm上可用的项目的所有依赖项。 4. 创建Dockerfile文件 FROM node:12.10.0 ENV HOME/home/customcontainer GROUPID1003 GROUPNAMEcustomcontainer USERID1003 USERNAMEcustomcontainer RUN mkdir m 550 ${HOME} && groupadd g ${GROUPID} ${GROUPNAME} && useradd u ${USERID} g ${GROUPID} ${USERNAME} COPY chown${USERID}:${GROUPID} main.js ${HOME} COPY chown${USERID}:${GROUPID} package.json ${HOME} RUN cd ${HOME} && npm install RUN chown R ${USERID}:${GROUPID} ${HOME} RUN find ${HOME} type d xargs chmod 500 && find ${HOME} type f xargs chmod 500 USER ${USERNAME} WORKDIR ${HOME} EXPOSE 8000 ENTRYPOINT ["node", "main.js"] FROM:指定基础镜像为node:12.10.0,基础镜像必须设置,值可修改。 ENV:设置环境变量,设置HOME环境变量为/home/customcontainer,设置GROUPNAME和USERNAME为customcontainer,USERID和GROUPID为1003,这些环境变量必须设置,值可修改。 RUN:格式为RUN ,例如RUN mkdir m 550 {HOME}表示构建容器时创建{USERNAME}用户的home目录。 USER:切换${USERNAME}用户。 WORKDIR:切换工作目录到${USERNAME}用户的home目录下。 COPY:将main.js和package.json拷贝到容器的${USERNAME}用户的home目录下。 EXPOSE:暴露容器的8000端口,请勿修改。 ENTRYPOINT:使用node /home/tester/main.js命令启动容器。 说明 1. 可以使用任意基础镜像。 2. 在云上环境会默认使用uid 1003,gid 1003 启动容器。uid、gid可以在函数页面的设置 > 常规设置 >容器镜像覆盖板块中修改,但不可以是root或其他保留id。 5.构建镜像 指定镜像的名称为customcontainereventexample,版本为latest,“.”指定Dockerfile所在目录,镜像构建命令将该路径下所有的内容打包给容器引擎帮助构建镜像。 docker build t customcontainereventexample:latest .