Developers define variables in their code, andĀ PlutoĀ takes care of automatically creating and managing the required cloud resource components based on those variables. This simplifies the process of deploying and managing cloud infrastructure, enabling developers to make better use of the cloud.
In this context, cloud resources do not refer to Infrastructure as a Service (IaaS), but rather to managed resource components such as Backend as a Service (BaaS) and Function as a Service (FaaS). These managed components generally provide enhanced reliability and cost-effectiveness compared to building and managing your own instances.
In this article, we will guide you through the steps of getting started with Pluto and help you become familiar with its features.
Installation
Prerequisites
- Node.js: Pluto supports writing cloud applications using TypeScript.
- Pulumi: Pluto uses Pulumi to interact with cloud platforms (such as AWS or Kubernetes) and deploy cloud resources.
Pluto CLI
The Pluto command-line tool is distributed viaĀ npm. Install it by running the following command:
npm install -g @plutolang/cli
Verify your installation:
pluto --version
Hello, Pluto
Now, letās get started with your first Pluto program.
Create your project
Create a Pluto project using the Pluto CLI by running:
pluto new
This command will interactively create a project and create a directory with the provided project name. Hereās an example:
$ pluto new
? Project name hello-pluto
? Stack name dev
? Select a platform AWS
? Select an IaC engine Pulumi
Info: Created a project, hello-pluto
After you have created the new project, go to the project root directory and install the dependencies.
cd <project_root>
npm install
Write your business logic
Use your preferred code editor to write the following code inĀ <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;
});
This code includes 3 resource variables and 2 processes:
- An HTTP service called ārouterā that acceptsĀ
/access
Ā HTTP requests. It publishes the access time to the message queue "queue" and retrieves the last access time from the KV database "kvstore" and returns it in the response. - A message queue named āqueueā with a subscriber that saves messages from the queue to the KV database ākvstoreā.
- A KV database named ākvstoreā used to store usersā last access time.
Deploy your application
To deploy your application to the cloud platform you configured initially, run the following command:
pluto deploy
If you specified AWS as the cloud platform, make sure theĀ AWS_REGION
Ā environment variable is correctly configured, for example:
export AWS_REGION=us-east-1
Pluto will create 3 resource components and 2 function objects on the specified cloud platform. For example, if you chose AWS, it will create:
- An ApiGateway named ārouterā
- An SNS named āqueueā
- A DynamoDB named ākvstoreā
- Two Lambda functions starting with āfunctionā
Multi-platform deployment
If you want to deploy to another cloud platform, you can create a new stack and specify the stack during deployment. Here are the steps:
Create a new stack:
pluto stack new
Specify the stack during deployment:
pluto deploy --stack <new_stack>
More Resources
- Case Study:Ā Command-line chatbot based on OpenAI
- Case Study:Ā Share a daily computer joke on Slack
- Repository:Ā Pluto | GitHub
Plutoās main approach is to leverage techniques such as static program analysis and infrastructure as code toĀ automatically create cloud resource components on the cloud platform by defining a variable. The goal of Pluto is to assist individual developers in building cloud-native applications with ease and reduce the learning curve associated with cloud capabilities.
Please note that Pluto is still in its early stages, and we welcome contributions from interested developers. If you are using AWS or Kubernetes, you can provide us with your requirements. We also appreciate any ideas or suggestions you may have, as they can be implemented in future versions. Feel free to join ourĀ SlackĀ community.