函数计算搬站新利器---Custom Runtime演示

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 功能介绍 今天在函数计算上实现一个Web站点是比较简单的,比如: 部署基于 python wsgi web 框架的工程到函数计算 介绍的用WSGI框架结合函数计算部署Python的Web App。最近函数计算发布了一个新功能,使得搬站进一步简化了。

功能介绍

今天在函数计算上实现一个Web站点是比较简单的,比如: 部署基于 python wsgi web 框架的工程到函数计算 介绍的用WSGI框架结合函数计算部署Python的Web App。最近函数计算发布了一个新功能,使得搬站进一步简化了。
之前可能有同学有个困惑,我有一个网站,想用Serverless减成本,但是也不想改现有的代码,这个之前没办法直接跑在函数计算上。而利用Custom Runtime,我们真正可以做到不改一行代码搬站。
什么是Custom Runtime,顾名思义就是自定义Runtime,也就是说它不限制用户代码使何种语言或者何种框架,只要它能运行在Debian 9下即可。它和之前的Java, Python等runtime显著的不同就是用户的自主权更大了。在http 触发器场景下,只要你的WebApp监听在9000端口,你就可以把整个站点运行在函数计算中。下面我们介绍如何用CustomRuntime来运行一个wagtail CMS系统 (基于Django http://wagtail.io)

准备包含wagtail的代码包

由于对用户代码有极大的灵活性,CustomRuntime 要求在官方提供的fun 工具里的custom runtime image里编译用户代码,确保其线上运行环境和本地编译环境是一致的,这样最大程度减少系统差异带来的bug。
因此我们第一步就是用fun工具启动custom runtime image

  1. 在本地启动函数计算Custom Runtime的docker image,并将一个本地目录/local_directory映射到image的/code,如下所示

    cd /local_directory/
    fun install sbox --runtime custom --interactive
    AI 代码解读
  2. cd /code
  3. pip install wagtail -t .
  4. ./bin/wagtail start mysite
  5. cd mysite
  6. pip install -r requirements.txt
  7. python manage.py migrate
  8. python manage.py createsuperuser
    设定管理员密码
  9. python manage.py runserver 0.0.0.0:9000
    用浏览器访问127.0.0.1:9000,你就可以得到如下界面

wagtail_sample
OK,至此我们在本地能够运行一个最简单的wagtail站点。
说明: 可以用docker ps列出当前运行的image,然后手动启动custom image,将本地9000端口和docker的9000绑定,如下所示。

run -v /local_directory:/code -ti -p 9000:9000 --entrypoint sh aliyunfc/runtime-custom:build-1.6.0
AI 代码解读

退出docker,在本地进行下列操作。
10.接下来我们需要修改wagtail的配置文件,使其能运行在函数计算线上环境中,
在mysite/settings/base.py中修改database path, 并将本地的db.sqlite3文件copy到对应的NAS目录中(/mnt/disk为您函数计算服务中设置的NAS挂在点)

# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join("/mnt/disk", 'db.sqlite3'),
    }
}
AI 代码解读

另外,还需修改MEDIA_ROOT目录为NAS目录,如下面所示:

MEDIA_ROOT = os.path.join("/mnt/disk", 'media')
AI 代码解读

11.准备bootstrap文件为如下内容,且将bootstrap文件设置为可执行(chmod +xxx bootstrap):

#!/bin/bash
export PYTHONPATH=/code
./mysite/manage.py runserver 0.0.0.0:9000
AI 代码解读

12.在/local_directory目录下将整个文件夹打包:

zip -r code.zip *
AI 代码解读

创建函数计算custom_demo服务并配置NAS

请参考:https://help.aliyun.com/document_detail/87401.html
注意在NAS挂载点本地目录一栏配置为/mnt/disk, 此处和上述配置修改中的NAS目录一致。
UID和GID可以都设置为10001。

创建Custom Runtime函数并配置http trigger

1.将code.zip上传到OSS Bucket中,假定为Bucket和object名分别为bucket1, code.zip.
2.创建函数
./fcli function create --code-bucket bucket1 -o code.zip -f wagtail_demo -h "test handler" -s custom_demo -t custom
注意: 此处runtime参数为-t custom,-h "test handler"在本示例中不起作用,随便填一下就好。原因是整个逻辑都由用户提供的代码包来接管了,因而不需要handler。
3.创建http trigger
./fcli trigger create -f wagtail_demo -s custom_demo -t httpaccess -c /tmp/trigger.json --type http
其中/tmp/trigger.json内容如下:

{
  "triggerConfig":{
       "authType":"anonymous",
       "methods":["GET","POST”, “PUT”, “DELETE”, “HEAD”]
  }
}
AI 代码解读

至此,我们已经创建了一个Custom Runtime的函数。为了能运行wagtail,我们还需要配置域名。

为Custom Runtime函数配置自定义域名

参考文档:https://help.aliyun.com/document_detail/90722.html
Screen_Shot_2019_09_02_at_7_17_48_AM
访问绑定的域名,就可以出现wagtail的测试页面。

使用Custom Runtime小贴士

1.强烈推荐配置SLS日志服务,这对于诊断错误非常有用。
2.一定要正确编写bootstrap内容,该文件必须可执行。如果是脚本文件则需要加上#!/bin/bash提示。
3.代码的生成一定要用fc fun工具提供的image (fun install sbox --runtime custom --interactive) ,从而保证其内容和线上真实环境兼容。
比如用image里提供的gcc来编译C++代码,或者用Pip安装python代码。
4.在正式上线前,可以用fun工具提供的image进行测试,确保本地能跑通。

总结

以上步骤展示了如何利用函数计算Custom Runtime + NAS 来运行wagtail的例子。对于其他应用,其大致步骤是一致的。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
tonyxx
+关注
目录
打赏
0
0
0
0
3000
分享
相关文章
函数计算产品使用问题之如何在Custom Runtime中引用层中的依赖
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
函数计算产品使用问题之Custom Runtime函数的详细配置包括哪些
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
119 9
函数计算产品使用问题之如何使用PHP Runtime非内置扩展
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
Serverless 应用引擎操作报错合集之在执行环境 custom pre-deploy 时,命令 "go mod tidy" 失败了,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
448 0
Serverless 应用引擎产品使用之阿里函数计算中云函数怎么防止恶意刷流量的请求,例如:openresty的runtime如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
183 0
Serverless 应用引擎产品使用之阿里函数计算中使用custom container,如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
serverless 学习 | QCon2022-深圳: Serverless 高密度部署与 Web-interoperable Runtime 在字节跳动的实践
serverless 学习 | QCon2022-深圳: Serverless 高密度部署与 Web-interoperable Runtime 在字节跳动的实践
755 0
serverless 学习 | QCon2022-深圳: Serverless 高密度部署与 Web-interoperable Runtime 在字节跳动的实践
FC Java runtime 找不到函数入口问题
在函数计算中使用Java编程时,需要定义一个函数作为入口函数。由于Java有包的概念,因此执行方法和其他语言有所不同,需要带有包信息。在入口函数需要配置包信息
661 0
FC Java runtime 找不到函数入口问题
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力,用户只需提交 npx 命令即可“零改造”将开源 MCP Server 部署到云上,函数计算 FC 会准备好计算资源,并以弹性、可靠的方式运行 MCP 服务,按实际调用时长和次数计费,欢迎你在阿里云百炼和函数计算 FC 上体验 MCP 服务。
172 30

相关产品

  • 函数计算