通过函数计算FC的预置模板,新用户可以很快的完成服务搭建,并且以极低的时间和资金成本完成以前大量的服务和繁琐的步骤,同时Serverless也是近几年来不断发展的一个技术趋势,以弹性伸缩的方式来降低成本和解决服务高可用的问题,使资源变得灵活

本项目是将世界上最流行的 web 框架 wordpress 部署到阿里云 Serverless 平台(函数计算 FC)
通过 Serverless Devs 开发者工具,您只需要几步,就可以体验 Serverless 架构,带来的降本提效的技术红利。

通过本次的Serverless函数计算征集令活动,作为一个阿里云的Serverless新手,写出该教程,可以很快速的上手,值得一说的是阿里云所提供的 通过模板创建应用 这一点,提供的模板很丰富,相较于AWS Lambda来说,对于国内用户是非常友好的,毕竟有很多非常适合新手使用的模板,由于本次是阿里云社区推出的Serverless活动,那么用户来使用这些服务是免费的,这里又不得不提到腾讯了,就在上个月腾讯的函数应用已经开始收费了,这对于新手想要入门Serverless,阿里云无疑是最好的选择,本文开始会为大家做一个基础的演示,包含视频和文字,各位读者按需操作吧。

P1-主要为新手用户快速上手,如果您对P1不感兴趣,可以移步到P2

这里来使用阿里云函数计算FC来创建高可用的Wordpress应用,其实是一个很好的选择,在这里使用Serverless,那么弹性和成本得到了很好的体现,用户在搭建的时候就无需再去额外的购买容器或者ECS云服务器这些资源,更为突出的一点是 ,整个流程,用户只需要 点点点,相较于传统来部署Wordpress,用户所需要做的操作并不少,例如下载Wordpress包,数据库,改代码,考虑是否使用LAMP还是LNMP架构。那么在本教程中,您将体验到极致的部署速度和极其简单的操作步骤。

阿里云Serverless函数征集令活动页面:https://developer.aliyun.com/topic/serverless2022

演示视频:

​ ​Bilibili​​​:https://www.bilibili.com/video/BV1Kf4y1Z7Nn/
​​ ​阿里云开发者社区视频​​:https://developer.aliyun.com/live/249606?spm=a2c6h.26396819.creator-center.6.2aef3e18EC2bLq

一、控制台创建Wordpress Serverless应用

首先进入阿里云 函数计算FC的控制台
​​ ​函数计算FC​​:https://fcnext.console.aliyun.com

1.点击左侧的应用

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws

2.依次点击 Web应用—》Wordpress(立即创建)

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws_02

3.授权github仓库

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_自然语言处理_03

4.确认授权

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_腾讯云_04

5.授权成功后,自动跳转回之前的页面

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws_05

6.点击左下角的立即创建

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws_06

7.稍后会自动跳转到应用详情页面,如下

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_自然语言处理_07


阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_自然语言处理_08

二、配置WordPress并访问

1.访问Serverless所提供的域名

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_腾讯云_09

2.开始安装

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws_10


阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_serverless_11

3.使用之前配置的账户密码进行登录

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_腾讯云_12


阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_serverless_13

4.文章发布测试

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_自然语言处理_14

########################################################

P2、函数的集成应用

1x00.在阿里云函数计算的帮助文档中有提到 集成服务,阿里云是这样定义的

函数计算以事件驱动的方式连接其他服务。借助这些方式,您可以构建弹性的、可靠的以及安全的应用和服务,甚至在数天内就能完成一套多媒体数据处理后端服务。当事件源触发事件时,函数计算会自动调用关联的函数处理事件。例如,对象存储OSS在新对象创建或删除事件(ObjectCreated或ObjectRemoved)时会自动触发函数处理,或者API网关在收到HTTP请求时自动触发函数处理请求。此外,函数还可以由日志服务或者表格存储等其他阿里云服务触发。

1x01.那么在后面的内容中会使用三家云厂商的服务来做本次的集成服务测试,这里采用的是 apiGateway和自然语言分析服务,分别为:Aliyun、AWS、Tencent,由于这篇文章主要是阿里云的Serverless测评,那么主要对阿里云部分进行详细描述,其余厂商,简短描述,详细内容请观看视频

Bilibili视频链接:https://www.bilibili.com/video/BV1XG4y1e7uE/

1x02.流程结构如下

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws_15

Aliyun: ApiGateway ---- 函数计算FC ---- nlp

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_serverless_16

AWS: LambdaURL—Lambda—Comprehend

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws_17

Tencent: ApiGateway ---- 云函数SCF----nlp

