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

【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存储桶上传图片文件&#xff0c;触发Lambda函数&#xff0c;将图片压缩并上传至另一个存储桶创建两个存储桶通过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&#xff1a; between......and.......包括边界。 踩坑2&am…...

【Errors】【计算机图形学】A-SDF复现的一点纠正记录

ICCV 2021的工作A-SDF&#xff0c;在跑的过程中可能是一些版我Run了这篇工作代码的Reconstruction&#xff0c;然后出现了一点小小的错误&#xff0c;记录如下。 问题一&#xff1a;对数据做直接修改导致出错&#xff08;可能是不同的pytorch版本导致的?&#xff09; 错误描述…...

Dockerfile创建镜像文件

Dockerfile Docker镜像原理 Linux文件系统有bootfs和rootfs两部分组成 Docker镜像由特殊文件系统叠加 最底端bootfs,使用宿主机bootfs 第二次时rootfs,被称为基础镜像 向上可以叠加其他镜像文件 同一文件系统能将多层整合成一层&#xff0c;隐藏了多层存在 镜像可以放置…...

javascript中的严格模式

认识严格模式&#xff1a; 在ECMAScript5标准中&#xff0c;JavaScript提出了严格模式的概念&#xff08;Strict Mode&#xff09;: 严格模式很好理解&#xff0c;是一种具有限制性的JavaScript模式&#xff0c;从而是代码隐式的脱离了“懒散&#xff08;sloppy&#xff09;模…...

(二)【平衡小车制作】电机驱动(超详解)

一、硬件设计 1.直流减速电机   直流减速电机&#xff0c;即齿轮减速电机&#xff0c;是在普通直流电机的基础上&#xff0c;加上配套齿轮减速箱。齿轮减速箱的作用是&#xff0c;提供较低的转速&#xff0c;较大的力矩。  简单的来说&#xff0c;STM32分配两个IO口给一个…...

快速了解车联网V2X通信

自动驾驶拥有极其巨大的潜力&#xff0c;有可能改变我们的出行方式。它不仅有望永远改变车辆的设计和制造&#xff0c;还会永远改变汽车的所有权乃至整个交通运输业务。要实现全自动驾驶的目标&#xff0c;开发人员需要开发极为复杂的软件&#xff0c;软件中融入的人工智能(AI)…...

「Codeforces」D. Infinite Set

D. Infinite Set https://codeforces.com/contest/1635/problem/D 题目描述 你有一个由不同正整数组成的数组和一个无限集 S&#xff0c;现在你需要往集合 S 中塞入所有符合 x x x 条件的数。 x x x 的条件&#xff08;满足其中任意一个即可&#xff09;&#xff1a; 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 热更新时&#xff0c;从服务器拉去js脚本。理论上可以修改和新建所有的模块&#xff0c;但是不建议这样做。 建议 用来做紧急的小需求和 修复严重的线上bug。 二、lua脚本 比如&#xff1a; wax。热更新时&#xff0c;从服务器拉去lua脚本。游戏开发经常用到。…...

R语言 | 编写自己的函数

目录 一、正式编写程序 二、设计第一个函数 三、函数也是一个对象 四、程序代码的简化 五、return()函数的功能 六、省略函数的大括号 七、传递多个参数函数的应用 7.1 设计可传递2个参数的函数 7.2 函数参数的默认值 7.3 3点参数“…”的使用 八、函数也可以作为参数 …...

【Java校招面试】基础知识(七)——数据库

目录 前言一、数据库索引二、数据库锁三、数据库事务四、数据库连接池后记 前言 本篇主要介绍数据库的相关内容。 “基础知识”是本专栏的第一个部分&#xff0c;本篇博文是第六篇博文&#xff0c;如有需要&#xff0c;可&#xff1a; 点击这里&#xff0c;返回本专栏的索引文…...

MySQL高级--锁

一、锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题…...

Maven(六):Maven的使用——继承与聚合

Maven&#xff08;六&#xff09;&#xff1a;Maven的使用——继承与聚合 前言一、实验九&#xff1a;继承1、概念2、作用3、举例4、操作4.1 创建父工程4.2 创建模块工程4.3 查看被添加新内容的父工程 pom.xml4.4 解读子工程的pom.xml4.5 在父工程中配置依赖的统一管理4.6 子工…...

Java ---System类

System 类位于 java.lang 包&#xff0c;代表当前 Java 程序的运行平台&#xff0c;系统级的很多属性和控制方法都放置在该类的内部。由于该类的构造方法是 private 的&#xff0c;所以无法创建该类的对象&#xff0c;也就是无法实例化该类。 System 类提供了一些类变量和类方…...

代码随想录_贪心_leetcode 406 452

leetcode 406. 根据身高重建队列 406. 根据身高重建队列 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高…...

C++类的静态成员详解:成员函数非静态成员函数的非法调用

在C中&#xff0c;静态成员是属于整个类的而不是某个对象&#xff0c;静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则&#xff0c;保证了安全性还可以节省内存。 静态成员的定义或声明要…...

Qt之滑动条和进度条(QSlider、QProgressBar)

文章目录 前言一、QSliderQSlider的常用API信号与槽 二、QProgressBar滑动条和滚动条的常用API 总结 前言 在用户界面设计中&#xff0c;滑动条和进度条是常见的控件。Qt中提供了QProgressBar和QSlider两个类来实现滚动条和滑动条。 一、QSlider 在Qt中&#xff0c;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程序

本系统主要包含了等系统用户管理、公告信息管理、音乐资讯管理、音乐类型管理多个功能模块。下面分别简单阐述一下这几个功能模块需求。 管理员的登录模块&#xff1a;管理员登录系统对本系统其他管理模块进行管理。 用户的登录模块&#xff1a;用户登录本系统&#xff0c;对个…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究

摘要&#xff1a;在消费市场竞争日益激烈的当下&#xff0c;传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序&#xff0c;探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式&#xff0c;分析沉浸式体验的优势与价值…...

6.计算机网络核心知识点精要手册

计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法&#xff1a;数据与控制信息的结构或格式&#xff0c;如同语言中的语法规则语义&#xff1a;控制信息的具体含义和响应方式&#xff0c;规定通信双方"说什么"同步&#xff1a;事件执行的顺序与时序…...

mq安装新版-3.13.7的安装

一、下载包&#xff0c;上传到服务器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安装 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置环境变量&#xff0c;直接就安装了。 erl…...