当前位置: 首页 > news >正文

Serverless Framework 亚马逊云(AWS)中国地区部署指南

Image

Serverless Framework 亚马逊云(AWS)中国地区部署指南

  • Serverless Framework 亚马逊云(AWS)中国地区部署指南
    • 前言
    • 前置准备
      • 1. 账号的注册
      • 2. 全局安装 serverless
      • 3. 设置你的系统环境变量
      • 4. 设置部署凭证
    • 快速部署一个 hello world
      • 创建入口函数 index.js
        • event 参数
        • context 参数
        • 函数体
      • 创建部署文件 serverless.yml
      • 部署
    • Next Chapter
    • 完整示例及文章仓库地址

前言

Serverless Framework 是业界非常受欢迎的无服务器应用框架,开发者无需关心底层资源即可部署完整可用的 serverless 应用架构。Serverless Framework 具有资源编排、自动伸缩、事件驱动等能力,覆盖编码-调试-测试-部署等全生命周期,帮助开发者通过联动云资源,迅速构建 serverless 应用。

目前 Serverless Framework 默认支持, 同时也是支持最好的云服务商是 亚马逊云(AWS),亚马逊云在中国地区,目前主要服务企业用户,而且只开放了 宁夏北京 2个地域,基础设施方面分别属于 西云数据光环新网。幸运的是亚马逊也给中国这 2 个地域添加了支持,地域分别为 cn-northwest-1(宁夏) 和 cn-north-1(北京),所以我们部署的时候需要显式声明它们,不然就会因为中国和国外的账号不互通,导致部署失败。

接下来就让我们看看,如何快速部署函数在中国区的亚马逊上吧!

前置准备

  1. 一个中国区亚马逊的账号
  2. 全局安装 serverless
  3. 设置你的系统环境变量
  4. 设置部署凭证

1. 账号的注册

你可以登录 https://www.amazonaws.cn/ 进行注册,记得提前准备好你的企业相关信息。

2. 全局安装 serverless

没有安装 nodejs 环境的,记得提前安装,官方链接:https://nodejs.org/en

执行 npm install -g serverless 来 全局安装 serverless

安装完成后,全局会注册2个指令:

  • serverless
  • sls

slsserverless 命令的简写,以后章节的命令都用 sls

执行 sls -v 出现:

Framework Core: 3.34.0
Plugin: 6.2.3
SDK: 4.3.2

这代表你已经安装成功了!

3. 设置你的系统环境变量

编辑你的系统环境变量,添加 SLS_GEO_LOCATION=no-cn

这是为了避免 serverless cli 在中国时区,默认走腾讯云云函数部署的行为。

4. 设置部署凭证

在亚马逊管理面板,点击右上角的 安全凭证,在 我的安全凭证 里的 访问密钥 中,点击 创建访问秘钥,创建使用案例为 在 亚马逊云科技 计算服务上运行的应用程序,同意条款后完成步骤。

这样你就生成了 Access KeyAccess Secret

然后为了本地使用 Access KeyAccess Secret 去部署函数,我们需要创建 "~/.aws/credentials" 文件(~为当前用户目录),内容如下:

[default]
aws_access_key_id=xxxx
aws_secret_access_key=xxx

这是为了让 Serverless Framework 去读取本地的访问凭证进行部署。不然你就需要去注册 Serverless Framework Account 来进行管理了。

快速部署一个 hello world

正常情况下你执行 sls 就会出现提示让你去新建一个函数项目,然而假如你之前没有添加 SLS_GEO_LOCATION=no-cn 这个环境变量的话,就会出现上述第3点问题:

Serverless Framework CLI no longer supports Serverless Tencent CLITo run Serverless Framework without issues in China region, ensure: SLS_GEO_LOCATION=no-cn environment variable

然而,即使你添加了环境变量,顺利执行了 sls 来初始化项目,大概率也会因为一些未知的网络原因下载失败。

所以这里笔者推荐你直接去 https://github.com/serverless/examples 去下载模板。

这里推荐使用基础模板 aws-node-http-api

它部署成功后,能够快速为你创建一个 AWS Lambda函数(云函数) 和一个 AWS API Gateway(api网关),这样你部署成功之后,AWS API Gateway 会直接给你分配一个http公网地址,你可以直接访问它来触发你的云函数。

