使用CFC层管理依赖包-Python
现在 CFC 新增了“层( Layer )” 功能使得可以单独上传并集中管理CFC的依赖包了,这样开发者开发函数代码的时候只需要关注该函数本身的代码,依赖包只需要引用即可。这样有以下的好处。开发者可以只关注函数代码,不用考虑依赖包的部署。
Python依赖包制作
1.准备层目录环境 先在本地创建一个python_layer文件夹,后续所有操作均在在该文件夹python_layer目录下完成。在该目录中创建一个python目录,用于放置共享自定义代码或者开源pyhton库。
1mkdir python_layer
2cd python_layer
3mkdir python
进入python_layer目录查看目录结构为:
1 tree
2.
3└── python
4
52 directories, 0 files
2 若您要制作的代码是自定义代码库,先把要共享的代码保存python目录下,本例中创建文件名为layer_test.py, 代码如下
1 var_test_layer = "this is cfc layer"
然后把layer_test.py制作成zip压缩包,需要注意目录结构,本例子中打完包的目录结构如下
1zip -r layer_test.zip *
2adding: python/ (stored 0%)
3adding: python/layer_test.py (deflated 8%)
1tree
2.
3├── layer_test.zip
4└── python
5 └── layer_test.py
6
71 directory, 2 files
若您的依赖是开源代码库,则您需要将开源代码库linux版的依赖都放置到python目录中,使用tree查看放置pymysql库后目录结构:
1tree
2.
3└── python
4 └── pymysql(pymysql依赖)
5 .
6
76 directories, 36 files
打包依赖,名为pymysql_layer.zip。
1 zip -r pymysql_layer.zip *
2 adding: python/ (stored 0%)
3 adding: python/pymysql/ (stored 0%)
4 adding: python/pymysql/constants/ (stored 0%)
5 adding: python/pymysql/constants/FLAG.py (deflated 31%)
6 adding: python/pymysql/constants/COMMAND.py (deflated 57%)
7 ...
打包完成后查看
1tree (查看目录结构)
2.
3├── pymysql_layer.zip
4└── python
5 └── pymysql
6 ├── __init__.py
7 ...
8
96 directories, 37 files
CFC运行时会将层放在/opt 目录下并根据不同运行环境下的目录来调用。
- python python,python/lib/python3.10/site-packages
1 python_layer.zip
2 └── python/bce-sdk-python
3.创建层 到CFC的层控制台,创建一个新的层
输入层,描述,选择刚才的zip包上传,点击创建
这样层就创建成功了。以后如果要更新,在层详情里点“创建版本”进行新建一个层。
注意层版本是不可修改的,如果一个版本被删除,已经引用了该版本的CFC函数依然是能工作的,但新建函数中是不能去引用这个被删除的层版本。
4.创建函数 到函数菜单下创建新的函数,选择语言python2.7
修改代码如下
1# -*- coding: utf-8 -*-
2import os
3
4def handler(event, context):
5 print(os.system('ls -l /opt'))
6 return "Hello World"
此时层还没有引入函数,先运行以下看看
/opt 目录下没有内容
5.引入layer,在函数的层配置里点击添加层
在弹窗中选择刚刚创建的层python_test 选择版本1,点击确定
最多可以添加5个层,如果有多个层,如果有同名文件存在序号大的会覆盖序号小的。可以点击上下箭头修改顺序
确定层之后,点击保存,保存层配置。
6.测试 此时执行函数的时候,层会被解压到/opt目录下,修改以下函数代码
1# -*- coding: utf-8 -*-
2import os
3import layer_test
4
5def handler(event, context):
6 print(os.system('ls -l /opt'))
7 print(layer_test.var_test_layer)
8 return "Hello World"
执行函数
能看到输出了层中的变量, /opt下存在python目录。这个就是保存依赖包的目录。