[肥用云计算] Serverless安装第三方package并构建layer

发布于:2025-05-15 ⋅ 阅读:(26) ⋅ 点赞:(0)

前言

前面介绍的都没有进行额外的 package 安装的过程,所以本章就重点是 如何在 serverless 中安装第三方的 packag 和 如何去构建 layer 使得 package 可以复用。

下面是后续所有例子需求:

  1. 安装 emoji package,且运行

安装方式:package 安装在本地

s init start-fc3-python -d demo1
cd demo1
 
# 安装依赖
touch code/requirements.txt
echo "emoji==2.0.0" > code/requirements.txt
pip3 install -r code/requirements.txt -t ./code

emoji package 就会安装在 local 的 code 文件夹中

修改 code/index.py

# @code/index.py
from emoji import emojize

def handler(event, context):
    return emojize(":thumbs_up:")

部署代码

# 本地测试
s local invoke

# 部署到远端
s deploy

当然部署也是可以上传代码的方式,如下图,其效果是一样的。

结果:

结果满足预期,但是他会把 emoji package 和 index.py 一起上传了。所以从代码大小中得知,整体会比较大。

安装方式:构建 layer

s init start-fc3-python -d demo2
cd demo2
 
# 安装依赖
touch code/requirements.txt
echo "emoji==2.0.0" > code/requirements.txt

 

修改 code/index.py

# @code/index.py
from emoji import emojize

def handler(event, context):
    return emojize(":thumbs_up:")

关键代码来了,构建 layer,并且上传 layer。

s build --publish-layer

[2024-12-09 18:00:12][INFO][hello_world] You need to add a new configuration env configuration dependency in yaml to take effect. The configuration is as follows:
environmentVariables:
  PYTHONPATH: /opt/python
  
layers:
  - acs:fc:cn-shenzhen:1719759326012690:layers/demo2-layer/versions/1

构建成功后,提示说在 s.yaml 中添加上 environmentVariables 和 layers 节点。

💡 构建 layer 的意思就是把 requirements package 都构建一层 image layer 且上传到云端,后续的代码就是基于这层,不用另外的安装代码。如果有其他的项目想复用这些 package,直接改 s.yaml 的 layer 节点就可以了。

⚠️ 记得要把 requirements.txt 的文件要放在 和 index.py 的同级目录下。

所以往 s.yaml 里面写入上述的信息。

props:
      ...
      environmentVariables:
        PYTHONPATH: /opt/python
      layers:
        - acs:fc:cn-shenzhen:1719759326012690:layers/demo2-layer/versions/1

部署代码

# 本地测试
s local invoke

# 部署到远端
s deploy

****

结果:

因为不会上传 emoji package,代码明显是小了很多。

总结

  1. serverless 就是 业务 和 trigger 隔离开来,本文章例子中都是完成 业务,没有 trigger;只要后续补充上 trigger,这个业务就可以串通了。
  2. 部署方式,优先是构建 layer,后上传代码,因为 layer 可以复用,且减少项目的代码。
  3. 如果开发/本地测试/部署,可以遵循下面的方法:
# 初始化
s init start-fc3-python -d demo2
cd demo2
 
# 安装依赖
touch code/requirements.txt
echo "emoji==2.0.0" > code/requirements.txt

# 本地测试
s local invoke

# 构建 layer
s build --publish-layer

# 部署
s deploy

资料

  1. 源代码
  2. 阿里云 serverless 说明
  3. Serverless Devs Docs
  4. start-fc-template