【AWS入门】AWS Lamda
目录
- 创建一个Lamda函数
- 用Lamda函数控制启停EC2实例
- 创建一台EC2实例
- 创建角色
- 创建lamda函数
- 使用Amazon EventBridge计划启停实例
- 创建EventBridge
- 用户往S3存储桶上传图片文件,触发Lambda函数,将图片压缩并上传至另一个存储桶
- 创建两个存储桶
- 通过Cloudformation堆栈创建IAM角色
- 创建Lambda函数
创建一个Lamda函数
点击【创建函数】按钮

自定义【函数名称】
选择用来编写函数的语言【运行时】,【架构】,【执行角色】后,点击【创建函数】按钮来创建一个Lamda函数
高级设置保持默认即可

函数创建好后显示如下


点击【测试】选项卡,选择测试【模板】,填写自定义测试【名称】,点击【保存更改】,【测试】按钮
显示测试成功

点击详细信息,可以查看运行的详情,点击【单击此处】可以查看日志组


会自动创建一个角色

用Lamda函数控制启停EC2实例
创建一台EC2实例

创建角色
创建一个 Role 服务为 lambda 附加新创建的策略
【角色】名:自定义,此处定义为:lamda
【策略】:参照以下示例

{"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": "*"}]
}
创建lamda函数
【函数名称】:自定义即可
【运行时】:此处我们选择Python3.9
【执行角色】:选择上一步骤中创建好的角色[lamda]
准备就绪后,点击【创建函数】按钮来创建一个lamda函数

将准备好的python代码拷贝到如下位置后,点击【Deploy】按钮进行更新

import os
import boto3
import loggingDEFAULT_TAGS = os.environ.get("DEFAULT_TAGS")
print("DEFAULT_TAGS", DEFAULT_TAGS)logger = logging.getLogger()
level = logging.getLevelName(os.environ.get("LOG_LEVEL", "INFO"))
print("Logging level -- ", level)
logger.setLevel(level)ec2_resource = boto3.resource('ec2')
ec2_client = boto3.client('ec2')def lambda_handler(event, context):"""Function that start and stop ec2 instances schedule and with specific tags<br/>:param event: Input event, that should contain action and tags parameters, where tags is a list of comma separates key/value tags.<br/>:param context: Lambda context.<br/>:return: nothing"""logger.debug(event)print("event -- ", event)tags = get_tags(event['tags'] if 'tags' in event else DEFAULT_TAGS)print("tags -- ", tags)instances = get_instances_by_tags(tags)if not instances:logger.warning('No instances available with this tags')else:if event['action'] == 'start':ec2_client.start_instances(InstanceIds=instances)logger.info('Starting instances.')elif event['action'] == 'stop':ec2_client.stop_instances(InstanceIds=instances)logger.info('Stopping instances.')else:logger.warning('No instances availables with this tags')def get_tags(tags):"""Method that split comma separated tags and return a formed tags filter<br/>:param tags: Comma separated string with the tags values.<br/>:return: tags structure"""final_tags = []split_tags = tags.split(",")for tag in split_tags:values = tag.split('=')final_tags.append({'Name': values[0],'Values': [values[1]]})return final_tagsdef get_instances_by_tags(tags):"""Method that filter all ec2 instances and return only the instances with specific tags<br/>:param tags: Filter structure with tag values.<br/>:return: list of ec2 instances"""response = ec2_resource.instances.filter(Filters=tags)print("Response -- ", response)for instance in response:print("Instance -- ", instance)intance_ids = [instance.id for instance in response]print("intance_ids -- ", intance_ids)return intance_ids
配置>环境变量>添加环境变量,配置环境变量

您可使用键-值对的形式定义可从函数代码访问的环境变量,这对于存储配置设置非常有用,而且无需更改函数代码。
示例:此处的第一对儿【键】,【值】中【键】参照Python代码中的 参数,【键】填EC2实例的标签名
第二对【键】,【值】参照Python代码中的参数
填写完,点击【保存】


配置>常规配置>编辑
将【超时】时间由[3秒]改为[10秒]

开始进行测试,给事件去一个名字,并添加事件的action为stop,
保存并点击测试选项
【事件名称】:自定义
【时间JSON】:参考下图
{"action": "stop"
}

