首页 > 其他分享 >ServerLess学习笔记-搭建FN示例

ServerLess学习笔记-搭建FN示例

时间:2023-10-23 10:11:37浏览次数:48  
标签:ServerLess function 示例 -- 0.0 demo1 FN root fn

ServerLess学习笔记-搭建FnProject示例

初始化函数目录

# 初始化 fn_demo1
[root@VM-24-9-centos serverless]# fn init --runtime python fn_demo1
Creating function at: ./fn_demo1
Unable to get latest FDK version, using default
Function boilerplate generated.
func.yaml created.

# 初始化 fn_demo2
[root@VM-24-9-centos serverless]# fn init --runtime python fn_demo2
Creating function at: ./fn_demo2
Function boilerplate generated.
func.yaml created.

创建应用

[root@VM-24-9-centos serverless]# fn create app fn_app
Successfully created app:  fn_app

修改函数代码

下面为函数fn_demo1的修改,fn_demo2 参考fn_demo1进行修改

[root@VM-24-9-centos serverless]# cd fn_demo1/
[root@VM-24-9-centos fn_demo1]# ls
func.py  func.yaml  requirements.txt
[root@VM-24-9-centos fn_demo1]# ll
total 12
-rw-r--r-- 1 root root 576 Oct 20 17:09 func.py
-rw-r--r-- 1 root root 207 Oct 20 17:10 func.yaml
-rw-r--r-- 1 root root   3 Oct 20 17:10 requirements.txt

# 修改func.py
[root@VM-24-9-centos fn_demo1]# vi func.py 
import io
import json
import logging

from fdk import response