1.阿里云serverless函数计算fc+自然语言处理nlp(情绪分析)

1x01.创建策略、用户,并授权

​ ​RAM控制台​​:https://ram.console.aliyun.com/

Step-1.创建策略

{
"Statement": [
{
"Effect": "Allow",
"Action": "alinlp:*",
"Resource": "*"
}
],
"Version": "1"
}

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_serverless_18

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws_19

Step-2.创建用户并授权

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws_20


阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_serverless_21


阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws_22

1x02.创建空白函数服务

​ ​函数计算FC控制台​​:https://fcnext.console.aliyun.com/cn-shanghai/services

Step-1.创建服务

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_阿里云_23

Step-2.创建空白函数

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_腾讯云_24

Step-3.使用标准 Runtime 从零创建

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws_25

Step-4.编写函数代码,安装依赖包

### Aliyun
# -*- coding: utf-8 -*-
import json
import base64
from aliyunsdkalinlp.request.v20200629 import GetSaChGeneralRequest
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException

def handler(event, context):
event= json.loads(event)

client = AcsClient(
"AK",
"SK",
"cn-hangzhou"
);

request = GetSaChGeneralRequest.GetSaChGeneralRequest()
# 因为api传递进来的event是 base64加密过的,所以需要对body解密
request.set_Text(base64.b64decode(event['body']))
# request.set_OutType("1")
request.set_ServiceCode("alinlp")
# request.set_TokenizerId("GENERAL_CHN")
response = client.do_action_with_exception(request)
resp_obj = json.loads(response)

return {
'headers': { "Content-Type": "application/json" },
'statusCode': 200,
'body': json.loads(resp_obj['Data'])['result']
}
# 将依赖包下载到本地目录中
pip install aliyun-python-sdk-alinlp==1.0.16 -t .

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws_26

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws_27


阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_自然语言处理_28

1x03.创建API网关并设置api触发

​ ​API网关控制台​​:https://apigateway.console.aliyun.com/cn-shanghai/apis/list#/cn-shanghai/overView/view

Step-1.创建API

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_自然语言处理_29

Step-2.设置API名称和安全认证

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_阿里云_30

Step-3.定义API请求—设置协议、请求path、httpMethod

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_自然语言处理_31

Step-4.定义API后端服务—后端服务类型/函数类型/服务名称/函数名称

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_serverless_32

Step-5.完成API创建

Step-6.发布API–设置为线上环境发布

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_serverless_33


阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_serverless_34


阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_serverless_35

1x04.检查是否启用nlp服务[若未开通则需开通]

​ ​nlp控制台,需要预先开通​​:https://alinlp.console.aliyun.com/overview

1x05演示

使用postman测试

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_aws_36

托管页面演示

因为阿里云oss托管需要另外使用域名,这里就用AWS的S3来托管页面

​ ​一键访问​​:http://stanbck.s3-website.ap-east-1.amazonaws.com

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_serverless_37

1x11.亚马逊云serverless测试

### AWS
import json
import boto3

comprehend = boto3.client(service_name='comprehend', region_name='us-east-1')

def lambda_handler(event, context):
print("Event",event['body'])
Text = event['body']
LanguageCode = comprehend.detect_dominant_language(Text=Text)
comprehend_sentiment = comprehend.detect_sentiment(Text = Text,LanguageCode=LanguageCode['Languages'][0]['LanguageCode'])
return {
'headers': { "Content-Type": "application/json" },
'statusCode': 200,
'body': comprehend_sentiment
}

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_自然语言处理_38

1x31.腾讯云serverless测试

### Tencent
# -*- coding: utf8 -*-
import json
import os
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.nlp.v20190408 import nlp_client, models
def main_handler(event, context):
print("the event source:",event)
print("the post body type:",type(event['body']))
# print("The event:",json.loads(event['body']))
if isinstance(event['body'],str):
Text = event['body']
else:
Text = json.loads(event['body'])
print(Text)
try:
cred = credential.Credential(
os.environ.get("TENCENTCLOUD_SECRETID"),
os.environ.get("TENCENTCLOUD_SECRETKEY"),
os.environ.get('TENCENTCLOUD_SESSIONTOKEN'))
# 实例化一个http选项,可选的,没有特殊需求可以跳过
httpProfile = HttpProfile()
httpProfile.endpoint = "nlp.tencentcloudapi.com"

# 实例化一个client选项,可选的,没有特殊需求可以跳过
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
# 实例化要请求产品的client对象,clientProfile是可选的
client = nlp_client.NlpClient(cred, "ap-guangzhou", clientProfile)