点击【测试】按钮,输入如下详情,并且原本运行中的实例也随机停止


若想开启或者关闭其他实例可以通过编辑时间JSON


使用Amazon EventBridge计划启停实例
创建EventBridge
自定义【名称】
自定义【描述】
【规则类型】:计划
点击【在EventBridge Schedular中继续】

【发生次数】:周期性计划
【计划类型】:基于cron的计划
【cron表达式】:自定义
其他保持默认即可,点击【下一步】

【目标API】:常用API:Lambda
【Lambda函数】:选择一个
【输入】:自定义
其他保持默认即可,点击【下一步】

点击【下一步】

点击【创建计划】

关联的EC2实例将在下一个触发时间进行启用
如果想设置在固定的时间停用,需要再创建一个EventBridge
用户往S3存储桶上传图片文件,触发Lambda函数,将图片压缩并上传至另一个存储桶
创建两个存储桶
其中XXXresized的存储桶名称涉及到Python函数的调用,命名时需要注意!

通过Cloudformation堆栈创建IAM角色

文件详情如下:
AWSTemplateFormatVersion: '2010-09-09'
Resources:LambdaRole:Type: AWS::IAM::RoleProperties:RoleName: lambda-execution-roleAssumeRolePolicyDocument:Version: '2012-10-17'Statement:- Effect: AllowPrincipal:Service:- lambda.amazonaws.comAction:- sts:AssumeRolePath: /Policies:- PolicyName: lambda-execution-policyPolicyDocument:Version: '2012-10-17'Statement:- Effect: AllowAction:- logs:*Resource: arn:aws:logs:*:*:*- Effect: AllowAction:- s3:GetObject- s3:PutObjectResource: arn:aws:s3:::*
创建的堆栈详情一览

为创建的堆栈起个名字,点击【下一步】

点击【下一步】

checkbox勾选后点击【提交】

IAM角色创建成功

创建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)
编辑运行时设置【处理程序】,【运行时】
【运行时】:Python3.7
【处理程序】:lambda_function.handler


s3存储桶中上传一个图片

进行测试
测试代码中修改几处位置
name:修改为源存储桶名(s3-lambda-image)
arn:attach存储桶名(s3-lambda-image)
key:上传到源存储桶的图片名

测试报错

更改代码中适配的【处理程序】名

执行成功

查看目标存储桶,图片被压缩

