前段时间看到serverless架构,FaaS这些概念,觉的很新奇。 说不定又是什么未来新趋势。 很想去一探究竟。 苦于前段时间工作很忙,没时间弄。 这周刚好空下来, 赶紧试用了一把。 并记录之。
入门
aws的功能强大, 但是配置也繁琐。 好在它的文档很全,上手还比较顺畅。
申请一个aws账号
先到aws.amazon.com上注册一个aws账号。 绑定下信用卡。 获得750小时1年免费使用权。
但是有这个账号还不够, aws建议使用IAM创建一个新的管理员账号, 例如命名为adminuser, 而不是使用你的aws默认的网站账号来登陆。
创建账号的过程大致分成3步:
创建组并赋予权限 ——> 创建用户并绑定组 –> 为用户创建密码并登陆验证。
更加详细的操作可以参考:创建IAM user
安装aws cli 命令行工具
仅介绍 pip安装的方式, 主要是pip装完之后,后面做对应的aws 相关的开发, 安装python模块, 可能也会用到
安装步骤
- curl -O https://bootstrap.pypa.io/get-pip.py
- sudo python get-pip.py
- 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 代码