# 实例化一个请求对象,每个接口都会对应一个request对象
req = models.SentimentAnalysisRequest()
params = {
"Text": Text,
"Mode":"3class"
}
req.from_json_string(json.dumps(params))

# 返回的resp是一个SentimentAnalysisResponse的实例,与请求对象对应
resp = client.SentimentAnalysis(req)
# 输出json格式的字符串回包
print(type(resp.to_json_string()))
# print("The out :",resp)
return {
'headers': { "Content-Type": "application/json" },
'statusCode': 200,
'body': resp.to_json_string()
}


except TencentCloudSDKException as err:
print(err)

阿里云serverless从入门到进阶测评(阿里云/AWS/腾讯云)_serverless_39

使用感受

从三家对比来看,各有优差吧

是否易用:在P1阶段,可以看出阿里云提供了服务模板,可以很快的创建出常用服务,例如wordpress、kodbox等等,同样另外两家云厂商也提供了此类功能,但是对于新手和国内用户,阿里云和腾讯云更有优势一点,其提供的常用模板很多,反观AWS在这边对国内用户并不太友好,提供的模板可能不太适合新手用户。细化的看一下,阿里云所提供的模板要多很多,这对于新手和需要快速构建服务的用户来说非常方便,这个点阿里云还是做得很好

代码编写:个人认为 腾讯似乎更有优势一点,vscode的编辑器的确很好用,遇到没有使用过的包,按住ctrl + 左键 可以快速到包文件,其余两家还没有体验到

依赖包安装:三家都提供了 层,本地上传zip包等等,不过值得一说的是 这次 阿里云和腾讯云 都有了 终端 ,这样可以快速的在终端中安装依赖包,相比较aws的lambda并没有这个功能(cloud 9这个服务有这个功能)

开发文档:这里还是要属 AWS 更有优势,关于boto3的使用有非常明确的描述各个包以及aws各种服务的调用和返回方法。阿里云的使用文档让我觉得并不方便,而且描述很不详细。腾讯云在这边和阿里云类似,不过似乎要好一点,如果审核可以看到,希望完善一下开发文档吧

技术支持:由于使用aws看文档已经足够,这里并没有涉及到aws的support.在使用阿里云函数计算FC的时候,出现一个API传参加密,这个其实挺费解的,其他两家并没有这样做,提交工单,售后工程师处理了一天,说的最多的也就是 “你好,请稍等,正在查看您的问题”,然后就是回复很慢!自己找出解决方案了,工程师都还没有答复。腾讯云这边提交过几次工单,非常快速,而且是实时在线的工程师解决问题,提出问题后还迅速加微信了解问题所在。再吐槽一下,阿里云的工单实在是太慢了,一个好的服务离不开好的售后。

价格方面:这里对于普通用户并没有什么需要考虑的,因为阿里云的serverless活动,那么这次选阿里云也没问题,不过aws也是免费提供一定额度的调用资源。腾讯方面在6月改版后,新用户体验3个月左右就需要付费了。

代码量:这里说的代码量说的是服务集成这块,可以看到每家云厂商都将serverless和自己的其他服务进行集成,在aws的lambda中,采用一个boto3模块,可以调用自家全部服务,自然是代码量要少很多。阿里云和腾讯这边采用的差不多的策略,对于不同的服务似乎都有不同的SDK,这个似乎对于新手用户不太友好,而且开发文档让人挺头疼

函数授权:三家都有在函数中附加Role的功能,在使用AWS和腾讯的时候都有成功的使用Role的权限(腾讯这边一开始没找到,但是在线咨询马上就回复了,而且微信也加上给出解决方法),阿里云这边看来还是AK SK比较方便(对于新手而言),直接创建用户-授权-拿到AKSK填入函数中,但是这样似乎有一点安全问题,为什么不用Role权限,确实是看不太懂文档,而且在钉钉群也问了,给的是OSS的方案,不太适用,所以个人觉得阿里云在这边对于新手似乎是不太友好,个人认为权限这方面用Role的权限更好,审核如果看到的话,能否回复本文留下 拿到role权限的函数代码

做总结:总体来看,阿里云和另外两家相比有优有差:从快速上手来说:新手用户使用确实也是比较方便,而且现在是有活动在,使用成本也会降低。但是其开发文档个人感觉对新手并不友好,而且让我觉得很不好的是工单的支持,技术售后回复很慢,慢到连你找到解决方案了,售后也还是在给发"请稍等,正在查看你的问题",个人觉得售后这边不专业,然后不得不去钉钉群问。。。