当前位置: 首页 > news >正文

aws(学习笔记第二十二课) 复杂的lambda应用程序(python zip打包)

aws(学习笔记第二十二课)

  • 开发复杂的lambda应用程序(pythonzip包)

学习内容:

  • 练习使用CloudShell
  • 开发复杂lambda应用程序(python)

1. 练习使用CloudShell

  • CloudShell使用背景
    复杂的pythonlambda程序会有许多依赖的包,如果不提前准备好这些python的依赖包,那么在lambda程序在执行的时候,会出现mudule not found错误,导致程序不能执行,因此,需要将python的主程序和依赖的包都一起打包成zip文件,这里因为要是用linux环境,进行zip打包,所以使用CloudShell进行操作。

  • 什么是CloudShell
    Shell 和开发工具
    使用为AWS CloudShell会话创建的Shell,可以在首选的命令行Shell之间无缝切换。更具体地说,可以在 Bash、PowerShell 和 Z shell 之间切换。还可以访问其他预安装工具和实用程序。其中包括gitmakepipsudotartmuxvimwgetzip
    Shell环境已预先配置为支持几种主要软件语言,例如Node.jsPython。这意味着,例如,无需先执行运行时安装即可运行Node.jsPython 项目。
    可以将上传到 AWS CloudShell 或在其中创建的文件提交到本地存储库,然后再将这些文件推送到由 AWS CodeCommit 管理的远程存储库。
    简单来说,就是AWS提供了一个方便的linux环境,同时具有当前用户的权限,比如说可以和S3存储进行交互。

2.开发复杂lambda应用程序(python)

  • 全体概念
    在这里插入图片描述
    这里,主要参照了AWS的官方文档

  • lambda程序的整体
    在这里插入图片描述

  • lambda程序的作成详细

    • 准备S3 bucket
      • my-aws-bucket-20250104 用于将CloudShell上打包的zip文件保存到S3
      • my-s3lambda-lab 用于将image文件上传到S3
      • my-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,安装依赖包
          • boto3
          • uuid
          • PIL
            这是需要的三个包
          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打入zip
          zip my_function_pacakge.zip CreateThumbnail.py
          
          在这里插入图片描述
        • zip文件上传到S3
          aws s3 cp my_function_pacakge.zip s3://my-aws-bucket-20250104
          
          在这里插入图片描述
    • 开始设定lambda
      • python版本设定
        注意,这里的python版本和CloudShellpython版本一定要一致在这里插入图片描述

      • lambda角色设定
        在这里插入图片描述

      • lambdaEvent设定
        在这里插入图片描述

      • 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的日志组
      在这里插入图片描述
http://www.lryc.cn/news/517695.html

相关文章:

  • HTML课堂之搜索工具箱/讲师duluo
  • 当歌 - RSS 订阅分发平台开发
  • 学习threejs,导入wrl格式的模型
  • 使用GitLab+Jenkins搭建CICD执行环境
  • 使用vue-pdf预览pdf和解决pdf电子签章显示问题
  • 【Rust自学】11.3. 自定义错误信息
  • 05、Docker学习,常用安装:Mysql、Redis、Nginx、Nacos
  • RabbitMQ高级篇之MQ可靠性 数据持久化
  • leetcode 2274. 不含特殊楼层的最大连续楼层数 中等
  • Tauri教程-基础篇-第二节 Tauri的核心概念上篇
  • 大风车excel:怎么把题库导入excel?题库导入excel
  • Java 兼容读取WPS和Office图片,结合EasyExcel读取单元格信息
  • 电脑硬盘系统迁移及问题处理
  • 网关 + Nacos配置管理
  • 《Spring Framework实战》6:核心技术 4.1.IoC 容器
  • ModuleNotFoundError: No module named ‘audioop‘
  • STM32-笔记38-I2C-oled实验
  • 人大金仓实现主键自增.
  • h264之多视点mvc编码及解码过程(JMVC平台举例)
  • 小程序学习08—— 系统参数获取和navBar组件样式动态设置
  • 数据库环境安装(day1)
  • 网络安全-web渗透环境搭建-BWAPP(基础篇)
  • 当算法遇到线性代数(三):实对称矩阵
  • WayLand的架构和协议
  • STM32学习(十)
  • 进阶篇-Day17:JAVA的日志、枚举、类加载器、反射等介绍】
  • Java设计模式 —— 【行为型模式】责任链模式(Chain-of-responsibility Pattern) 详解
  • C++和Python中负数取余结果的区别
  • rust学习——环境搭建
  • Linux系统中解决端口占用问题