携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情 >>
通过函数计算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函数征集令活动页面:developer.aliyun.com/topic/serve…
演示视频:
Bilibili:www.bilibili.com/video/BV1Kf… 阿里云开发者社区视频:developer.aliyun.com/live/249606…
一、控制台创建Wordpress Serverless应用
首先进入阿里云 函数计算FC的控制台 函数计算FC: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视频链接:www.bilibili.com/video/BV1XG…
0x02.流程结构如下
Aliyun: ApiGateway ---- 函数计算FC ---- nlp
AWS: LambdaURL---Lambda---Comprehend
Tencent: ApiGateway ---- 云函数SCF----nlp
一.阿里云serverless函数计算fc+自然语言处理nlp(情绪分析)
1x01.创建策略、用户,并授权
RAM控制台:ram.console.aliyun.com/
Step-1.创建策略
{
"Statement": [
{
"Effect": "Allow",
"Action": "alinlp:*",
"Resource": "*"
}
],
"Version": "1"
}
Step-2.创建用户并授权
1x02.创建空白函数服务
函数计算FC控制台:fcnext.console.aliyun.com/cn-shanghai…
Step-1.创建服务
Step-2.创建空白函数
Step-3.使用标准 Runtime 从零创建
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 .
1x03.创建API网关并设置api触发
API网关控制台:apigateway.console.aliyun.com/cn-shanghai…
Step-1.创建API
Step-2.设置API名称和安全认证
Step-3.定义API请求---设置协议、请求path、httpMethod
Step-4.定义API后端服务---后端服务类型/函数类型/服务名称/函数名称
Step-5.完成API创建
Step-6.发布API--设置为线上环境发布
1x04.检查是否启用nlp服务[若未开通则需开通]
nlp控制台,需要预先开通:alinlp.console.aliyun.com/overview
1x05演示
使用postman测试
托管页面演示
因为阿里云oss托管需要另外使用域名,这里就用AWS的S3来托管页面
一键访问:stanbck.s3-website.ap-east-1.amazonaws.com
二.亚马逊云serverless测试代码块
lambda采用角色授权方式,无需显式定义ak sk
### 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测试代码块
在腾讯云函数SCF中,采用角色授权方式
### 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)