写点什么

阿里云 FC-Serverless-Wordpress

作者:指剑
  • 2022-11-30
    重庆
  • 本文字数:5540 字

    阅读完需:约 18 分钟

阿里云FC-Serverless-Wordpress

通过函数计算 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.点击左侧的应用

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

3.授权 github 仓库

4.确认授权

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

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

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


二、配置 WordPress 并访问

1.访问 Serverless 所提供的域名

2.开始安装


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


4.文章发布测试


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

P2、函数的集成应用

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

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

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

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

0x02.流程结构如下

<center>Aliyun: ApiGateway ---- 函数计算 FC ---- nlp</center>

<center>AWS: LambdaURL---Lambda---Comprehend</center>

<center>Tencent: ApiGateway ---- 云函数 SCF----nlp</center>

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

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

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

Step-1.创建策略

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



Step-2.创建用户并授权



1x02.创建空白函数服务

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

Step-1.创建服务

Step-2.创建空白函数

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

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

### Aliyun# -*- coding: utf-8 -*-import jsonimport base64from aliyunsdkalinlp.request.v20200629 import GetSaChGeneralRequestfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.acs_exception.exceptions import ClientExceptionfrom 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 .
复制代码




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

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

Step-1.创建 API

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

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

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

Step-5.完成 API 创建

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



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

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

1x05 演示

使用 postman 测试

托管页面演示

因为阿里云 oss 托管需要另外使用域名,这里就用 AWS 的 S3 来托管页面一键访问:http://stanbck.s3-website.ap-east-1.amazonaws.com


二.亚马逊云 serverless 测试代码块

lambda 采用角色授权方式,无需显式定义 ak sk

### AWSimport jsonimport 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 测试代码块

在腾讯云函数 SCF 中,采用角色授权方式

### Tencent# -*- coding: utf8 -*-import jsonimport osfrom tencentcloud.common import credentialfrom tencentcloud.common.profile.client_profile import ClientProfilefrom tencentcloud.common.profile.http_profile import HttpProfilefrom tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKExceptionfrom tencentcloud.nlp.v20190408 import nlp_client, modelsdef 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)
复制代码


使用感受

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

是否易用:在 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 权限的函数代码

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

如果导师团可以看到这里,那么希望各位专家能够将优化开发文档和处理工单的意见反馈上去

发布于: 刚刚阅读数: 3
用户头像

指剑

关注

InfoQ签约作者 2022-07-13 加入

AWS社区建设者,AWS学生大使,微软学生大使,阿里云签约作者,Info Q签约作者,CSDN博客专家,华为云云享专家

评论

发布
暂无评论
阿里云FC-Serverless-Wordpress_阿里云_指剑_InfoQ写作社区