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

news2024/11/28 13:55:17

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 CLI

To 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: aws
  runtime: nodejs18.x
  region: cn-northwest-1 # 中国宁夏

functions:
  api:
    handler: index.handler
    events:
      - 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 给我

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/975895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习Bootstrap 5的第四天

目录 表格 基础表格 实例 条纹表格 实例 带边框表格 实例 有悬停效果的行 实例 黑色/深色表格 实例 黑色/深色条纹表格 实例 可悬停的黑色/深色表格 实例 无边框表格 实例 上下文类 可用的上下文类: 实例 表头颜色 实例 小型表格 实例 响应…

SpringBoot实现Excel导入导出

话不多说&#xff0c;直接上代码 依赖文档 找到pom文件&#xff0c;如下图所示 引入需要的依赖 <!-- hutool--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.20</version>&…

如何利用顶级AI简历工具优化求职过程

追求梦想工作既是挑战又是机会。而在这一竞争激烈的职场中&#xff0c;拥有一份完美的简历成为与雇主初次互动的黄金名片。但问题是&#xff0c;如何才能使简历真正脱颖而出&#xff1f; 为何简历如此关键? 很多时候&#xff0c;简历的影响力被忽视&#xff0c;尽管它实际上…

2023年下半年广州/深圳软考(中/高级)认证报名,当然弘博创新

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…

新晋开源项目 DisJob 加入 Dromara 社区,分布式任务调度框架

作者简介 网名Ponfee&#xff0c;Dromara开源组织成员&#xff0c;dromara/disjob项目作者。在国内多个一线大厂待过&#xff0c;有过后端、全栈、大数据等相关工作经历。 关于Disjob Disjob是天然为支持分布式长任务执行而设计的&#xff0c;它除了具备常规的任务调度功能外…

K210-关于K210基本操作

1.点亮RGB灯 from modules import ybrgb RGB ybrgb() #设置RGB颜色&#xff1a;RGB.set(r, g, b) #参数r控制红灯开关&#xff0c; #参数g控制绿灯开关&#xff0c; #参数b控制蓝灯开关&#xff0c; #输入0表示关闭&#xff0c;输入1表示开启。 RGB.set(1, 0, 0)2.按键功能 …

【Arduino实验笔记】机械臂篇(二) 开关控制LED灯

文章目录 前言硬件介绍实物接线图软件实现库函数介绍程序代码 下一篇的目标总结 前言 本章节介绍如何通过按键控制LED灯&#xff0c;在上一章节中&#xff0c;我们学习了如何控制IO输出电平。而本章节&#xff0c;我们将学会如何读取IO输入的电平。 硬件介绍 观察独立按键&am…

Taurus: 面向机器学习的数据面架构

日益复杂的网络和多样化的工作负载要求网络内置更多的自动化决策能力&#xff0c;通过可编程网络设备在用户面支持机器学习工作负载就是一个可能的选项&#xff0c;本文提出了一种支持用户面推理的架构设计&#xff0c;相对控制面机器学习的性能有数量级的提升。原文: Taurus: …

联想集团财报不及华尔街预期,财务业绩恐将继续恶化

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 华尔街对联想集团财报的预测 在联想集团&#xff08;00992&#xff09;公布2024财年第一季度财务业绩之前&#xff0c;华尔街分析师就曾预测&#xff0c;联想集团的收入和利润将实现强劲增长。 具体而言&#xff0c;根据S&…

VB6.0 设置窗体的默认焦点位置在 TextBox 中

文章目录 VB6.0 窗体的加载过程确定指针的焦点位置添加代码效果如下未设置指定焦点已设置焦点 VB6.0 窗体的加载过程 在VB6.0中&#xff0c;窗体&#xff08;Form&#xff09;加载时会触发多个事件&#xff0c;这些事件按照特定的顺序执行。下面是窗体加载过程中常见事件的执行…

高忆管理:光刻胶概念强势拉升,同益股份、格林达涨停