整体的调用流程如下:

api-gateway

部署AWS API Gateway之后访问域名永远是 403 的问题,这是因为你需要在亚马逊中国完成 ICP备案,才能正常使用 API 网关,不然默认端口 80/8080/443 都是关闭的,所以返回都是 403:

{"message": "Forbidden"
}

创建入口函数 index.js

我们新建一个函数文件夹 aws-node-http-api, 在里面创建 index.js 文件

module.exports.handler = async (event, context) => {return {statusCode: 200,body: JSON.stringify({message: "Go Serverless v3.0! Your function executed successfully!",input: event,},null,2),};
};

代码解读:

这段代码使用 commonjs 格式编写,导出一个 handler 函数

这个函数有 2 个参数 eventcontext (实际上还有第三个参数 callback, 不过都已经 3202年了,回调写法早就不流行了,故省略,全篇使用 async/await)

event 参数

其中 event 为事件参数,我们云函数绑定的触发器在触发的时候,触发事件都会转化成这个对象来调用我们的代码。

比如我们一个函数绑定了多个触发器:

  • HTTP 网关触发器
  • S3/OSS/COS 这种对象存储触发器
  • Schedule/Cron 这种job触发器

那它们各自触发函数的时候,进入我们函数时的 event 类型就是不同的,这样我们就可以根据这个类型,去执行不同的代码分支,返回不同的结果。

context 参数

context 参数指的是运行函数时,传入进来的上下文,这点每个云厂商都是不同的。但里面大多都会包含一些调用信息,函数信息,和执行的环境信息,以及暴露一些特定的方法。比如 functionName / requestId 等等…

这里笔者给出一份 AWS 在上下文中给你的字段清单链接,供你参考:

https://docs.aws.amazon.com/lambda/latest/dg/nodejs-context.html

函数体

这里就是调用函数时去执行的代码片段了

这里我们就简单返回了一个 js 对象:

  return {statusCode: 200,body: JSON.stringify({message: "Go Serverless v3.0! Your function executed successfully!",input: event,},null,2),};

为什么要返回成这个格式? 实际上这是 AWS API Gateway 决定的,你要执行函数之后,获得结果再通过它返回给用户,就必须按照它要求的格式返回。

所以你可以看到这里返回了一个 { statusCode: number, body: string } 格式。当然具体的格式不同的云厂商也会不同,这里我也为你找到了这个格式的百科大全文档:

https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html

所以你根据这个文档多返回一些字段以达到你 set cookie / 修改响应头 的效果。

创建部署文件 serverless.yml

这里我们直接在刚刚创建的 index.js 同目录下,快速创建一个 serverless.yml,内容如下:

service: serverless-http-api
frameworkVersion: '3'provider:name: awsruntime: nodejs18.xregion: cn-northwest-1 # 中国宁夏functions:api:handler: index.handlerevents:- httpApi:path: /method: get

这里我们重点介绍一下这些字段:

  • service / frameworkVersion 都是元数据,来告诉云服务商/serverless cli,应用程序名是什么,使用的框架版本是什么

  • provider 则是我们用来描述,使用的什么云服务商的,什么地域的,什么运行时来进行部署云函数

  • functions 则是描绘函数的一些信息,比如这个 yml 中的 functions 区域块,就告诉云服务商,我有一个名为 api 的函数需要部署,它的函数触发入口点是我 index.js 导出对象中的 handler 函数,它还绑定了一个 API网关(v2) 触发器,用 HTTP GET 请求访问这个网关的 / 路径,就可以触发这个函数啦!

于是当我们声明完成这些信息之后,就可以愉快的部署了!

部署

我们直接在当前项目目录下执行:

sls deploy

于是我们的项目代码先是被本地打包到当前目录下的 .serverless 文件夹下方,然后 serverless framework 把我们函数压缩文件包(.zip) 上传到 AWS 上,告诉它进行部署,成功之后就会返回如下信息:

Deploying serverless-http-api to stage dev (cn-northwest-1)✔ Service deployed to stack serverless-http-api-dev (152s)endpoint: GET - https://xxxxxxxxxx.execute-api.cn-northwest-1.amazonaws.com/
functions:api: serverless-http-api-dev-api (1.9 kB)

这样我们第一个函数就部署成功了,你可以直接打开浏览器,敲这个地址就会返回数据:

