首页 > 其他分享 >Pluto 轻松构建云应用:开发指南

Pluto 轻松构建云应用:开发指南

时间:2024-01-22 11:45:51浏览次数:62  
标签:指南 name pluto queue 构建 开发者 Pluto kvstore

开发者只需在代码中定义一些变量,Pluto 就能基于这些变量自动创建与管理必要的云资源组件,达到简化部署和管理云基础设施的目的,让开发者更容易使用云。

这里的云资源并非指 IaaS,而是指 BaaS、FaaS 等托管资源组件。这类托管组件相较于自建实例通常具有更高的可靠性与更低的成本。

这篇文章将介绍 Pluto 的安装步骤与示例,帮助开发者熟悉 Pluto 的特性。(Solo社区 投稿)

安装

前置条件

  • Node.js: Pluto 支持使用 TypeScript 编写云应用程序。
  • Pulumi: Pluto 使用 Pulumi 与云平台(AWS 或 K8s)进行交互,部署云资源。

Pluto CLI

Pluto 命令行工具利用 npm 进行安装:

npm install -g @plutolang/cli

验证是否安装成功:

pluto --version

Hello, Pluto

接下来,开始创建并部署一个 Pluto 项目。

创建 Pluto 项目

通过运行以下命令,使用 Pluto CLI 创建 Pluto 项目:

pluto new

该命令将交互式地创建一个项目,并使用提供的项目名称创建一个目录。下面是一个输出示例:

$ pluto new
? Project name hello-pluto
? Stack name dev
? Select a platform AWS
? Select an IaC engine Pulumi
Info:  Created a project, hello-pluto

编写业务代码

使用你习惯的编辑器,在 <project_root>/src/index.ts 编写如下代码:

import { Router, Queue, KVStore, CloudEvent, HttpRequest, HttpResponse } from "@plutolang/pluto";

const router = new Router("router");
const queue = new Queue("queue");
const kvstore = new KVStore("kvstore");

// Publish the access time to the queue, and respond with the last access time.
router.get("/access", async (req: HttpRequest): Promise<HttpResponse> => {
  const name = req.query["name"] ?? "Anonym";
  await queue.push(JSON.stringify({ name, accessAt: `${Date.now()}` }));
  const lastAccess = await kvstore.get(name).catch(() => undefined);
  const respMsg = lastAccess
    ? `Hello, ${name}! The last access was at ${lastAccess}`
    : `Hello, ${name}!`;
  return { statusCode: 200, body: respMsg };
});

// Subscribe to messages in the queue and store them in the KV database.
queue.subscribe(async (evt: CloudEvent): Promise<void> => {
  const data = JSON.parse(evt.data);
  await kvstore.set(data["name"], data["accessAt"]);
  return;
});

这段代码包含 3 个资源变量和 2 个处理过程:

  • 一个 HTTP 服务 router,接受 /access HTTP 请求,请求中将本次的访问时间发布到消息队列 queue,然后从 KV 数据库 kvstore 中获取上一次访问时间,并返回。
  • 一个消息队列 queue,有一个订阅者,将消息队列中的消息保存到 KV 数据库 kvstore 中。
  • 一个 KV 数据库 kvstore,用来保存用户的上一次访问时间。

部署应用

执行下面这条命令就能将应用发布到起初你配置的云平台上:

pluto deploy

如果你指定的云平台是 AWS,请保证 AWS_REGION 环境变量被正确配置,例如:

export AWS_REGION=us-east-1

Pluto 将会在你指定的云平台上创建 3 个资源组件和 2 个函数对象,以 AWS 为例,将会创建:

  • 1 个命名为 router 的 ApiGateway
  • 1 个命名为 queue 的 SNS
  • 1 个命名为 kvstore 的 DynamoDB
  • 2 个名字以 function 开头的 Lambda 函数

多平台部署

如果你想部署到其他云平台可以通过创建新的 stack,并在部署时指定 stack 的方式进行:

创建新的 stack:

pluto stack new 

部署时指定 stack:

pluto deploy --stack <new_stack>

更多资源

Pluto 的主要思路是使用静态程序分析和 IaC 等技术让开发者定义一个变量就自动创建一个云平台上的资源组件。 Pluto 目标是帮助个人开发者更轻松地构建云原生应用程序,降低云能力的上手难度。

