Amazon s3 AWS Lambda如何从S3中选择脚本的最新版本
我有一个S3存储桶,我们使用它作为代码存储库来存储Lambda代码,然后由Lambda读取 S3 bucket是一个新版本,因此每次我们再次上传脚本(修改代码后),都会为现有文件创建一个新版本的zip文件Amazon s3 AWS Lambda如何从S3中选择脚本的最新版本,amazon-s3,aws-lambda,Amazon S3,Aws Lambda,我有一个S3存储桶,我们使用它作为代码存储库来存储Lambda代码,然后由Lambda读取 S3 bucket是一个新版本,因此每次我们再次上传脚本(修改代码后),都会为现有文件创建一个新版本的zip文件 现在,我希望Lambda自动获取zip文件的最新版本,而不是每次在CloudFormation模板中手动更改它并运行它或手动将其附加到Lambda。如果您希望在Lambda函数的代码上载到S3 bucket时自动部署新版本的代码,然后,您可以使用通知SNS主题并订阅另一个执行部署的Lambda
现在,我希望Lambda自动获取zip文件的最新版本,而不是每次在CloudFormation模板中手动更改它并运行它或手动将其附加到Lambda。如果您希望在Lambda函数的代码上载到S3 bucket时自动部署新版本的代码,然后,您可以使用通知SNS主题并订阅另一个执行部署的Lambda函数(例如,通过CloudFormation或AWS SDK deploy Lambda函数)。我能够解决问题,因此只想发布解决方案供参考: 遵循以下步骤:
import boto3
import json
client = boto3.client("s3")
lambda_client = boto3.client("lambda")
def lambda_handler(event, context):
bucket = event["Records"][0]["s3"]["bucket"]["name"]
file = event["Records"][0]["s3"]["object"]["key"]
get_version = client.get_object(
Bucket = bucket,
Key = file
)
versionId = (get_version["VersionId"]) #Getting the latest version of the code
update_lambda = lambda_client.update_function_code(
FunctionName= file.split("/")[-1].split(".")[0],
S3Bucket=bucket,
S3Key=file,
S3ObjectVersion= versionId
)
您可以让调用lambda函数的任何地方都使用
$LATEST
版本进行调用。@jellycsc听起来更像是希望lambda自动从S3获取最新的部署包,并在此基础上执行自动(重新)部署。啊,是的。嘿,Kai,谢谢你的建议,但我不想创建一个新的lambda,我只想将新的code.zip版本附加到现有的lambda上,因为有很多这样的版本,所以我担心上面的过程将无法与我的用例一起工作。@Naman你需要一些调用lambda API的过程/代码来实现这一点-即,将代码上载到你的Lambda函数。所以,你需要找个地方来计算。