如何通过Python Boto3 API使用Zip包创建Lambda函数及二进制读取Zip包
用Boto3读取整个Zip包创建Lambda函数的解决方案
嗨,这事儿其实挺简单的,你完全不用去解压Zip包或者读取里面的单个文件,直接用Python以二进制模式读取整个Zip文件的内容就行,刚好符合Boto3的要求。下面给你具体的操作步骤和代码示例:
1. 二进制读取整个Zip包
Python自带的open()函数支持用rb(二进制只读)模式打开文件,调用read()方法就能一次性把整个Zip包的二进制数据读出来,这正是create_function需要的格式。
代码片段如下:
# 把这里换成你自己的Zip包路径 zip_file_path = "/Users/you/lambda-deploy.zip" # 用with语句确保文件正确关闭,同时读取二进制数据 with open(zip_file_path, 'rb') as zip_file: zip_binary = zip_file.read()
2. 结合Boto3创建Lambda函数
拿到Zip的二进制数据后,直接把它放到create_function的Code参数里就行,格式是{'ZipFile': zip_binary}。下面是完整的可运行示例:
import boto3 # 初始化Lambda客户端(确保你的AWS凭证已经配置好) lambda_client = boto3.client('lambda') # 读取Zip包的二进制内容 zip_file_path = "/Users/you/lambda-deploy.zip" with open(zip_file_path, 'rb') as zip_file: zip_binary = zip_file.read() # 创建Lambda函数 try: response = lambda_client.create_function( FunctionName='MyTestLambda', # 你的函数名称 Runtime='python3.12', # 替换成你用的Python版本 Role='arn:aws:iam::123456789012:role/LambdaExecutionRole', # 你的IAM角色ARN Handler='main.lambda_handler', # 入口:文件名.函数名(比如你的代码在main.py里,函数是lambda_handler) Code={ 'ZipFile': zip_binary }, Description='测试用的Lambda函数', Timeout=10, # 超时时间,单位秒 MemorySize=128 # 内存大小,单位MB ) print(f"Lambda创建成功!ARN: {response['FunctionArn']}") except Exception as e: print(f"创建失败:{str(e)}")
几个要注意的点
- 确保你的AWS凭证配置正确(可以通过环境变量、~/.aws/credentials文件或者服务器的IAM角色),而且对应的IAM角色要有
lambda:CreateFunction的权限。 Handler参数一定要和你Zip包里的代码对应,比如你的入口函数在app.py里叫handler,那就要写成app.handler。- 如果怕相对路径出问题,可以用
os.path.abspath()来生成绝对路径,比如:import os zip_file_path = os.path.abspath("./lambda-deploy.zip")
内容的提问来源于stack exchange,提问作者JChao
相关产品推荐
相关产品推荐