Pluto 还处于非常早期的阶段,欢迎感兴趣的大佬们参与共建,如果你在使用 AWS 或者 K8s,可以给我们提需求了。同时有任何想法或者建议,都非常欢迎,说出来,你的想法就会在后续版本实现。欢迎加入我们的 Slack 和 钉钉群: 40015003990。

订阅

这个专栏会同步更新在 Solo 社区、公众号、知乎、社群。

微信搜索"Solo 独立开发者社区"或者扫描二维码,即可手机订阅。

社区网址:Solo 独立开发者社区-链接每一位独立开发者, 从 Solo 开始

标签:指南,name,pluto,queue,构建,开发者,Pluto,kvstore
From: https://www.cnblogs.com/Baiang/p/17979718

相关文章

  • docker构建跨平台应用(x86,arm)
    1.直接从官方仓库拉去指定平台的镜像dockerpull--platform=<plartform><image-name>:<tag>例:dockerpull--platform=arm64nginx:latest2.打包指定平台的镜像安装并使用 buildx 使用 builder 构建跨平台镜像现在一些准备工作已经就绪,我们终于可以使用......
  • 调研 7 个开源项目后,这家数据合规平台如何构建高性能网关
    作者:张俊,杭州用九智汇科技有限公司系统架构师用九智汇介绍用九智汇是一家面向企业提供数据合规、隐私保护相关产品和解决方案的数据合规公司,致力于帮助客户在合法合规、充分保护用户隐私的基础上发挥数据的最大价值,已服务众多世界500强企业。当前我们的产品交付主要基于云原生相......
  • 调研 7 个开源项目后,这家数据合规平台如何构建高性能网关
    作者:张俊,杭州用九智汇科技有限公司系统架构师用九智汇介绍用九智汇是一家面向企业提供数据合规、隐私保护相关产品和解决方案的数据合规公司,致力于帮助客户在合法合规、充分保护用户隐私的基础上发挥数据的最大价值,已服务众多世界500强企业。当前我们的产品交付主要基于云原生......
  • 从方法论到最佳实践,深度解析企业云原生 DevSecOps 体系构建
    作者:匡大虎引言安全一直是企业上云关注的核心问题。随着云原生对云计算基础设施和企业应用架构的重定义,传统的企业安全防护架构已经不能够满足新时期下的安全防护要求。为此企业安全人员需要针对云原生时代的安全挑战重新进行系统性的威胁分析并构建适合企业自身的威胁情报系统,同时......
  • 现代化个人网站构建与部署方法
    现代化个人网站构建与部署方法Hugo作为静态网站生成器,是一个将Markdown转化为漂亮的静态网站的工具AWSS3用于托管网站本身Docker用于运行Hugo并从的Markdown文件生成网站网站仍然使用Hugo,托管在云负载平衡器后面的谷歌云存储(GCS)上。使用CloudBuild来生成和部署我的......
  • 从方法论到最佳实践,深度解析企业云原生 DevSecOps 体系构建
    作者:匡大虎引言安全一直是企业上云关注的核心问题。随着云原生对云计算基础设施和企业应用架构的重定义,传统的企业安全防护架构已经不能够满足新时期下的安全防护要求。为此企业安全人员需要针对云原生时代的安全挑战重新进行系统性的威胁分析并构建适合企业自身的威胁情报系统,......
  • 软件测试指南
    ......
  • C# 布尔值和条件语句:入门指南和实用示例
    C#布尔值在编程中,通常需要一个只能有两个值之一的数据类型,比如:是/否开/关真/假为此,C#有一个bool数据类型,可以取true或false的值。布尔值使用bool关键字声明布尔类型,只能取true或false的值:示例:boolisCSharpFun=true;boolisFishTasty=false;......
  • 【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你深度剖析Java线程转储分析
    专栏介绍学习JVM需要一定的编程经验和计算机基础知识,适用于从事Java开发、系统架构设计、性能优化、研究学习等领域的专业人士和技术爱好者。前提准备编程基础:具备良好的编程基础,理解面向对象编程(OOP)的基本概念,熟悉Java编程语言。数据结构与算法:对基本的数据结构和算法有一定了解,理......
  • C# 布尔值和条件语句:入门指南和实用示例
    C#布尔值在编程中,通常需要一个只能有两个值之一的数据类型,比如:是/否开/关真/假为此,C#有一个bool数据类型,可以取true或false的值。布尔值使用bool关键字声明布尔类型,只能取true或false的值:示例:boolisCSharpFun=true;boolisFishTasty=false;......