购物网站开发环境,唐山哪里建卫星制造基地,重庆网站建设价格费用,青岛网络营销推广aws(学习笔记第二十二课) 开发复杂的lambda应用程序(python的zip包)
学习内容#xff1a;
练习使用CloudShell开发复杂lambda应用程序(python) 1. 练习使用CloudShell CloudShell使用背景 复杂的python的lambda程序会有许多依赖的包#xff0c;如果不提前准备好这些python的…aws(学习笔记第二十二课) 开发复杂的lambda应用程序(python的zip包)
学习内容
练习使用CloudShell开发复杂lambda应用程序(python) 1. 练习使用CloudShell CloudShell使用背景 复杂的python的lambda程序会有许多依赖的包如果不提前准备好这些python的依赖包那么在lambda程序在执行的时候会出现mudule not found错误导致程序不能执行因此需要将python的主程序和依赖的包都一起打包成zip文件这里因为要是用linux环境进行zip打包所以使用CloudShell进行操作。 什么是CloudShell Shell 和开发工具 使用为AWS CloudShell会话创建的Shell可以在首选的命令行Shell之间无缝切换。更具体地说可以在 Bash、PowerShell 和 Z shell 之间切换。还可以访问其他预安装工具和实用程序。其中包括git、make、pip、sudo、tar、tmux、vim、wget 和zip。 Shell环境已预先配置为支持几种主要软件语言例如Node.js 和 Python。这意味着例如无需先执行运行时安装即可运行Node.js和Python 项目。 可以将上传到 AWS CloudShell 或在其中创建的文件提交到本地存储库然后再将这些文件推送到由 AWS CodeCommit 管理的远程存储库。 简单来说就是AWS提供了一个方便的linux环境同时具有当前用户的权限比如说可以和S3存储进行交互。
2.开发复杂lambda应用程序(python) 全体概念 这里主要参照了AWS的官方文档 lambda程序的整体 lambda程序的作成详细 准备S3 bucket my-aws-bucket-20250104 用于将CloudShell上打包的zip文件保存到S3my-s3lambda-lab 用于将image文件上传到S3my-s3lambda-lab-resized 用于将缩小之后的thumbnail文件上传到S3 给lambda程序赋予权限 策略 1 (主要是开通logs:*){Version: 2012-10-17,Statement: [{Effect: Allow,Action: [logs:CreateLogGroup,logs:CreateLogStream,logs:PutLogEvents],Resource: arn:aws:logs:*:*:*},{Effect: Allow,Action: [ec2:DescribeInstances,ec2:Start*,ec2:Stop*,ec2:DescribeInstanceStatus],Resource: *}]
}策略 2 (主要是开通S3:*) 注意这里对于S3的全体权限都开通了但是真正的开发需要细化权限设定。{Version: 2012-10-17,Statement: [{Sid: VisualEditor0,Effect: Allow,Action: s3:*,Resource: *}]
}角色设定 lambda的主程序import boto3
import os
import sys
import uuid
from PIL import Image
import PIL.Images3_client boto3.client(s3)def resize_image(image_path, resized_path):with Image.open(image_path) as image:image.thumbnail((128, 128))image.save(resized_path)def handler(event, context):for record in event[Records]:bucket record[s3][bucket][name]key record[s3][object][key] download_path /tmp/{}{}.format(uuid.uuid4(), key)upload_path /tmp/resized-{}.format(key)s3_client.download_file(bucket, key, download_path)resize_image(download_path, upload_path)s3_client.upload_file(upload_path, {}-resized.format(bucket), key)CloudShell上的详细操作 作成文件夹作成主程序文件CreateThumbnail.py 这里的CloudShell每次的主机IP都不一样但是目录下面的文件都能够保留。感觉是一个EBS存储卷。 /home/cloudshell-user/my_funciton/作为主路径 作成/home/cloudshell-user/my_funciton/package安装依赖包 boto3uuidPIL 这是需要的三个包 pip install --target ./package boto3
pip install --target ./package uuid
pip install --target ./package PIL安装之后的构造 开始将依赖包打入到zip文件cd package
zip -r ../my_function_pacakge.zip ./接着将主程序python打入zipzip my_function_pacakge.zip CreateThumbnail.py将zip文件上传到S3aws s3 cp my_function_pacakge.zip s3://my-aws-bucket-20250104开始设定lambda python版本设定 注意这里的python版本和CloudShell的python版本一定要一致 lambda角色设定 lambda的Event设定 lambda的代码上传 这里选择从S3上传zip文件 上传zip文件 更改运行时 这里修改成CreateThumbnail.handler 开始测试lambda 向S3 bucket(s3://my-s3lambda-lab)上传文件触发event 之后检查S3 bucket(s3://my-s3lambda-lab-resized)中的thumbnail作成情况。 可以看出lambda已经正常运行已经将thumbnail作成。 CloudWatch的日志组