{"message": "Go Serverless v3.0! Your function executed successfully!","input": {...}
}

恭喜你!你正式踏入了 serverless 的世界!接下来更广阔的世界会为你打开.

Next Chapter

当然做到这些仅仅是入门,接下来我将会向你介绍更复杂的项目,带你走一遍笔者曾经走过的路。

下一篇,《typescript 支持与本地调试》中,将会介绍如何添加 typescript 支持和本地调试(这句是废话了~),欢迎阅读。

完整示例及文章仓库地址

https://github.com/sonofmagic/serverless-aws-cn-guide

如果你遇到什么问题,或者发现什么勘误,欢迎提 issue 给我

相关文章:

Serverless Framework 亚马逊云(AWS)中国地区部署指南

Serverless Framework 亚马逊云(AWS)中国地区部署指南 Serverless Framework 亚马逊云(AWS)中国地区部署指南 前言前置准备 1. 账号的注册2. 全局安装 serverless3. 设置你的系统环境变量4. 设置部署凭证 快速部署一个 hello world 创建入口函数 index.js event 参数context 参…...

【Spring Cloud系统】- 轻量级高可用工具Keepalive详解

【Spring Cloud系统】- 轻量级高可用工具Keepalive详解 文章目录 【Spring Cloud系统】- 轻量级高可用工具Keepalive详解一、概述二、Keepalive分类2.1 TCP的keepalive2.2 HTTP的keep-alive2.3 TCP的 KeepAlive 和 HTTP的 Keep-Alive区别 三、nginx的keepalive配置3.1 nginx保持…...

【JAVA-Day05】深入理解Java数据类型和取值范围

深入理解Java数据类型和取值范围 深入理解Java数据类型和取值范围摘要一、Java的数据类型1.1 存储单位1.2 Java基本数据类型 二、Java的取值范围2.1 变量定义2.2 取值范围验证 三、总结 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻…...

“JSR303和拦截器在Java Web开发中的应用与实践“

目录 引言JSR303什么是JSR303?为什么要使用JSR303?常用注解快速入门JSR303 拦截器什么是拦截器拦截器与过滤器应用场景快速入门拦截器 总结 引言 在Java Web开发过程中,我们经常会遇到需要对输入数据进行验证和处理,同时需要对请求进行拦截与控制的需…...

第六章 图 六、最小生成树(Prim算法、Kruskal算法)

一、定义 对于一个带权连通无向图G(V,E),生成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有生成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的最小生成树(Minimum-Spanning-Tree, MST)。 二、手…...

机器学习笔记 - 什么是 MLOps?

什么是 MLOps? Machine learning operations (MLOps) 作为一个新兴领域,MLOps 在数据科学家、机器学习工程师和人工智能爱好者中迅速崛起。MLOps 代表机器学习操作。MLOps 是机器学习工程的核心功能,专注于简化将机器学习模型投入生产、然后维护和监控的过程。MLOps 是一种…...

初阶扫雷(超详解)

✨博客主页:小钱编程成长记 🎈博客专栏:C语言小游戏 🎈推荐相关博文:初阶三子棋(超详解) 初阶扫雷 1.游戏介绍2.基本思路3.实现前的准备4.实现步骤4.1 打印菜单4.2 初始化扫雷棋盘4.3 打印扫雷棋…...

计算机视觉CV:1000字总结介绍

目录 1.CV计算机视觉 2.计算机视觉的应用 3.计算机视觉的基本技术 4.计算机视觉的发展趋势 1.CV计算机视觉 计算机视觉(Computer Vision, CV)是指通过计算机技术模拟人类视觉,让计算机能够“看”懂和理解图像和视频。计算机视觉发展了多…...

JavaScript 之 Symbol 数据类型

一、简介 ​ symbol类型是ES6新引入的一种基本数据类型,该类型具有静态属性和静态方法。其中静态属性暴露了几个内建的成员对象,静态方法暴露了全局的symbol注册。 ​ symbol类型具有以下特点:① 唯一性:每个symbol值都是唯一的…...

在Docker中运行PostgreSQL数据库

1.下载Docker 2.设置DockerHub账号 3.运行Docker并下载Image 4.启动PostgreSQL Image 5.连接到数据库运行SQL docker run --name some-postgres -p 5432:5432 -e POSTGRES_PASSWORDmysecretpassword -d postgres 开放端口从Docker容器到主操作系统,这将允许我们…...

