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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringMVC】| SpringMVC执行流程原理 | 常用注解 剥析

MVC目录 一. &#x1f981; MVC模型二. &#x1f981; SpringMVC1. SpringMVC执行流程&#xff08;重点&#xff09;Ⅰ. SpringMVC四大组件Ⅱ. 执行流程 2. RequestMapping3. RequestParam4. ReuqestHeader & CookieValue5. RESTful风格支持Ⅰ. 传统 vs restfulⅡ. PathVar…

【网络技术】什么是CNI

序言 你只管努力&#xff0c;其他交给时间&#xff0c;时间会证明一切。 Never look back unless you are planning to go that way. 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级论点蓝色&#xff1a;用…

【应急响应】日志自动提取分析项目ELKLogkitLogonTracerAnolog等

日志自动提取-七牛Logkit&观星应急工具 1、七牛Logkit&#xff1a;(Windows&Linux&Mac等) https://github.com/qiniu/logkit/ 支持的数据源&#xff08;各类日志&#xff0c;各个系统&#xff0c;各个应用等&#xff09; File: 读取文件中的日志数据&#xff0c;包…

面了一个4年经验的测试工程师,自动化都不会也要15k,我也是醉了····

在深圳这家金融公司也待了几年&#xff0c;被别人面试过也面试过别人&#xff0c;大大小小的事情也见识不少&#xff0c;今天又是团面的一天&#xff0c; 一百多个人都聚集在一起&#xff0c;因为公司最近在谈项目出来面试就2个人&#xff0c;无奈又被叫到面试房间。 整个过程…

数说热点 | 跟着《长月烬明》起飞,今年各地文旅主打的就是一个听劝

近日&#xff0c;随着热播剧《长月烬明》的爆火&#xff0c;蚌埠、宣城、敦煌等多个与剧情梦幻联动的宝藏城市被带飞&#xff0c;各地热心网友也纷纷催促自家文旅局赶紧“蹭飞”&#xff0c;《长月烬明》以一己之力打造了影视文旅融合的新样板。 仙偶剧特效天花板&#xff0c;…

《互联网安全产品漏洞管理规定》

《网络产品安全漏洞管理规定》由工业和信息化部、国家互联网信息办公室、公安部联合印发&#xff0c;自2021年9月1日起施行。 该《规定》明确&#xff0c;任何组织或者个人不得利用网络产品安全漏洞从事危害网络安全的活动&#xff0c;不得非法收集、出售、发布网络产品安全漏洞…

Redis高频面试题,使用场景

一、缓存 1、什么是缓存穿透 ? 怎么解决 ? 缓存穿透 查询一个不存在的数据&#xff0c;mysql查询不到数据也不会直接写入缓存&#xff0c;就会导致每次请求都查数据库。 解决 方案一&#xff1a;缓存空数据&#xff0c;查询返回的数据为空&#xff0c;仍把这个空结果进行…

【JavaEE】认识线程

目录 1、什么是线程 2、为什么引入线程 2.1、线程的优缺点 3、CPU的工作原理 4、线程和进程的关系 4.1、线程和进程的入口函数 4.2、线程独享的资源 1、什么是线程 一个进程中可以有一个或者多个线程&#xff0c;每个线程都是一个独立的执行流。多个线程之间&#xff0c;也…

3.rabbitMQ之发布确认高级和整合springboot(重要)找了很多博客整理出来的

1.极端情况下 rabbitMQ需要重启,导致消息投递失败(生产者发消息全部丢失)(交换机或者队列出问题) 生产者需要把数据放到缓存,用定时任务重新发送 解决方法: 0.必须配置文件写 spring.rabbitmq.publisher-confirm-typecorrelatedspring.rabbitmq.publisher-returnstruecorrelati…

Word Embedding

One-hot-encoding 缺点 1.向量维度和向量个数很大&#xff0c;假设有1w个token的话&#xff0c;向量个数和维度就都是1w 2. 语义相近的词的向量并不相似 Word Embedding 核心思想&#xff1a;可以通过上下文理解单词的语义 predection-based方法 使用前一个单词预测下一个…

【机器学习】信息量、香农熵、信息增益

这节可以搭配 【机器学习】Logistic回归&#xff08;重新整理&#xff09;信息量&#xff08;信息&#xff09;信息量公式的推理过程 香农熵信息增益 【机器学习】Logistic回归&#xff08;重新整理&#xff09; B站视频&#xff1a;“交叉熵”如何做损失函数&#xff1f;打包…

Linux一学就会——编写自己的shell

编写自己的shell 进程程序替换 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数 以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动 例程开始执行…

视觉震撼的数据可视化示例

众所周知&#xff0c;数据可以非常强大——当你真正理解它告诉你什么时。 数据和信息可视化(数据可视化或信息可视化)是对大量复杂的定量、定性数据、信息进行设计和创建易于沟通、易于理解的图形或视觉表示的实践&#xff0c;在静态、动态或交互式视觉项目的帮助下&#xff0…

存储网络架构——DAS、NAS、SAN、分布式组网架构

目录 DAS直连式存储 NAS网络附加存储 SAN存储 存储区域网络 分布式存储组网 DAS直连式存储 DAS遇到的挑战 NAS网络附加存储 向主机提供文件服务&#xff1b;文件系统由存储设备维护&#xff0c;用户访问文件系统&#xff0c;不直接访问底层存储 拥有所有主机上文件与底层存储空…

JS案例分析-某国际音x-tt-params参数分析

今天我们要分析的网站是&#xff1a;https://www.tiktok.com/selenagomez?langen&#xff0c;参数名字叫x-tt-params。 先来抓个包 这个接口是用户视频列表url&#xff0c;参数叫x-tt-params&#xff0c;该接口中还有其他参数像msToken&#xff0c;X-Bogus&#xff0c; _sig…

【51单片机】点亮一个LED灯(看开发板原理图十分重要)

&#x1f38a;专栏【51单片机】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【The Right Path】 &#x1f970;大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 目录 &#x1f354;基础内容 &#x1f3f3…

项目集的定义及管理

一、什么是项目集 项目集是相互关联且被协调管理的项目、子项目集和项目集活动&#xff0c;以便获得分别管理所无法获 得的效益。 以项目集的形式管理项目、子项目集及项目集活动能确保项目集组件的战略和工作计划根据各组 件的成果做出相应调整&#xff0c;或者按照发起组织的…

洞车系统常见问题解决指南

洞车常见问题解决指南 1.研发脚本处理问题1.1 WMS出库单无法审核1.2 OMS入库单无法提交&#xff0c;提示更新中心库存失败1.3 当出现OMS下发成功WMS/TMS/DMS还没有任务的情况时处理方案1.4 调度波次生成或者添加任务系统异常1.5 东鹏出库单部分出库回传之后要求重传1.6 更新订单…

不会前端,怎么快速打造属于自己的个人博客?

个人博客 简介提前准备 一、初始化vuepress项目二、页面配置首页配置顶部配置顶部导航栏路由配置侧边导航栏配置 三、打包部署四、数据统计插槽自定义插槽配置整体结构页面效果 项目地址 简介 主要教大家如何快速搞一个属于自己的博客网站&#xff0c;特别是一些不怎么会前端的…

信息安全保障

文章目录 信息安全保障基础基本概念信息安全定义广义和狭义的信息安全问题信息安全问题的根源和特征情报威胁和态势感知信息安全保障基础信息安全属性信息安全视角 信息安全发展阶段通信安全计算机安全信息系统安全信息安全保障网络安全空间 信息安全保障新领域工业控制系统(IS…