开发者只需在代码中定义一些变量,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 开始

Pluto 轻松构建云应用:开发指南的更多相关文章

  1. 转载一篇阿里云Terraform 开发指南

    连接:https://www.jianshu.com/p/0aebea117cae 是一个比较详细的开发指南          

  2. AngularJS开发指南16:AngularJS构建大型Web应用详解

    AngularJS是由Google创建的一种JS框架,使用它可以扩展应用程序中的HTML功能,从而在web应用程序中使用HTML声明动态内容.在该团队工作的软件工程师Brian Ford近日撰写了一篇 ...

  3. 开放下载 | 《Knative 云原生应用开发指南》开启云原生时代 Serverless 之门

    点击下载<Knative 云原生应用开发指南> 自 2018 年 Knative 项目开源后,就得到了广大开发者的密切关注.Knative 在 Kubernetes 之上提供了一套完整的应 ...

  4. NodeJS 基于 Dapr 构建云原生微服务应用,从 0 到 1 快速上手指南

    Dapr 是一个可移植的.事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的.无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架.Dapr 确保开发人员专注 ...

  5. 开发指南专题八:JEECG微云高速开发平台数据字典

       开发指南专题八:JEECG微云高速开发平台数据字典的使用 1.标签中使用数据字典 数据字典为系统中可能用到的字典类型数据提供了使用的便利性和可维护性.下面拉框标签<t:dictSele ...

  6. 开发指南专题4:JEECG高速微云开发平台--JEECG开发环境的搭建

    开发指南专题4:JEECG微云高速开发平台开发环境搭建 1. JEECG开发环境搭建 JEECG推荐的开发环境为Myeclipse8.5/Eclipse3.7+JDK1.6+Tomcat6.0 1.1 ...

  7. 轻松搭建Windows8云平台开发环境

    原文:轻松搭建Windows8云平台开发环境 Windows Store应用是基于Windows 8操作系统的新一代Windows应用程序,其开发平台以及运行模式和以往传统平台略有不同.为了帮助更多开 ...

  8. 开发指南专题六:JEECG微云高速开发平台代码生成

    开发指南专题六:JEECG微云高速开发平台代码生 1.1. 代码生成扫描路径配置 用代码生成器生成代码后.须要进行相关配置配置,扫描注入control.service.entity等; 具体操作过程例 ...

  9. 阿里云API网关(7)开发指南-API参考

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  10. 开发指南专题五:JEECG微云高速开发平台代码生成器

    开发指南专题五:JEECG微云高速开发平台代码生成器 1.1. Maven开发环境搭建 在搭建jeecg的maven开发环境之前,须要先配置好本机的maven环境,并在eclipse中安装好m2ecl ...

随机推荐

  1. 使用Chrome 开发者工具提取对应的字符串

    最近在查看一个API的数据,效果很好,但是里面只有一部分我想要的内容 如果是简单一点的可以直接获取 如下比如我想要提取返回的代码中关键的字符串:"video": "这里的 ...

  2. python垃圾回收和缓存管理

    Python垃圾回收和缓存管理 你有没有想过为什么我们频繁地使用Python敲代码做项目,实际上一直在生产对象并不断占用内存,而我们很少会去清理Python的内存,理论上来讲它总有一天把内存消耗殆尽( ...

  3. tkinter的Text组件设置禁止编辑

    完整代码: from tkinter import * import requests window = Tk() window.geometry('1000x500+300+100') window ...

  4. kubernetes 二次开发-认证,鉴权(1)

    基于webhook的认证 授权过程 认证授权服务需要满足如下kubernetes的规范 kubernetes api-server组件发送 http post 请求 url:https://authn ...

  5. [N1盒子] Armbian安装Docker+Portainer汉化面板支持小钢炮汉化+中英文切换方法

    1.下载汉化包,解压后备用链接:https://pan.baidu.com/s/1BLXMSmJFcgESeNMhQL26Mg&shfl=sharepset提取码:6vjr 以下安装,国内建议 ...

  6. 使用Harbor作为Rainbond默认容器镜像仓库,扩展Rainbond镜像管理能力

    Rainbond是一体化的云原生应用管理平台,它提供"以应用为中心"的抽象,使用者不需要学习K8s和容器,平台将K8s和容器封装在内部,这种封装方式能极大提高使用的易用性和安装的便 ...

  7. react 数据请求分层

    封装一个接口请求类 数据模型 请求uri配置设置 数据统一存储于redux中,在本项目中创建一个store目录,此目录中就是redux仓库源 定义仓库入口 reducer methods方法 acti ...

  8. kettle从入门到精通 第十二课 kettle java代码过滤记录、利用Janino计算Java表达式

    1.下图通过简单的示例讲解了根据java代码过滤记录和利用Janino计算Java表达式两个组件. 2.根据java代码过滤记录 1)步骤名称:自定义 2)接收匹配的行的步骤(可选):下面条件(jav ...

  9. mysql 查询差集方法

    第一种是通过not in的方式去处理: select id from table_a where id not in (select id from table_b); 第二种则是通过左连接(left ...

  10. Lecture5

    Smiling & Weeping ---- 在街上看到长得和你相似的人时 我心中的那股雀跃 请你至少同情一下吧 第五章 Git 内部原理 5.0 引言 本章相对独立,从底层出发带你了解Git ...