实现Spring Boot集成MyBatis

引言 在Java开发中,Spring Boot和MyBatis是非常常用的框架。Spring Boot是一个快速开发应用程序的框架,而MyBatis是一个持久化框架,可以方便地操作数据库。本文将介绍如何使用Idea集成Spring Boot和MyBatis,并创建一个简单的示例…...

关于算法的时间复杂度(度量算法执行时间的两种方法、渐进时间复杂度、时间复杂度的几个性质、渐进估算、常见的渐进时间复杂度排序)

目录 度量算法执行时间的两种方法 事后统计法(Post Hoc Analysis): 事前统计法(Pre Hoc Analysis): 渐进时间复杂度 时间复杂度的几个性质 渐进估算 常见的渐进时间复杂度排序 度量算法执行时间的两…...

SpringBoot项目--电脑商城【显示商品详情功能】

1.持久层[Mapper] 1规划需要执行的SQL语句 根据商品id显示商品详情的SQL语句 SELECT * FROM t_product WHERE id?2 设计接口和抽象方法 在ProductMapper接口中添加抽象方法 /*** 根据商品id查询商品详情* param id 商品id* return 匹配的商品详情,如果没有匹配…...

VLAN笔记

虚拟VLAN 什么是VLAN VLAN的作用 VLAN的优缺点 VLAN的配置方法 VLAN有哪些接口模式 access与trunk接口的区别 Hybrid接口 拓扑实验enspCiscoH3C ​ 什么是VLAN VLAN(Virtual Local Area Network)又称虚拟局域网,是指在交换局域网的基础上&a…...

分类算法系列⑤:决策树

目录 1、认识决策树 2、决策树的概念 3、决策树分类原理 基本原理 数学公式 4、信息熵的作用 5、决策树的划分依据之一:信息增益 5.1、定义与公式 5.2、⭐手动计算案例 5.3、log值逼近 6、决策树的三种算法实现 7、API 8、⭐两个代码案例 8.1、决策树…...

前端面试(基础)

一、CSS 1.说一下CSS的盒模型。 在HTML页面中的所有元素都可以看成是一个盒子 盒子的组成:内容content、内边距padding、边框border、外边距margin 盒模型的类型: 标准盒模型 margin border padding content IE盒模型 margin content(border…...

element-ui switch开关组件二次封装,添加loading效果,点击时调用接口后改变状态

先看效果: element-ui中的switch开关无loading属性(在element-plus时加入了),而且点击时开关状态就会切换,这使得在需要调用接口后再改变开关状态变得比较麻烦。 思路:switch开关外包一层div,给…...

【GAN小白入门】Semi-Supervised GAN 理论与实战

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊🚀 文章来源:K同学的学习圈子论文原文:Semi-Supervised Learning with Generative Adversarial Networks.pdf在学习GAN的时候你有没有想过这样一个问题呢,如果我们生成的图像是带有标签的,例如数…...

Python自动化测试(1)-自动化测试及基本技术手段概述

生产力概述 在如今以google为首的互联网时代,软件的开发和生产模式都已经发生了变化, 在《参与感》一书提到:某位从微软出来的工程师很困惑,微软在google还有facebook这些公司发展的时候,为何为感觉没法有效还击&…...

小程序中如何查看会员的余额和变更记录

​通过查看会员的余额和变更记录,可以帮助商家更好地管理会员资金,提供更好的服务和用户体验。下面将介绍小程序中如何查看会员的余额以及余额的变更记录。 1. 找到指定的会员卡。在管理员后台->会员管理处,找到需要查看余额和记录的会员…...

【项目经验】elementui--table表格自定义表头及bug

一.思路 首先我们肯定得循环表头,我们原生js封装的表格的实现原理就是这样。其次我们要把自己循环的label显示出来,对应的prop也要和表格数据相对应。用div标签循环都会出现错误(div里面套column),大家不要踩坑。第一…...

flink实现kafka、doris精准一次说明

前言说明:本文档只讨论数据源为kafka的情况实现kafka和doris的精准一次写入 flink的kafka连接器已经实现了自动提交偏移量到kafka,当flink中的数据写入成功后,flink会将这批次数据的offset提交到kafka,程序重启时,kafka中记录了当前groupId消费的offset位置,开始消费时将…...

【git】git commit、push之前自动执行脚本

可以使用 Git 的钩子(hooks)功能。Git 钩子是在特定事件发生时执行自定义脚本的方式。 下面是一个使用 pre-commit 钩子的例子,用于在执行 git commit 之前自动执行脚本: 进入你的 Git 仓库的根目录。进入 .git/hooks 目录&…...

基于springboot+vue的加盟店管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

Gin中的Cookie和Session的用法

Gin中的Cookie和Session的用法 文章目录 Gin中的Cookie和Session的用法介绍Cookie代码演示 Session代码展示 介绍 cookie 和 session 是 Web 开发中常用的两种技术,主要用于跟踪用户的状态信息。 Cookie func (c *Context) Cookie(name string, value string, max…...

【算法】反悔贪心

文章目录 反悔贪心力扣题目列表630. 课程表 III871. 最低加油次数LCP 30. 魔塔游戏2813. 子序列最大优雅度 洛谷题目列表P2949 [USACO09OPEN] Work Scheduling GP1209 [USACO1.3] 修理牛棚 Barn RepairP2123 皇后游戏(🚹省选/NOI− TODO) 相关…...

Hadoop的安装和使用,Windows使用shell命令简单操作HDFS

1,Hadoop简介 Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的,它具有以下几个方面的特性。 高可靠性。 高效性。 高可扩展性。 高容错性。 成本低。 运行在Linux平台上。 支持多种编程…...

ubuntu上ffmpeg使用framebuffer显示video

这个主题是想验证使用fbdev(Linux framebuffer device),将video直接显示到Linux framebuffer上,在FFmpeg中对应的FFOutputFormat 就是ff_fbdev_muxer。 const FFOutputFormat ff_fbdev_muxer {.p.name "fbdev",.p.long_…...

82 # koa-bodyparser 中间件的使用以及实现

准备工作 安装依赖 npm init -y npm i koakoa 文档:https://koajs.cn/# koa 中不能用回调的方式来实现,因为 async 函数执行的时候不会等待回调完成 app.use(async (ctx, next) > {console.log(ctx.path, ctx.method);if (ctx.path "/login…...

计算一串输出数字的累加和

计算一个文件内数字的累加和 awk {sum$1}END{print sum} 直接抽取数据以后的打印是这样的 cat step-iostat.1125.log |grep sda |cut -c "49-56" |awk {sum$1}END{print sum}...

沈阳公司做网站的/百度信息流怎么收费

说明 最近看到许多博主的页面特别漂亮,都有目录导航,方便大家阅读浏览。于是一搜索,发现已经有很多相应的教程《JS自动生成博文目录》。 但是没有一个针对BOOk皮肤的,比较喜欢这个皮肤,那就自己动手实现一个咯。 具体代…...

网站目录链接怎么做的/上海抖音seo

Javascript工程师,总会面对一个问题,数据结构和算法会成为自己的短板,不仅是对非科班,甚至一些科班出身的工程师来说也是自己的短板,于是就有了这系列文章。基础决定深度,前端入门易,上升困难&a…...

做类似淘宝的网站设计需要什么/网络整合营销推广

本文主要通过实现Thread 类来展现两种编程风格的不同点。 很多人没有区分“面向对象”和“基于对象”两个不同的概念。面向对象的三大特点(封装,继承,多态)缺一不可。通常“基于对象”是使用对象,但是无法利用现有的对…...

有什么做服装的网站好/长春网站快速排名提升

需求1:跑大sql内存不够用 虽然知道怎么改,但是对这几个配置一直是模糊不清晰,所以特意在下面写下,我所知道的。 需求2:Eclipse崩溃,错误提示: MyEclipse has detected that less than 5% of the…...

那个网站教做仙芋鲜/中国域名注册官网

转载:https://www.cnblogs.com/gavanwanggw/p/6743774.html MFC中获取各个窗口之间的句柄或者指针对象的方法 MFC在非常多的对话框操作中,我们常常要用到在一个对话框中调用还有一个对话框的函数或变量.能够用例如以下方法来解决. HWND hWnd::FindWindow(NULL,_T…...

室内装饰设计网站/seo推广人员

Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。 1.1 版本控制 版本控制是一种记录…...