60 秒搭建无服务 Golang 应用

栏目: Go · 发布时间: 5年前

内容简介:在这篇简短的文章中,我将说明使用Up 适用于任何 Go 应用程序,没有必要专门为了构建无服务而去重写你的应用程序,但是如果你想跟随写,你可以将以下内容复制粘贴到你项目中的你可能已经注意到在上一段代码中使用了

在这篇简短的文章中,我将说明使用 Apex Up 对任何 Golang 应用程序或 API 是如何快速的生产出无服务环境的。这篇文章假设你在你的机器上配置了 AWS credentials ,因为 Up 是部署到 AWS Lambda 和 API 网关上的。

Up 适用于任何 Go 应用程序,没有必要专门为了构建无服务而去重写你的应用程序,但是如果你想跟随写,你可以将以下内容复制粘贴到你项目中的 main.go 文件中:

package main

import (
	"encoding/json"
	"log"
	"net/http"
	"os"
)

var pets = []string{
	"Tobi",
	"Loki",
	"Jane",
}

func main() {
	port := os.Getenv("PORT")
	http.HandleFunc("/pets", getPets)
	log.Fatal(http.ListenAndServe(":"+port, nil))
}

func getPets(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json")
	json.NewEncoder(w).Encode(pets)
}

你可能已经注意到在上一段代码中使用了 PORT 环境变量,这是一个由 Up 传递给你应用程序的一个端口号,这样它就知道去哪里监听请求了,除此之外它是一个完全正常的 Golang net/http 应用程序。

让我们来看看 Up 实际上是怎么工作的!

Proxy 如何工作

当你看到术语 "serverless" 的时候,你可能想到 FaaS - 或是功能即为服务 - 但是这不是你将通过 Up 找到的,它将你的整个应用程序部署到单个 AWS Lambda 函数中,让你专注于构建你的 API 或者 应用程序,因为你可以通过 go run main.go 像你在本地开发一样简单。

当你的应用程序接收请求时,将由 API Gateway (一个由 AWS 提供的无服务负载均衡器)处理。请求传递给你的 Lambda 函数,该函数通常类似于以下内容(在 Node.js 中),你将使用 HTTP 的 event 作为请求,返回对象作为响应进行交互。这在简单的场景中可以很好,但是它将你锁定在 FaaS 中,并且在本地开发可能更加困难。

exports.handle = async function(event, context) {
  return {
    statusCode: 200,
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(event)
  }
}

为了允许 "vanilla" HTTP 应用程序能够工作,Up 处理 API Gateway 事件,将其转换为一个真正的 HTTP 请求。Up 发送请求到你的应用程序进程中,然后将响应转换回 API Gateway 期望的返回值。

由于 Up 充当你应用程序的反向代理,因此它可以提供中间件功能,例如 CORS,响应压缩,日志,错误页面等等。

部署你的 API

为了开始部署应用程序,首先安装 up

$ curl -sf https://up.apex.sh/install | sh

在你的项目目录中运行 up ,将提示你创建一个 up.json 文件:

60 秒搭建无服务 Golang 应用

Up 将指导你选择应用程序的名称,要使用的 AWS 配置文件凭据和 AWS 区域。

60 秒搭建无服务 Golang 应用

大约 60 秒后,你会有一个完全可以投入生产的无服务环境能够运行!当初始部署完成后,后续部署将会更快。

60 秒搭建无服务 Golang 应用

列出的端点是 staging 环境,默认情况下还有一个生产环境,但是你也可以定义 个性化阶段

使用 curl 尝试你的新 API:

$ curl https://jb8mxj0cda.execute-api.eu-west-2.amazonaws.com/staging/pets
["Tobi","Loki","Jane"]

或者,你可以使用 up url 扩展到同一端点:

$ curl up url/pets
["Tobi","Loki","Jane"]

就这样了!如果你有兴趣了解更多 Up 提供的信息,请查看以下功能或 文档 。完成后,运行以下命令去删除应用程序和资源:

$ up stack delete

OSS 功能

  • HTTP 中间件,如错误页面,CORS,重定向,静态文件服务等
  • 基础架构即代码 - 使用行业最佳实践去管理你的配置
  • 无限的可扩展性 - 无需担心扩展的机器,Up 是按需的
  • 低成本 - 只为你使用的付费,每月有 1,000,000 次 AWS 免费请求
  • 基于阶段部署,支持自定义阶段
  • 隔离 - 不用担心多租户 PaaS 的停机时间,部署到你自己的 AWS
  • 经济高效的结构化日志记录仅需 $0.5/gb
  • 请求隔离 - 每个请求与它自己的 Lambda 隔离,crash 永远不会让你的整个应用程序崩溃
  • 富有表现力的结构化日志查询(例如: up logs 'error message = "login failed" region="us-west-2"'
  • 免费的 SSL 和自定义域名支持
  • Slack chat 社区支持

专业功能

  • 单月固定费用为 $10 每月,团队成员无需额外费用
  • 使用 Git 继承部署日志历史记录
  • 即时回滚到以前的部署或者 Git tag/commit
  • 加密环境变量,集中并且定义每一个阶段
  • 通过 SMA,Slack 和邮件 提醒 错误和性能问题
  • 支持 区域端点
  • 支持 Lambda 层
  • 优先邮件支持
  • 保持项目活力

链接


以上所述就是小编给大家介绍的《60 秒搭建无服务 Golang 应用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

村落效应

村落效应

[加] 苏珊·平克(Susan Pinker) / 青涂 / 浙江人民出版社 / 2017-3-1 / CNY 69.90

 面对面的接触是作为社会性动物的人类最古老、深刻的需求。在互联网时代,社交媒体已经成为人际沟通的主体,人际关系的维系越来越被社交媒体上的点赞、转发、评论代替,在冰冷的互动中,我们失去了真实与温度。面对面的人际关系与接触能让人感受到如村落生活般的归属感,它是一个人免疫力、复原力和影响力的真正来源。虽然互联网拥有毋庸置疑的优势,但是如果我们渴望快乐、健康、长寿……没错,还有智慧,我们就需要想方设法腾......一起来看看 《村落效应》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具