def handler(ctx, data: io.BytesIO = None):
    name = "fn_demo1" # 将此处的World修改为fn_demo1方便测试调用后的展示结果
    try:
        body = json.loads(data.getvalue())
        name = body.get("name")
    except (Exception, ValueError) as ex:
        logging.getLogger().info('error parsing json payload: ' + str(ex))

    logging.getLogger().info("Inside Python Hello World function")
    return response.Response(
        ctx, response_data=json.dumps(
            {"message": "Hello {0}".format(name)}),
        headers={"Content-Type": "application/json"}

func.yaml配置文件字段详解

schema_version: 20180708  #标识此函数文件的架构版本
name: fn_demo1  #函数的名称。与目录名称匹配
version: 0.0.1 #版本号:从 0.0.1 自动开始
runtime: python #运行时设置的语言环境
entrypoint: /python/bin/fdk /function/func.py handler #调用函数时要调用的可执行文件的名称
memory: 256 #函数的最大内存大小,单位:MB

部署应用/函数

将函数fn_demo1fn_demo2分别与fn_app关联并部署,部署fn_demo2fn_demo1步骤一致

# 进入函数目录
[root@VM-24-9-centos serverless]# cd fn_demo1/
# 部署函数
[root@VM-24-9-centos fn_demo1]# fn --verbose deploy --app fn_app --local
Deploying fn_demo1 to app: fn_app
Bumped to version 0.0.4
Using Container engine docker
Building image fn_demo1:0.0.4 
Dockerfile content
-----------------------------------
FROM fnproject/python:3.9-dev as build-stage
WORKDIR /function
ADD requirements.txt /function/

			RUN pip3 install --target /python/  --no-cache --no-cache-dir -r requirements.txt &&\
			    rm -fr ~/.cache/pip /tmp* requirements.txt func.yaml Dockerfile .venv &&\
			    chmod -R o+r /python
ADD . /function/
RUN rm -fr /function/.pip_cache
FROM fnproject/python:3.9
WORKDIR /function
COPY --from=build-stage /python /python
COPY --from=build-stage /function /function
RUN chmod -R o+r /function
ENV PYTHONPATH=/function:/python
ENTRYPOINT ["/python/bin/fdk", "/function/func.py", "handler"]
-----------------------------------
FN_REGISTRY:  FN_REGISTRY is not set.
Current Context:  default
[+] Building 120.6s (17/17) FINISHED                                                                                                                     
 => [internal] load build definition from Dockerfile2218814693                                                                                      0.0s
 => => transferring dockerfile: 643B                                                                                                                0.0s
 => [internal] load .dockerignore                                                                                                                   0.0s
 => => transferring context: 2B                                                                                                                     0.0s
 => [internal] load metadata for docker.io/fnproject/python:3.9                                                                                     0.7s
 => [internal] load metadata for docker.io/fnproject/python:3.9-dev                                                                                 0.8s
 => [build-stage 1/6] FROM docker.io/fnproject/python:3.9-dev@sha256:2a257fac48519801b646c7217b151049bfaa29e75c0d8cdd9469e6db86a45adc               0.0s
 => [stage-1 1/5] FROM docker.io/fnproject/python:3.9@sha256:8af5441307d08e86b79b46675050cb4b98b251bd980b32fc58764702710399ab                       0.0s
 => [internal] load build context                                                                                                                   0.0s
 => => transferring context: 952B                                                                                                                   0.0s
 => CACHED [build-stage 2/6] WORKDIR /function                                                                                                      0.0s
 => CACHED [build-stage 3/6] ADD requirements.txt /function/                                                                                        0.0s
 => [build-stage 4/6] RUN pip3 install --target /python/  --no-cache --no-cache-dir -r requirements.txt &&       rm -fr ~/.cache/pip /tmp* requi  118.8s
 => [build-stage 5/6] ADD . /function/                                                                                                              0.0s
 => [build-stage 6/6] RUN rm -fr /function/.pip_cache                                                                                               0.2s 
 => CACHED [stage-1 2/5] WORKDIR /function                                                                                                          0.0s 
 => [stage-1 3/5] COPY --from=build-stage /python /python                                                                                           0.1s 
 => [stage-1 4/5] COPY --from=build-stage /function /function                                                                                       0.1s 
 => [stage-1 5/5] RUN chmod -R o+r /function                                                                                                        0.2s 
 => exporting to image                                                                                                                              0.1s
 => => exporting layers                                                                                                                             0.1s
 => => writing image sha256:5700ac5e7fc00f10b9c812292283184c25be858c8cf537e9b15d1d3dec80ef96                                                        0.0s
 => => naming to docker.io/library/fn_demo1:0.0.1                                                                                                   0.0s

Updating function fn_demo1 using image fn_demo1:0.0.1...

查看生成的服务镜像

[root@VM-24-9-centos fn_demo2]# docker images
REPOSITORY                   TAG       IMAGE ID       CREATED          SIZE
fn_demo2                     0.0.2     82a9bc7b0f7f   59 seconds ago   174MB
fn_demo1                     0.0.4     5700ac5e7fc0   2 minutes ago    174MB

获取函数信息

查看fn_demo1的信息

[root@VM-24-9-centos serverless]# ./fn inspect function fn_app fn_demo1
{
	"annotations": {
		"fnproject.io/fn/invokeEndpoint": "http://localhost:8080/invoke/01HD66V4V6NG8G00RZJ000000H" # 函数的调用地址
	},
	"app_id": "01HD65NGGGNG8G00RZJ000000G",
	"created_at": "2023-10-20T09:32:11.494Z",
	"id": "01HD66V4V6NG8G00RZJ000000H",
	"idle_timeout": 30,
	"image": "fn_demo1:0.0.4",
	"memory": 256,
	"name": "fn_demo1",
	"timeout": 30,
	"updated_at": "2023-10-20T09:32:11.494Z"
}

调用函数

通过fn调用函数

[root@VM-24-9-centos serverless]# fn invoke fn_app fn_demo1
{"message": "Hello fn_demo1"}
[root@VM-24-9-centos serverless]# fn invoke fn_app fn_demo2
{"message": "Hello fn_demo2"}

通过Curl调用函数

[root@VM-24-9-centos serverless]# curl -X "POST" -H "Content-Type: application/json" -d '{"name":"fn_demo1"}' http://localhost:8080/invoke/01HD66V4V6NG8G00RZJ000000H
{"message": "Hello fn_demo1"}
[root@VM-24-9-centos serverless]# curl -X "POST" -H "Content-Type: application/json" -d '{"name":"fn_demo2"}' http://localhost:8080/invoke/01HD66XF41NG8G00RZJ000000J
{"message": "Hello fn_demo2"}

标签:ServerLess,function,示例,--,0.0,demo1,FN,root,fn
From: https://www.cnblogs.com/jruing/p/17781785.html

相关文章

  • ServerLess学习笔记-Fnproject常用命令
    ServerLess学习笔记-FnProject常用命令启动/停止#启动fnstart#停止fnstop创建[root@VM-24-9-centosserverless]#fncreateMANAGEMENTCOMMANDfncreate-CreateanewobjectUSAGEfn[globaloptions]create[command......
  • 一个简单的QQ空间下雪效果的Java代码示例
    ​  以下是一个简单的QQ空间下雪效果的Java代码示例​编辑```javaimportjava.awt.*;importjavax.swing.*;publicclassSnowFallextendsJFrame{  privateintwidth,height;  privateintsnowCount;  privateint[]snowXPositions,snowYPositio......
  • 什么是线程池,线程池的状态,线程池的用法示例
    线程池(ThreadPool)是一种用于管理和重复使用线程的并发编程机制。它是一种有效的方式来管理线程的生命周期、控制并发任务的执行,以及减少线程创建和销毁的开销。线程池在多线程应用程序中被广泛使用,因为它可以提高性能、资源利用率和响应速度。线程池通常包含以下主要组件:工作......
  • shell脚本示例
    目录1.编写脚本技巧2.脚本:color3.脚本:for循环嵌套4.脚本:检测网址联通性5.脚本:密钥分发6.生产脚本:TCP连接数监控-统计TCP11种状态连接数7.生产脚本:日志监控-检查日志刷新时间8.生产脚本-mq队列监控9.脚本:处理ftp文件10.脚本:数组案例11.whilereadline判断两个文件夹相......
  • 使用Pytorch Geometric 进行链接预测代码示例
    PyTorchGeometric(PyG)是构建图神经网络模型和实验各种图卷积的主要工具。在本文中我们将通过链接预测来对其进行介绍。链接预测答了一个问题:哪两个节点应该相互链接?我们将通过执行“转换分割”,为建模准备数据。为批处理准备专用的图数据加载器。在TorchGeometric中构建一个......
  • 以下是一个简单的HTML代码示例,演示如何实现分身份登录(用户登录和管理员登录)
    <!DOCTYPEhtml><html><head><title>分身份登录</title></head><body><h2>用户登录</h2><formaction="user_login.php"method="post"><labelfor="user_username"......
  • 一个更复杂的 PHP 代码示例,我将展示一个购物车系统的基本实现,它包括商品类、购物车类
    一个更复杂的PHP代码示例,我将展示一个购物车系统的基本实现,它包括商品类、购物车类和一些基本的操作方法。<?php//定义商品类classProduct{private$name;private$price;publicfunction__construct($name,$price){$this->name=$name;$this->pri......
  • PHP 代码示例
    PHP代码示例,我将展示一个购物车系统的基本实现,它包括商品类、购物车类和一些基本的操作方法。<?php//定义商品类classProduct{private$name;private$price;publicfunction__construct($name,$price){$this->name=$name;$this->price=$price;......
  • Decorator 装饰者模式简介与 C# 示例【结构型4】【设计模式来了_9】
    〇、简介1、什么是装饰者模式一句话解释:  通过继承统一的抽象类来新增操作,再在使用时通过链式添加到对象中,达到与原有设定无关联可灵活附加。装饰者模式是一种行为设计模式,它允许向一个现有的对象添加新的行为,同时又不改变其结构。装饰者模式的基本概念是,将一个对象包装在......
  • 【小白必看】使用Python爬取喜马拉雅音频并保存的示例代码
    前言本文介绍了如何使用Python中的requests库来获取音频文件并保存到本地。在这个例子中,我们使用了喜马拉雅平台上的一个API接口来获取音频ID和名称,并使用这些信息构造音频地址,然后通过发送HTTP请求将音频内容下载保存到本地。运行效果截图导入requests库importrequests......