无服务器和云原生的目标始终是“更快地构建、发布和扩展”,而无需过多担心基础设施。
随着越来越多的公司全力投入AWS、Google Cloud和Azure(Datadog 2023报告),对合适的技术栈的需求从未如此之高。
但有那么多工具可供选择,选择完美的工具栈可能让人感到不知所措。这就是为什么我选出了7个工具,帮助你轻松构建、部署和扩展云原生应用程序。
开始吧!
这是一张有趣的GIF图片。
……
Encore – 专为云原生开发者打造的后端框架Encore 是一个用于构建类型安全应用的云原生后端框架工具,它让你可以无需手动管理基础架构,就可以轻松构建、测试和部署服务。
这个框架非常适合于 Go 和 TypeScript 开发者,因为它让你可以专注于编写项目的代码和逻辑,而它会自动为你生成云端基础设施。
生成的基础设施将运行和监控你的项目,使整个部署过程变得非常简单且轻松愉快。
另外,它也让构建分布式系统变得更简单。
如果你还是对尝试Encore没兴趣,这里有一些我觉得很有趣的特性可能会让你心动:
- Encore 生成并更新您系统中创建的 API 和服务的文档。
- Encore 帮助开发人员专注于应用逻辑,并帮助他们遵循最佳实践,如身份验证、服务间通信、跟踪等。
- 此外,Encore 还提供了一个可选的 云平台,用于在 AWS 和 GCP 上自动化 DevOps 流程。
对于周期性的或重复性的任务,Encore.ts
提供了一种声明式的方式来使用 Cron Jobs。通过这种方式,你无需担心基础设施的维护,因为 Encore 负责调度、监控和执行这些 Cron Jobs。
这里就有一个简单的 Cron 任务定义示例:
import { CronJob } from "encore.dev/cron";
import { api } from "encore.dev/api";
// 在过去的两小时内向所有人发送欢迎邮件。
const _ = new CronJob("welcome-email", {
title: "“发送欢迎邮件”",
every: "2h",
endpoint: sendWelcomeEmail,
})
// 向最近注册的所有人发送欢迎邮件。
// 它是幂等的:每个人只会收到一封欢迎邮件。
export const sendWelcomeEmail = api({}, async () => {
// 发送欢迎邮件的逻辑...
});
点击全屏按钮切换到全屏模式,然后点击退出按钮退出全屏
部署完成后,Encore 会自动注册 Cron Job 并按计划运行。
你可以在Encore Cloud控制台上查看定时任务的执行情况:
如果你正在使用 Go 或 TypeScript 并希望专注于开发工作,而无需担心手动基础设施管理,Encore 正是为你准备的。
今天就试试Encore吧,更快捷、更智能、更轻松地构建。
等等
StackQL – 云基础设施的 SQL 接口工具一旦你的应用开始运行,下一个挑战就是通过编程方式管理基础设施。这时候,像StackQL这样的基础设施即代码(IaC)工具就派上用场了。
如果你是一个SQL极客,你会爱上StackQL及其独特的SQL语法。它让基础设施管理变得像写数据库查询一样简单。
StackQL 是我第一次遇到的使用 SQL 命令来管理云资源的工具。它使用 SQL 命令在例如 AWS、GCP 和 Azure 等提供商上创建、查询以及管理云资源。
https://www.youtube.com/watch?v=YuEmv58Ap18
点击链接观看视频
通过 StackQL,您可以构建云基础架构,例如创建数据库,制作报告或查询资源信息,而不必学习特定的脚本语言或针对云的 SDK。
你可以只需一条命令安装 StackQL:
请运行以下命令安装 StackQL:
brew install stackql
全屏 查退出全屏
当在StackQL中构建基础设施时,您可以使用SQL查询来创建Google Cloud上的虚拟机,
-- 插入到 google.compute.instances (项目, 区域, 数据名称, 数据机器类型, 数据网络接口)
SELECT
'my-project',
'us-central1-a',
'my-vm',
'n1-standard-1',
'[{"network": "global/networks/default"}]';
点击这里进入全屏模式,点击这里退出全屏
此命令会在谷歌云中使用您指定的项目名称、区域(zone)、机器类型和网络接口配置来创建虚拟机实例。
你也可以通过 StackQL 查询云基础设施资源来生成报告。
SELECT
项目,
资源类型,
SUM(成本) AS 总费用
FROM
billing.cloud_costs
WHERE
开始使用时间 >= '2025-03-01'
AND 结束使用时间 <= '2025-03-31'
GROUP BY
项目, 资源类型
ORDER BY
总费用 DESC;
全屏模式,退出全屏
除了你能够使用 SQL 查询来管理云上的资源这一酷功能之外,我在测试 StackQL 时还发现了两个独特之处:
- StackQL通过自动化合规检查并生成成本和安全报告,使基础设施管理变得超级简单。
- 它使用SQL查询语句将云资源的数据集成到您的仪表板中,就像管道一样,让您无需进入云控制台就能审计资源。
StackQL 让你可以按自己的方式进行操作,无论是以声明式还是过程式的方式,无需手动管理状态文件。其简单易懂的 SQL 风格语法,让你可以轻松地与其他基础设施即代码(IaC)和云原生工具集成。
使用StackQL可以部署基础架构、运行云资产报表、检查合规情况、检测配置漂移等操作。
给StackQL点个星 🌟 (点击这里查看)[https://git.new/stackql]
...
Pulumi – 使用代码定义现代基础设施Pulumi 是一种现代的基础设施即代码(IaC)工具,帮助你在云上管理和部署无服务器应用。它是一个云开发工具包(SDK),让你可以使用所选编程语言中的真正变量、函数、类和循环等来定义基础设施。
使用 Pulumi,你可以通过代码管理你的云基础设施(比如服务器、数据库和网络)。它自动进行配置,而不是通过云服务提供商手动配置。
您可以使用 Pulumi 在 AWS 上新建 S3 存储桶:
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
// the following creates a private S3 bucket
const bucket = new aws.s3.Bucket("my-bucket", {
acl: "private",
});
// export the bucket name
export const bucketName = bucket.id;
进入全屏状态,退出全屏状态
你也可以使用 Pulumi 部署运行 Nginx 容器的 Kubernetes 副本集,这能够让你定义基础设施的状态并使部署更简单。
import * as pulumi from "@pulumi/pulumi";
import * as k8s from "@pulumi/kubernetes";
// 部署一个 Pod
const pod = new k8s.core.v1.Pod("my-pod", {
metadata: {
name: "example-pod",
},
spec: {
containers: [
{
name: "nginx",
image: "nginx:latest",
ports: [
{
containerPort: 80,
},
],
},
],
},
});
// 导出 Pod 名
export const podName = pod.metadata.name;
全屏模式 退出全屏
那么,你为什么应该用 Pulumi
- Pulumi 允许您使用诸如 Go、Python、TypeScript、C# 和 Java 等编程语言来构建您的基础设施。
- 在 Pulumi 中定义云资源时,它会设置所需的资源,例如虚拟机或存储桶,因此您无需在云提供商的控制台上进行操作。
- Pulumi 可以让您在编写基础设施代码时创建可重用的组件,并且可以原生构建 CI/CD 管道。
- 这可能就是我喜欢 Pulumi 的原因;它可以与任何云提供商很好地配合使用,因此不受限制,非常适合动态云环境。
当你构建云基础设施时,Pulumi 最有用的地方包括避免 YAML 或 JSON 的地狱、重用基础设施中的管道或组件,以及让基础设施代码与应用程序逻辑代码并行工作,以便更好地理解或协同。
现在你的基础设施已经搭建完毕,你接下来需要自动化持续集成和持续交付(CI/CD)流程,并管理部署和工作流程,以部署和管理你的无服务器应用程序。
……
Serverless 框架(Serverless Framework) — 久经考验的经典想象这样一个平台,它可以让你在 AWS 上自动伸缩应用,无论你使用的是哪种编程语言。它让你的扩展和性能管理超级简单,让你专注于构建你出色的程序。
无服务器框架就是那个东西。它是一个用于在云提供商比如 AWS、Azure、Google Cloud 上构建和部署无服务器应用程序的框架。构建此工具时,它最初是为了 AWS Lambda 而设计的,后来也得到了其他云提供商的支持。
无服务器框架让你能够以这样的方式定义 YAML 配置,就像定义一个简单的服务和函数一样。
service: my-service
provider:
name: aws
runtime: nodejs14.x
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
点击全屏按钮或者退出全屏按钮
你也可以在本地测试你的函数。
serverless invoke local --function hello
在本地运行函数 'hello' 的命令。
进入全屏 退出全屏
您还可以部署您的无服务器应用。
运行以下命令来部署无服务器应用:
serverless deploy
全屏,退出全屏
为什么你应该用这个工具?
- 无服务器模型为开发人员提供了一个轻松的DevOps流程,自动扩展以及按需计费的定价模式。这对于任何小项目来说都是完美的选择,因为直接管理无服务器基础设施可能会变得让人难以招架。
- Serverless框架可以自动执行任务和部署,并且可以在任何云提供商上运行,因此不必受限于某个特定的云提供商。
- 使用此框架的另一个绝佳理由是其广泛的、丰富的插件生态系统,这使得开发人员可以扩展监控或安全功能。
无服务器框架是一种工具,在您构建AWS Lambda(或类似平台)上的自动化工作流、API 或其他自动化任务时非常有用。或者当您需要一个强大的函数即服务(FaaS)或无服务器计算生态系统,提供基本模板时也非常有用。
试试 Serverless Framework 🔥 https://www.serverless.com/framework 真的不错!
Jozu — 用于AI应用程序的DevOps平台
Jozu 旨在帮助您管理 AI/ML 项目。该工具支持 ModelKits,ModelKits 实际上是一种打包方案,可以将项目的组件、代码、数据集或配置整合成一个单一包。现在,这些 ModelKits 可以作为独立包部署到云端。
Jozu的主要目的是帮助您管理和部署AI/ML项目通过ModelKits,同时与KitOps合作来创建并部署ModelKits。
比如说,您可以使用KitOps CLI创建一个ModelKit模型,并将它推送到Jozu:
# 创建一个新的 ModelKit
kit init my-modelkit
# 将文件加入 ModelKit(例如,数据集、代码、配置)
cp my-dataset.csv my-modelkit/
cp my-model.py my-modelkit/
# 推送 ModelKit 到 Jozu Hub
kit push jozu.ml/my-organization/my-modelkit latest
进入全屏,退出全屏
使用Jozu,你可以为你的ModelKit创建Docker容器,它们可以本地部署或者在Kubernetes集群中部署。
# 拉取 ModelKit 镜像
docker pull jozu.ml/my-organization/my-modelkit:latest
# 本地运行容器
docker run -it --rm -p 8000:8000 jozu.ml/my-organization/my-modelkit:latest
全屏 退出全屏
如图所示
Jozu 是一个能够帮助你的 ML/AI 项目工具;这里有一些令人惊艳的功能,你应该关注一下:
- 与其它公共注册表相比,Jozu 让你更能掌控你的部署项目。
- 当你在 ModelKit 中更新文件或代码时,Jozu 让你和你的团队可以轻松跟踪 ModelKit 的哪些版本已被修改及其修改内容。如果当前版本有问题或错误,你可以轻松回滚到之前的版本。
- Jozu 让你轻松审计你的 AI/ML 项目,通过将每个版本保存为不可更改的 ModelKit 版本。你或你的团队可以在任何时候查看并获取准确的数据。
点击可查看图片
有了 Jozu,你就不用为如何部署和更新你的 AI/ML 项目而烦恼了。
这个工具非常适合从事机器学习的开发者和需要简单、安全且可扩展AI/机器学习工作流程的企业。
点击这里查看 Jozu 🔥(火热)(https://dub.sh/Jozu)
ClaudiaJS: 一个无服务器的 JavaScript.
ClaudiaJS 也是一个部署无服务器应用的好选择。对于希望在 AWS Lambda 上部署 Node.js 项目的 JavaScript 开发者来说,这个工具非常棒。这个工具非常适合希望尝试无服务器环境的开发者。
此工具通过打包NodeJS项目的依赖并进行管理,使用单个命令进行代码上传到AWS。此外,它还设置了例如安全角色和API网关等配置,从而帮助部署。
{
"scripts": {
"deploy": "claudia create --region us-east-1 --api-module api",
"update": "claudia update"
}
}
点击此处进入或退出全屏模式。
你也可以使用 Claudia 在生产环境中添加一个发布步骤。
{
"scripts": {
"release": "claudia 设置版本 --版本 生产"
}
}
全屏进入,退出全屏
你也可以使用 ClaudiaJS 构建 CI/CD 流水线以实现自动化部署:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: 检出代码到仓库
uses: actions/checkout@v2
- name: 安装依赖包
run: npm install
- name: 部署到 AWS Lambda 服务
run: npm run deploy
点击此处进入全屏模式,点击此处退出全屏模式
ClaudiaJS的一个很大的优点是它使用了JavaScript开发者已经熟悉的标准的NPM打包方式。它还在AWS Lambda上管理上传项目的多个版本,以适应生产和测试环境下的开发需求。
你为什么用ClaudiaJS?
- ClaudiaJS 简化了 AWS Lambda 和 API Gateway 的设置,让开发者能更专注于构建项目,而不是管道流程。
- 它十分轻便,不需要任何运行时依赖,容易集成到现有项目中。
ClaudiaJS 让你可以轻松地部署任何 Node.js 项目,提供一个创新且无缝的无服务器应用部署流程。
当你的无服务器应用在云端运行时,你需要自动化工作流程的过程,并监控可能的停机时间或软件故障,以确保其平稳运行无阻。
Kestra - Kestra,一个开源编排平台
如图所示的Kestra
Kestra 这款工具在您的云原生环境中管理流程和工作流,例如数据工作流或支持应用程序运行的自动化任务。
这款工具提供了一种管理YAML配置或与其他工具或平台集成的简便方法。
使用 Kestra,您可以管理并定义无服务器应用的流水线和工作流程。
const workflow = {
id: "simple-workflow",
namespace: "教程空间",
tasks: [
{
id: "提取数据",
type: "io.kestra.plugin.core.http.Download",
uri: "https://example.com/data.json",
},
{
id: "转换数据",
type: "io.kestra.plugin.scripts.python.Script",
containerImage: "python:3.11-alpine",
inputFiles: {
"data.json": "{{ outputs['提取数据'].uri }}"
},
script: `
import json
with open("data.json", "r") as file:
data = json.load(file)
transformed_data = [{"key": item["key"], "value": item["value"]} for item in data]
with open("transformed.json", "w") as file:
json.dump(transformed_data, file)
`,
outputFiles: ["*.json"],
},
{
id: "上传数据",
type: "io.kestra.plugin.aws.s3.Upload",
accessKeyId: "{{ secret('AWS_ACCESS_KEY_ID') }}",
secretAccessKey: "{{ secret('AWS_SECRET_KEY_ID') }}",
region: "us-east-1",
bucket: "my-bucket",
key: "transformed-data.json",
from: "{{ outputs['转换数据'].outputFiles['transformed.json'] }}"
},
],
};
默认导出工作流;
全屏模式 退出全屏
你也可以搭建一个ETL(提取、转换和加载)流水线。这个流水线会从不同的来源处收集数据,将其转换为特定格式,然后加载到你选择的系统,例如数据库。
const etlPipeline = {
id: "etl-pipeline",
namespace: "company.team",
tasks: [
{
id: "下载订单数据",
type: "io.kestra.plugin.core.http.Download",
uri: "https://example.com/orders.csv",
},
{
id: "下载产品数据",
type: "io.kestra.plugin.core.http.Download",
uri: "https://example.com/products.csv",
},
{
id: "合并订单与产品数据",
type: "io.kestra.plugin.jdbc.duckdb.Query",
inputFiles: {
"orders.csv": "{{ outputs.download-orders.uri }}",
"products.csv": "{{ outputs.download-products.uri }}",
},
sql: `
SELECT o.order_id, o.product_id, p.product_name
FROM read_csv_auto('{{ workingDir }}/orders.csv') o
JOIN read_csv_auto('{{ workingDir }}/products.csv') p
ON o.product_id = p.product_id
`,
store: true,
},
{
id: "上传合并数据",
type: "io.kestra.plugin.aws.s3.Upload",
accessKeyId: "{{ secret('AWS_ACCESS_KEY_ID') }}",
secretKeyId: "{{ secret('AWS_SECRET_KEY_ID') }}",
region: "us-east-1",
bucket: "my-bucket",
key: "joined-data.csv",
from: "{{ outputs.join-data.uri }}",
},
],
};
export default etlPipeline;
全屏;退出全屏
为什么要用Kestra?
- 大多数应用程序依赖于数据管道或自动化工作流来顺畅运行,而在大规模管理这些工作流时可能会感到手忙脚乱。Kestra 提供了一个可以与任何云服务或数据库集成的可扩展引擎,解决了这一问题。
- 与传统工具如 Apache Airflow 不同,Kestra 是为任何现代容器化环境而构建的,并内置了可观察性。
这是Kestra(图片来自网络)
Kestra 在管理复杂数据管道或实现基于 Kubernetes 的云原生工作流自动化时最有用。它是一个比 Apache Airflow 更好的选择。
结论
近年来,云原生技术和无服务器计算领域变得更为灵活和模块化。
不再需要使用复杂的工具时,这些工具和框架变得非常容易使用,比如Encore、ClaudiaJS、Serverless框架,以及StackQL、Jozu、Kestra和Pulumi等。
这些工具不仅节省了我们的时间和精力,还让我们在构建和使用基础设施时拥有独特的创意控制权。
还有哪些必备的工具你知道吗?在评论区留言吧——我很想知道你的推荐哦。
也关注我,获取更多精彩内容。
Arindam Majumder 关注 Arindam Majumder开发者代言人 | 技术作家 | 超过50万次阅读 | Mail for Coll
对于付费合作项目,请邮件联系我:arindammajumder2020@gmail.com。
谢谢你的阅读!感谢您的支持,我们会继续努力!
这是一张GIF图片
共同學(xué)習(xí),寫下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章