AWS Lambda服务初体验

时间:2021-12-27 18:51:31

前段时间看到serverless架构,FaaS这些概念,觉的很新奇。 说不定又是什么未来新趋势。 很想去一探究竟。 苦于前段时间工作很忙,没时间弄。 这周刚好空下来, 赶紧试用了一把。 并记录之。

入门

aws的功能强大, 但是配置也繁琐。 好在它的文档很全,上手还比较顺畅。

申请一个aws账号

先到aws.amazon.com上注册一个aws账号。 绑定下信用卡。 获得750小时1年免费使用权。
但是有这个账号还不够, aws建议使用IAM创建一个新的管理员账号, 例如命名为adminuser, 而不是使用你的aws默认的网站账号来登陆。
创建账号的过程大致分成3步:
创建组并赋予权限 ——> 创建用户并绑定组 –> 为用户创建密码并登陆验证。

更加详细的操作可以参考:创建IAM user

安装aws cli 命令行工具

仅介绍 pip安装的方式, 主要是pip装完之后,后面做对应的aws 相关的开发, 安装python模块, 可能也会用到

安装步骤

  1. curl -O https://bootstrap.pypa.io/get-pip.py
  2. sudo python get-pip.py
  3. pip install awscli

详情请参考pip安装awscli
其它安装方式请参考awscli安装说明

添加配置文件

执行命令aws config
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: adminuser
执行完命令后 ,会在对应home目录的.aws 隐藏目录下生成两个文件
config 和 credentials, 当然你也可以手动创建这两个文件

[profile adminuser]
aws_access_key_id = adminuser access key ID
aws_secret_access_key = adminuser secret access key
region = aws-region

注:
aws_access_key_id 和 aws_secret_access_key 可以在IAM界面下找到对应用户的信息https://console.aws.amazon.com/iam/home?region=ap-northeast-1#users
region只要你登陆aws的ec2, 就可以在url链接里看到了region=ap-northeast-1之类的信息
如何配置命令行工具详情可以参考awscli命令行工具配置

hello-world

登陆到aws管理控制台, 进入lambda服务界面,点击get started now ,接下来执行下列步骤
1. 选择blueprint , 这里选择hello-world-python
2. 配置trigger, 这里直接跳过
3. 配置function, 填下第一行的function name即可, 这个function name可以先随便填一个
4. 点击next, 再点击创建create function,即可

blueprint是一些写好的代码示例,你也可以参考这些示例,自己创建新的函数
配置function的时候,需要创建IAM用户, 不过你不选择的话, Lambda服务默认会为你创建

触发lambda函数
创建好函数后,会自动转向触发函数的测试页面
点击test,选择触发方式,这里选择sample event temlate,然后点击save and test, 过一会儿就能看到执行结果了。 执行结果可以在当前页面的trigger选项卡里查看。

原理

event sources : 事件源,即trigger
handler: 处理事件的函数,会传入两个参数, 一个是event,即事件描述数据,一个是context, 即lamdba函数本身的设定,可用内存大小, 执行超时时间等

整个触发流程:
event sources触发一个事件, 通知到lambda服务, lambda传参给handler, handler开始执行相关的代码逻辑,执行一些操作, 操作aws上的资源或者其它。如果操作的是在aws上的资源,如ec2实例, s3 等,会使用授权的IAM用户的去操作。 执行完毕后, 返回结果。 另外,handler产生所有的日志会定向到cloudwatch。

实验

ec2定时开关机


使用aws lambda, 将event source设置为CloudWatch Events - Schedule , 再把启动或者关闭服务的函数放到handler里, 这样的话就可以定时触发instance的启动和关闭了,另外在cloudwatch可以看到详细日志流和调用成功率和延时的dashboard,方便调试排障和了解概况。
这个方法的优点是:
操作简单, 稳定性好(由lambda服务自身保证高可用), 无需启用新的实例,或者占用额外资源,且几乎是免费的方案,因为目前lambda服务前100万次的运算是免费的。

参考使用可以设定时间计划的lambda服务
开关机的代码参见github 代码