(python)AWS Lambda使用python的Crypto以及层的使用(和时间问题)

说明

(文档主要说的是python语言)
关于AWS的Lambda之前采用的方式是将python的主程序和所需的第三方库都放到一个zip中,然后上传到lambda中使用。
后来发现代码中使用到了crypto这个库,一运行就报错。去网上搜索了一段时间,花了比较久的时间才搞定。
这里记录一下操作(之前的方式不推荐使用,主要是使用层)(均是自己摸索出来的,可能存在更好的方法)

一、层的功能和

主要是将所需要的第三方库打包成zip编辑到自定义层中,在主函数需要使用时,会自动添加这个自定义层,也就是加载这个库的信息。
(python的自带库不用新建层,可直接使用)

二、新建并保存层

1. 进入到终端

在这里插入图片描述
右上角这个标识就是终端

2. 下载第三方库

首先新建个python文件夹, 然后将需要的库下载到这个文件夹内:
在这里插入图片描述
命令如下:

mkdir python
python3 -m pip install pycryptodome -t python/  # 如果是python2环境  则改成python2

3. 打包python文件夹

在这里插入图片描述
在这里插入图片描述

命令行:

zip -r crypto.zip python  # 这里的zip名建议使用库名,方便作为区分

4. 将zip发布给指定AWS区的Lambda 层

在这里插入图片描述
命令行:

aws lambda publish-layer-version --layer-name crypto_layer --zip-file fileb://crypto.zip --compatible-runtimes python3.8 --region us-west-2
# 这条命令的解释详情见上图

至此,层就创建好了。这里也可以将多个库放到一个zip中,分开主要是为了给多个函数共同使用。

三、应用层

最后就是应用:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
版本号设置为1就可以, 最后选择添加即可。

四、其他注意事项

  1. 使用层后,主函数中只保留一个主文件即可,其他库均可以删除。
  2. 关于使用这个时间的坑(在终端改时区没有用):将字符串转时间戳时,会以AWS区的所在地的时区为准,这个时候跟本地转时间戳会有不小的差异,基本是为28800s(8小时),这里可以将时间戳减去这个时间即可。这里附上计算时区差的函数:
# 计算时区差
def TimeOne():
    utc_now = datetime.utcnow().replace(tzinfo=timezone.utc)
    SHA_TZ = timezone(timedelta(hours=8), name='Asia/Shanghai')
    beijing_now = utc_now.astimezone(SHA_TZ)
    local_now = utc_now.astimezone()
    return int(time.mktime(beijing_now.timetuple())) - int(time.mktime(local_now.timetuple()))  # 上海时间 - 标准时间
  1. 参考连接(官方文档描述会更清楚点):
    链接: 如何解决在 Python 中运行 Lambda 代码时收到的“Unable to import module”错误?
    链接: 使用AWS Lambda 的“层 (Layer) ”功能实现依赖包管理
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值