光刻胶概念5日盘中强势拉升&#xff0c;截至发稿&#xff0c;同益股份、格林达涨停&#xff0c;波长光电、晶瑞电材涨超7%&#xff0c;容大感光涨逾5%&#xff0c;华懋科技、茂莱光学、苏大维格、南大光电等均走强。 音讯面上&#xff0c;据新加坡《联合早报》网站9月2日报导&…

Android jni引用第三方so动态库和.a静态库并且调用(c)方法

最近花了一周时间来入门学习 Android JNI方面的知识&#xff0c;因为后续的工作很多需要用到c c库&#xff0c;我需要用jni来包装一下c函数&#xff0c;来提供给上次java调用。总之多学点知识对自己有好处。 案例效果&#xff1a; 上文我们讲解了 android studio cmake生成.a…

Python可复用函数的 6 种最佳实践

对于在一个有各种角色的团队中工作的数据科学家来说&#xff0c;编写干净的代码是一项必备的技能&#xff0c;因为&#xff1a; 清晰的代码增强了可读性&#xff0c;使团队成员更容易理解和贡献于代码库。 清晰的代码提高了可维护性&#xff0c;简化了调试、修改和扩展现有代码…

【机组】计算机系统组成课程笔记 第一章 计算机系统概论

1.1 计算机的基本概念 电子计算机是一种不需要人工直接干预&#xff0c;能够自动、高速、准确地对各种信息进行处理和存储的电子设备。 1.1.1 存储程序的工作方式 1. 单一的处理部件 2. 存储单元是定长的线性组织 3. 存储空间的单元直接寻址 4. 使用低级机器语言&#xf…

基于Hugo 搭建个人博客网站

目录 1.环境搭建 2.生成博客 3.设置主题 4.将博客部署到github上 1.环境搭建 1&#xff09;安装Homebrew brew是一个在 macOS 操作系统上用于管理软件包的包管理器。类似于centos下的yum或者ubuntu下的apt&#xff0c;它允许用户通过命令行安装、更新和管理各种软件工具、…

JavaScript 执行上下文和作用域链

1 执行上下文 执行上下文决定了变量和函数可以访问哪些数据。 一个执行上下文就对应一个仅后台可访问的变量对象&#xff0c;其中保存有该上下文的局部变量、参数和函数声明。 最外层的上下文称为全局上下文。宿主环境不同&#xff0c;全局上下文的关联对象就不同。在浏览器…

在ubuntu20.04上安装arm-linux-gcc 4.4.3

1下载地址 [http://www.friendlyelec.com.cn/download.asp] 2.将 arm-linux-gcc-4.4.3.tar.gz 拷贝到 /bin目录 无法拷贝怎么办&#xff1f; 出现这种情况是 Linux 拷贝文件时权限不够&#xff0c; 运行命令 sudo nautilus&#xff0c; 打开一个具有管理员权限的文件管理器&am…

C# 子类如何访问子类的方法(同一父类)

在继承关系中&#xff0c;子类可以通过创建另一个子类的对象来访问其方法。下面是一个示例&#xff0c;展示了子类如何访问另一个子类的方法&#xff1a; public class Animal {public virtual void Speak(){Console.WriteLine("我是动物。");} }public class Cat :…

直播平台源码开发搭建APP的DASH协议:流媒体技术其中一环

在直播平台源码APP中&#xff0c;有着许许多多、多种多样的功能&#xff0c;比如短视频功能&#xff0c;帮助我们去获取信息&#xff0c;看到全世界用户身边发生的事情或是他们的生活&#xff1b;又比如直播功能&#xff0c;为用户提供了实时的娱乐享受&#xff0c;还让一些用户…

嬴图Ultipa | 实时图计算如何将反洗钱进行到底?

电影《孤注一掷》中&#xff0c;首度曝光了境外网络诈骗全产业链黑幕&#xff0c;而洗钱是最为关键的一环。 王大陆饰演的赌徒阿天将偷和抵押房产凑够的800万元一次性汇入欺诈团伙的博彩账户&#xff0c;由于涉及大额资金流动&#xff0c;警方已经开始监控。令人意外的是&#…