网站对位,wordpress+andriod,制作灯笼图片,微官网下载aws(学习笔记第二十一课) 开发lambda应用程序
学习内容#xff1a;
lambda的整体概念开发lambda应用程序 1. lambda的整体概念
借助AWS Lambda#xff0c;无需预置或管理服务器即可运行代码。只需为使用的计算时间付费。借助 Lambda#xff0c;可以为几乎任何类型的应用进…aws(学习笔记第二十一课) 开发lambda应用程序
学习内容
lambda的整体概念开发lambda应用程序 1. lambda的整体概念
借助AWS Lambda无需预置或管理服务器即可运行代码。只需为使用的计算时间付费。借助 Lambda可以为几乎任何类型的应用进程或后端服务运行代码 - 所有这些都无需管理。上传代码后Lambda 会处理运行和扩展具有高可用性的代码所需的一切。您可以将代码设置为从其他 AWS 服务自动触发或直接从任何 Web 或移动应用进程调用。
lambda的使用方式 作为事件驱动的计算资源时Lambda 可以响应事件时运行代码 作为计算服务时可以响应API Gateway或者API调用的HTTP请求时运行代码
2. 开发lambda应用程序
开发第一个lambda应用程序hello,world 创建函数 选择nodejs平台执行。 为了权限设定role 测试 点击测试按钮执行测试。 开发另一个lambda应用程序使用tag过滤对EC2进行开启和停止控制 作成一个EC2,作为lambda函数控制的目标 为了执行权限通过赋予给lambda特定的role role的策略 这里有两个权限 一个是logs的权限主要是输出lambda的log需要的权限。这个是lambda的必须策略另一个是ec2,主要是控制ec2的时候需要的权限 {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: *}]
}role的信任关系 因为这个role需要给lambda执行需要所以需要建立信任关系。{Version: 2012-10-17,Statement: [{Effect: Allow,Principal: {Service: lambda.amazonaws.com},Action: sts:AssumeRole}]
}开始创建lambda函数 权限这里执行lambda-role来给lambda函数赋予执行权限。 成功创建lambda函数 lambda函数的实例程序代码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 tagsbr/: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: nothinglogger.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(InstanceIdsinstances)logger.info(Starting instances.)elif event[action] stop:ec2_client.stop_instances(InstanceIdsinstances)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 filterbr/:param tags: Comma separated string with the tags values.br/:return: tags structurefinal_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 tagsbr/:param tags: Filter structure with tag values.br/:return: list of ec2 instancesresponse ec2_resource.instances.filter(Filterstags)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点击deploy对函数的代码进行部署 可以看出这里是一个vscode风格的在线代码编辑器 对lambda函数进行环境变量的设定 代码中使用DEFAULT_TAGS os.environ.get(“DEFAULT_TAGS”)得到环境变量所以这里需要定义tag:Name:lambda-ec2是标准的aws定义tag的方式 回到lambda的测试编辑event参数 进行测试 检查ec2的状态 检查CloudWatch可以看到lambda函数的log