零基础入门Serverless:Hello World
1. 开通并进入到阿里云Serverless产品
- 通过阿里云首页,找到"产品"->"弹性计算"->"Serverless"->"函数计算FC"
- 点击进入函数计算FC的页面
- 点击管理控制台按钮,并进行账号注册/登陆
- 针对首次使用的用户需要进行函数计算服务的开通,需要阅读协议,并且同意(点击1中的选择框),然后点击右下角的立即开通即可
- 进入控制台之后,如果右上角有“体验新版控制台”按钮,请点击该按钮,如果没有该按钮,可以跳过本步骤
2. 创建服务和函数
- 选择左侧的服务及函数之后,可以先进行服务的创建
- 按照页面提醒,进行服务名称设定,然后可以选择性的进行描述信息填写、日志服务和链路追踪功能开启,最后点击确定即可
- 完成服务的创建之后,可以进行函数的创建
- 需要我们天蝎函数名,选择一个自己熟悉的编程环境,以及设置一个内存规格,最后点击创建即可
- 创建之后可以在代码框中,编写代码,例如默认的Hello World
# -*- coding: utf-8 -*- import logging # To enable the initializer feature (https://help.aliyun.com/document_detail/158208.html) # please implement the initializer function as below: # def initializer(context): # logger = logging.getLogger() # logger.info('initializing') def handler(event, context): logger = logging.getLogger() logger.info('hello world') return 'hello world'
- 当代码有变更之后,系统会进行提醒,我们需要部署代码
- 部署代码之后,我们可以进行测试函数
测试完成之后,可以看到最终的`return`将会作为返回结果进行展示,中间的`logger.info`将会作为日志输出进行展示
3. 创建一个可以通过网址访问的Hello World
在刚刚的流程中,我们创建的是一个通过其他触发器触发函数的案例,此时我们可以创建一个通过HTTP请求触发函数的案例。
此时需要注意的几个点:
- 什么是触发器:https://help.aliyun.com/document_detail/53102.html
- 什么是HTTP触发器:https://help.aliyun.com/document_detail/71229.html
- 创建一个新的函数,并在创建函数的时候,选择“通过HTTP请求触发”
- 创建完成之后,与刚刚的代码不同的是,这个Http触发的代码包括了一些Http的信息
# -*- coding: utf-8 -*- import logging HELLO_WORLD = b'Hello world!\n' # To enable the initializer feature (https://help.aliyun.com/document_detail/158208.html) # please implement the initializer function as below: # def initializer(context): # logger = logging.getLogger() # logger.info('initializing') def handler(environ, start_response): context = environ['fc.context'] request_uri = environ['fc.request_uri'] for k, v in environ.items(): if k.startswith('HTTP_'): # process custom request headers pass # do something here status = '200 OK' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) return [HELLO_WORLD]
关于不同语言的HTTP触发方法案例可以参考文档:https://help.aliyun.com/document_detail/71229.html#title-h8k-hhq-xiu
在文档最下面有相对应的案例链接:
- 创建完成函数之后,我们可以进行触发器查看
- 可以看到,这个函数下又一个HTTP触发器,并附带一个请求地址,我们可以通过POSTMAN等工具,对这个地址进行测试:
额外说明:如果在浏览器中直接打开请求地址,将会以附件的方式下载响应。这是因为 Http 触发器会自动在响应头中添加 Content-Disposition: attachment 字段。开发者可以使用自定义域名避免该问题。自定义域名文档:https://help.aliyun.com/document_detail/90759.html
至此我们完成了通过不同事件触发函数计算的Hello World案例
4. 安装和配置Serverless Devs开发者工具
- 安装Node.js环境。
- 执行如下命令,下载Node.js安装包:
wget https://npm.taobao.org/mirrors/node/v12.4.0/node-v12.4.0-linux-x64.tar.xz
- 执行如下命令,解压安装包并重命名:
tar -xvf node-v12.4.0-linux-x64.tar.xz && mv node-v12.4.0-linux-x64/ /usr/local/node
- 执行如下命令,配置环境变量:
echo "export PATH=$PATH:/usr/local/node/bin" >> /etc/profile
- 让环境变量生效:
source /etc/profile
- 执行如下命令,安装Serverless-Devs工具:
npm install @serverless-devs/s -g
- 返回结果如下,表示安装完成:
说明 :如果安装过程较慢,可以使用淘宝npm源,安装命令为`npm --registry=https://registry.npm.taobao.org install @serverless-devs/s -g`。
- 执行如下命令,查看版本并检查安装是否正确:
s -v
- 返回结果如下,您可以看到Serverless-Devs工具的版本:
@serverless-devs/s: 2.0.94, @serverless-devs/core: 0.1.14, darwin-x64, node-v12.15.0
3. 配置阿里云密钥信息:
说明 :本场景提供免费的ECS服务器,但是使用的函数计算服务是开通在您账号下,以下配置信息也是需要配置您账号的UID、AccessKey ID和AccessKey Secret信息。
执行如下命令,配置账号信息。
s config add
然后根据提示填写以下信息。
- 云厂商:选择Alibaba Cloud(alibaba)。
- AccountID:请在账号安全设置页面查看您的阿里云主账号ID。
- AccessKeyID和AccessKeySecret:请在安全信息管理页面查看您账号的AccessKey ID和AccessKey Secret。
- 如果您使用的是阿里云主账号,请在安全信息管理页面的安全提示弹框中,单击继续使用AccessKey。
- 如果您使用的是阿里云RAM子用户,需要确保您的子用户拥有函数计算管理权限AliyunFCFullAccess,请参见为RAM用户授权。您可以在安全信息管理页面中,查看您的AccessKey ID和AccessKey Secret,如下图所示。如果您的账号未使用过AccessKey,请单击右上角创建AccessKey。
配置成功后,您将会收到以下提示。
5. 创建资源
- 在页面中间,单击创建资源,创建所需资源。
- 在页面左侧导航栏中,单击云产品资源列表,查看本次实验资源相关信息。
说明:资源创建过程需要1~3分钟。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:IP地址、用户名和密码等。
6. 通过工具创建Hello World函数
- 通过初始化命令,进行项目的初始化,由于Serverless Devs提供多种语言的支持,所以可以参考下表,根据自己需求进行初始化:
编程语言 |
函数类型 |
执行命令 |
Nodejs12 |
HTTP |
s init start-fc-http-nodejs12 |
Event |
s init start-fc-event-nodejs12 |
|
Python3 |
HTTP |
s init start-fc-http-python3 |
Event |
s init start-fc-event-python3 |
|
Java8 |
HTTP |
s init start-fc-http-java |
Event |
s init start-fc-event-java8 |
|
Golang |
Event |
s init fc-custom-golang-event |
PHP7 |
HTTP |
s init start-fc-http-php7 |
Event |
s init start-fc-event-php7 |
更多案例可以参考:https://github.com/devsapp/start-fc
例如,我选择了Nodejs HTTP案例
s init start-fc-http-nodejs12
- 为要创建的项目输入一个名称,本示例中为start-fc-http-nodejs12。
start-fc-http-nodejs12
- 选择default,然后按回车。
- 执行如下命令,进入start-fc-http-nodejs12目录。
cd start-fc-http-nodejs12
- 执行如下命令,部署项目。
s deploy
- 返回结果如下,表示部署完成,并复制url。
- 打开浏览器:
实验地址:https://developer.aliyun.com/adc/scenario/702351b0bc0c4c90b81a76fc4b616195