相关文章:
【AWS入门】AWS Lamda
目录 创建一个Lamda函数用Lamda函数控制启停EC2实例创建一台EC2实例创建角色创建lamda函数 使用Amazon EventBridge计划启停实例创建EventBridge 用户往S3存储桶上传图片文件,触发Lambda函数,将图片压缩并上传至另一个存储桶创建两个存储桶通过Cloudform…...
牛客刷SQL题Day5
SQL69 返回产品并且按照价格排序 select prod_name , prod_price from Products where prod_price between 3 and 6 select prod_name , prod_price from Products where 6>prod_price and prod_price >3 踩坑1: between......and.......包括边界。 踩坑2&am…...
【Errors】【计算机图形学】A-SDF复现的一点纠正记录
ICCV 2021的工作A-SDF,在跑的过程中可能是一些版我Run了这篇工作代码的Reconstruction,然后出现了一点小小的错误,记录如下。 问题一:对数据做直接修改导致出错(可能是不同的pytorch版本导致的?) 错误描述…...
Dockerfile创建镜像文件
Dockerfile Docker镜像原理 Linux文件系统有bootfs和rootfs两部分组成 Docker镜像由特殊文件系统叠加 最底端bootfs,使用宿主机bootfs 第二次时rootfs,被称为基础镜像 向上可以叠加其他镜像文件 同一文件系统能将多层整合成一层,隐藏了多层存在 镜像可以放置…...
javascript中的严格模式
认识严格模式: 在ECMAScript5标准中,JavaScript提出了严格模式的概念(Strict Mode): 严格模式很好理解,是一种具有限制性的JavaScript模式,从而是代码隐式的脱离了“懒散(sloppy)模…...
(二)【平衡小车制作】电机驱动(超详解)
一、硬件设计 1.直流减速电机 直流减速电机,即齿轮减速电机,是在普通直流电机的基础上,加上配套齿轮减速箱。齿轮减速箱的作用是,提供较低的转速,较大的力矩。 简单的来说,STM32分配两个IO口给一个…...
快速了解车联网V2X通信
自动驾驶拥有极其巨大的潜力,有可能改变我们的出行方式。它不仅有望永远改变车辆的设计和制造,还会永远改变汽车的所有权乃至整个交通运输业务。要实现全自动驾驶的目标,开发人员需要开发极为复杂的软件,软件中融入的人工智能(AI)…...
「Codeforces」D. Infinite Set
D. Infinite Set https://codeforces.com/contest/1635/problem/D 题目描述 你有一个由不同正整数组成的数组和一个无限集 S,现在你需要往集合 S 中塞入所有符合 x x x 条件的数。 x x x 的条件(满足其中任意一个即可): x a i …...
项目---基于TCP的高并发聊天系统
目录 服务端 服务端视角下的流程图 一、数据库管理模块 1.1 数据库表的创建 1.2 .对于数据库的操作 1.2.1首先得连接数据库 1.2.2执行数据库语句 1.2.3 返回数据库中存放的所有用户的信息 1.2.4返回数据库中存放的所有用户的好友信息 二、用户管理模块 2.1、UserInfo类&…...
iOS热更新-8种实现方式
一、JSPatch 热更新时,从服务器拉去js脚本。理论上可以修改和新建所有的模块,但是不建议这样做。 建议 用来做紧急的小需求和 修复严重的线上bug。 二、lua脚本 比如: wax。热更新时,从服务器拉去lua脚本。游戏开发经常用到。…...
R语言 | 编写自己的函数
目录 一、正式编写程序 二、设计第一个函数 三、函数也是一个对象 四、程序代码的简化 五、return()函数的功能 六、省略函数的大括号 七、传递多个参数函数的应用 7.1 设计可传递2个参数的函数 7.2 函数参数的默认值 7.3 3点参数“…”的使用 八、函数也可以作为参数 …...
【Java校招面试】基础知识(七)——数据库
目录 前言一、数据库索引二、数据库锁三、数据库事务四、数据库连接池后记 前言 本篇主要介绍数据库的相关内容。 “基础知识”是本专栏的第一个部分,本篇博文是第六篇博文,如有需要,可: 点击这里,返回本专栏的索引文…...
MySQL高级--锁
一、锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题…...
Maven(六):Maven的使用——继承与聚合
Maven(六):Maven的使用——继承与聚合 前言一、实验九:继承1、概念2、作用3、举例4、操作4.1 创建父工程4.2 创建模块工程4.3 查看被添加新内容的父工程 pom.xml4.4 解读子工程的pom.xml4.5 在父工程中配置依赖的统一管理4.6 子工…...
Java ---System类
System 类位于 java.lang 包,代表当前 Java 程序的运行平台,系统级的很多属性和控制方法都放置在该类的内部。由于该类的构造方法是 private 的,所以无法创建该类的对象,也就是无法实例化该类。 System 类提供了一些类变量和类方…...
代码随想录_贪心_leetcode 406 452
leetcode 406. 根据身高重建队列 406. 根据身高重建队列 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高…...
C++类的静态成员详解:成员函数非静态成员函数的非法调用
在C中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。 静态成员的定义或声明要…...
Qt之滑动条和进度条(QSlider、QProgressBar)
文章目录 前言一、QSliderQSlider的常用API信号与槽 二、QProgressBar滑动条和滚动条的常用API 总结 前言 在用户界面设计中,滑动条和进度条是常见的控件。Qt中提供了QProgressBar和QSlider两个类来实现滚动条和滑动条。 一、QSlider 在Qt中,QSlider是…...
Flutter之插件开发plugin
目的:适用于独立业务模块,或者与原生页面交互频繁的地方。 基于flutter3.x , IDE :androidStudio demo:https://download.csdn.net/download/SHTLoveXX/87751845 步骤: 1.新建flutter project 【New flutter project】. 2. 在新建工程面板记得切换 …...
asp.net基于web的音乐管理网站dzkf17A9程序
本系统主要包含了等系统用户管理、公告信息管理、音乐资讯管理、音乐类型管理多个功能模块。下面分别简单阐述一下这几个功能模块需求。 管理员的登录模块:管理员登录系统对本系统其他管理模块进行管理。 用户的登录模块:用户登录本系统,对个…...
SAP资产会计数据迁移:除了AS91,你还需要检查这些关键配置(传输日期、抵销科目详解)
SAP资产会计数据迁移:AS91之外的7个关键配置陷阱与解决方案 当你在凌晨三点盯着屏幕上不平的资产折旧凭证时,AS91的简单操作指南显然已经不够用了。作为经历过数十个SAP上线项目的顾问,我发现90%的资产数据迁移问题都源于那些容易被忽略的后台…...
ChatGLM3-6B新手必看:断网可用的本地智能对话解决方案
ChatGLM3-6B新手必看:断网可用的本地智能对话解决方案 1. 引言:为什么你需要一个本地AI助手? 想象一下,你正在处理一份敏感的客户合同,需要AI帮你分析条款;或者你在一个没有稳定网络的环境里,…...
ARM Neon加速NTT实战:如何在Cortex-A72上优化Kyber和Saber的加密性能
ARM Neon加速NTT实战:Cortex-A72上的Kyber与Saber性能优化 在移动安全领域,后量子密码算法的硬件加速已成为行业焦点。Cortex-A72作为ARM中端处理器的代表,其Neon指令集为NTT(数论变换)提供了显著的并行计算能力。本文…...
别再拍脑袋定权重了!多目标规划中权重和ε值确定的3种科学方法
多目标规划中权重与约束值的科学确定方法:从理论到实践 1. 多目标规划的核心挑战与参数确定的重要性 在现实世界的决策场景中,我们很少遇到仅需优化单一目标的简单问题。无论是产品设计、资源分配还是投资组合管理,决策者往往需要同时考虑多个…...
每日股票分析自动化:基于Ollama的daily_stock_analysis镜像实战教程
每日股票分析自动化:基于Ollama的daily_stock_analysis镜像实战教程 1. 为什么需要本地化AI股票分析工具 在金融投资领域,及时获取准确的股票分析至关重要。传统方式需要人工收集数据、分析图表、撰写报告,整个过程耗时耗力。而基于大语言模…...
什么时候会触发FullGC
面试 1、老年代空间不足。应该让对象在年轻代多存活一段时间,不要创建过大的对象及数组。 2、元空间满了。说明此时,系统中要加载的类、反射的类和调用的方法较多。 3、MinorGC执行后晋升到老年代的平均大小大于老年代的剩余空间。...
Android NDK开发从入门到实战:解锁应用性能的终极武器
引言 在Android应用开发领域,Java和Kotlin凭借其简洁的语法和强大的框架支持,成为了绝大多数开发者的首选。然而,当面对高性能计算、游戏引擎集成、硬件加速访问或核心算法保护等场景时,纯Java层的实现往往显得力不从心。这时&…...
基于MATLAB的VSG逆变器无源性分析与稳定性研究
基于MATLAB的VSG逆变器无源性分析与稳定性研究 摘要 随着分布式发电和微电网技术的快速发展,逆变器作为新能源并网的关键接口,其稳定性问题日益突出。虚拟同步发电机(VSG)控制技术通过模拟同步发电机的机电特性,为逆变器提供惯性和阻尼支撑,成为提升系统稳定性的重要手…...
CPU工作原理:从二进制加法器到计算系统
CPU工作原理:从二进制加法器到计算系统的演进 1. 计算需求与二进制表示 在数字计算领域,加法是最基础也是最重要的运算之一。让我们从一个简单的数学问题开始:6324 244675 ?这个看似简单的加法问题,揭示了计算系统的…...
告别复杂配置!5分钟掌握OCAT:OpenCore图形化配置神器
告别复杂配置!5分钟掌握OCAT:OpenCore图形化配置神器 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore(OCAT) 项目地址: https://gitcode.com/gh_mirrors/oc/OCAuxiliaryTools 如果你…...
