【AWS入门】AWS Lamda

news2024/9/30 17:33:32

目录

  • 创建一个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 logging

DEFAULT_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_tags


def 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::Role
    Properties:
      RoleName: lambda-execution-role
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lambda.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: /
      Policies:
        - PolicyName: lambda-execution-policy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - logs:*
                Resource: arn:aws:logs:*:*:*
              - Effect: Allow
                Action:
                  - s3:GetObject
                  - s3:PutObject
                Resource: arn:aws:s3:::*

创建的堆栈详情一览
在这里插入图片描述
为创建的堆栈起个名字,点击【下一步】
在这里插入图片描述
点击【下一步】
在这里插入图片描述
checkbox勾选后点击【提交】
在这里插入图片描述
IAM角色创建成功
在这里插入图片描述

创建Lambda函数

此处注意角色选择上一步骤中创建好的角色
在这里插入图片描述

点击【添加触发器】
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
代码> 上传文件
在这里插入图片描述
或者手动添加代码也可以:

import boto3
import os
import sys
import uuid
from PIL import Image
import PIL.Image
     
s3_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:上传到源存储桶的图片名
在这里插入图片描述
测试报错
在这里插入图片描述
更改代码中适配的【处理程序】名

在这里插入图片描述
执行成功
在这里插入图片描述
查看目标存储桶,图片被压缩
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/485475.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端】3.CSS基础知识

系列文章链接 1.背景知识与学习路线 2.HTML基础知识 3.CSS基础知识 4.JavaScript基础知识 文章目录 1. 基本概念1.1 CSS 定义1.2 CSS 用途1.3 CSS 支持的属性举例 2. CSS 基础语法2.1 demo2.2 选择器2.3 CSS创建2.3.1 外部样式表2.3.2 内部样式表2.3.3 内联样式 3. 总结3.1 CSS…

Linux线程:信号量

1. 信号量 &#xff08;1&#xff09;概念 信号量是非负整数计数器&#xff0c;表示当前可使用的公共资源的个数&#xff1b;主要用于进程或线程的同步或互斥。 信号量 > 0&#xff0c;则可访问公共资源&#xff0c;信号量&#xff1b;信号量 < 0&#xff0c;则阻塞。…

dreamer的创作纪念日

先来看看这张图&#xff1a; 创作者dreamer来到CSDN的第1024天 机缘 提示&#xff1a;可以和大家分享最初成为创作者的初心 最初开始写CSDN博客&#xff0c;初衷是为了记录&#xff1a;自己工作或学习中遇到的一些问题&#xff08;就像我的第一篇博客&#xff0c;就是刷Lee…

Windows powershell添加自定义快捷指令(Linux下也有)

Windows Powershell 1.创建并修改Windows Powershell 启动执行文件 echo $PROFILE编辑C:\Users\hongyang.jia\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 2.按照以下格式输入命令 function 别名 { 需要替代的命令 }例如我的Git简写命令 function gs {git sta…

dm5爬虫(selenium)

因为纯requests请求获取不到图片链接,所以用了selenium import requests import os from lxml import etree import re from selenium import webdriverurl https://www.dm5.com/manhua-qiangweishaonv/ # 漫画的url response requests.get(url) # 获取响应 print(response)…

PowerJob客户端连接

本文来说下PowerJob客户端连接 文章目录 启动服务端编写示例代码编写自己的处理器启动示例程序任务配置与运行配置任务创建任务执行结果运行结果问题及解决 本文小结 启动服务端 启动服务端&#xff1a;http://127.0.0.1:7700/#/oms/home 编写示例代码 进入示例工程&#xff08…

RGB-D基准测试工具:绝对轨迹误差 (ATE)、相对位姿误差 (RPE)和从图像生成点云

在估计RGB-D相机轨迹并将其保存到文件中后&#xff0c;我们需要通过将其与地面事实进行比较来评估估计轨迹中的误差。有不同的错误指标。两种突出的方法是绝对轨迹误差&#xff08;ATE&#xff09;和相对姿势误差&#xff08;RPE&#xff09;。ATE非常适合测量可视 SLAM 系统的…

5 map、结构体、方法、面向对象【Go语言教程】

5 map、结构体、方法、面向对象【Go语言教程】 1 map 1.1 概念及声明 ①概念 基本语法&#xff1a;var map 变量名 map[keytype]valuetype key 可以是什么类型&#xff1f; golang 中的 map&#xff0c;的 key 可以是很多种类型&#xff0c;比如 bool, 数字&#xff0c;stri…

OK6410A 中的 irqdomain 之 gpio

文章目录 VIC domain 与 gpio domain 的硬件拓扑语言描述VIC 与 INT_EINTx 的关系INT_EINTx 与 GPIO的关系INT_EINT0INT_EINT1INT_EINT2INT_EINT3INT_EINT4INT_EINT4 与 External interrupt Group1-9 的关系External interrupt Group1External interrupt Group2External interr…

基于Open3D的点云处理2-Open3D的IO与数据转换

三维数据类型 点云 某个坐标系下的点数据集&#xff0c;每个点包括三维坐标X&#xff0c;Y&#xff0c;Z、颜色、分类值、强度值、时间等信息&#xff1b; 储存格式&#xff1a;pts、LAS、PCD、xyz、asc、ply等&#xff1b;Mesh 多边形网格&#xff0c;常见的是三角网格&#…

node快速搭建接口实现登录退出,增删改查功能供前端使用,结尾有完整代码

用node快速搭建接口 环境实现功能具体实现步奏数据库设计用express创建一个服务器实例创建数据库连接池配置跨域请求和解析前端数据登录接口实现验证token的中间件退出接口获取用户信息接口增删改查功能 完整代码 环境 node版本v17.0.0 所用到的依赖 "dependencies"…

量子力学奇妙之旅-从相对论下薛定谔方程到量子场论

专栏目录: 高质量文章导航-持续更新中 1.用于描述一个多粒子体系的波函数 前置:最小的尺度 由于不确定性原理 因此为了测量到更小的空间尺度,我们就需要提高探测粒子的动量

RSA非对称加密(附工具类Util)

文章目录 非对称加密是什么非对称加密通信流程RSA非对称加密算法非对称加密工具类Util及案例演示 之前写过一篇关于DES对称加密的帖子&#xff0c;感兴趣的小伙伴可以去看看&#xff1a;DES对称加密算法 今天主要聊聊什么是非对称加密&#xff0c;以及它是如何实现的。 一、非…

f(x)与|f(x)|,f ‘ (x),F(x)常见关系。

1.f(x)与|f(x)|关系。 1.连续关系。(f(x)在"[a,b]上连续" > |f(x)|在"[a,b]连续") ①如果f(x)在[a,b]上连续。则|f(x)|在[a,b]上连续. &#xff08;因为f(x)在x0的连续点>x0必为|f(x)|的连续点&#xff09; 注&#xff1a;”[a,b]连续“包括&#…

PUBG绝地求生的制作公司计划今年推出NFT元宇宙游戏

欢迎来到Hubbleverse &#x1f30d; 关注我们 关注宇宙新鲜事 &#x1f4cc; 预计阅读时长&#xff1a;5分钟 本文仅代表作者个人观点&#xff0c;不代表平台意见&#xff0c;不构成投资建议。 近年来&#xff0c;元宇宙的概念在游戏界获得了极大的关注。元宇宙指的是一个虚…

武汉大学惯性导航课程合集【2021年秋】2.1 惯导机械编排算法

Vrb是客观存在的&#xff0c;b相对于r的速度&#xff08;从R到b的变化&#xff09;&#xff0c;右上角的b表示投影到p坐标系&#xff0c;只是表达数值的不同。 &#xff08;工程上5-10&#xff0c;50倍&#xff09;奈奎斯特采样率&#xff0c;香农采样定理&#xff0c;又称奈…

Synthesys:语音合成和视频生成平台

【产品介绍】 Synthesys是一个基于人工智能的语音合成和视频生成平台&#xff0c;可以让你用几分钟的时间&#xff0c;就能制作出专业的音频和视频内容&#xff0c;无需花费大量的金钱和时间去雇佣演员、摄像机或音频设备。Synthesys的技术可以把你的文本转换成逼真的人声和人像…

《花雕学AI》AI时代来临,互联网教父凯文·凯利给你50条生存指南:5000天后的世界会是什么样?

你知道凯文凯利吗&#xff1f;他是《连线》杂志的创始人之一&#xff0c;被誉为“世界互联网教父”&#xff0c;他的预言和观点影响了无数人的思考和行动。他曾经预言过互联网、社交媒体、区块链等技术的发展和变革&#xff0c;而现在&#xff0c;他又给我们带来了一个全新的预…

Vue电商项目--防抖节流应用

演示卡顿现象 正常&#xff1a;事件触发非常频繁&#xff0c;而且每一次的触发&#xff0c;回调函数都要去执行&#xff08;如果时间很短&#xff0c;而回调函数内部有计算&#xff0c;那么很容易出现浏览器卡顿&#xff09; 正常情况下&#xff08;用户慢慢的操作&#xff0…

基于Transformer的DETR的注意力权重可视化,非CAM可视化技术

神经网络的可视化可以客观的解释 “黑盒” &#xff0c;所以一直以来都是论文中必不可少的工作。对于深度卷积神经网络&#xff0c;一般用CAM进行可视化研究。遗憾的是&#xff0c;基于Transformer的神经网络可视化&#xff0c;CAM并不奏效。所以&#xff0c;本文章提供一套基于…