Klotho - installation and first look on CLI
Tags: aws, klotho, awscommunitybuilders, review
Published: 2022-04-17 21:47:12

---
title: Klotho - installation and first look on CLI
series: Review of Klotho (Alpha Early Access)
published: true
description: Review of Klotho, the tool to simplify management of application's infrastructure
tags: #AWS #klotho #awscommunitybuilders #review
cover_image: https://www.pawelpiwosz.net/assets/klotho/cover1.png
---

# Prerequisities

In order to use Klotho, some dependencies are needed.

I do my test of Klotho using AWS EC2 Linux machine. I created new machine and installed all needed software.

## curl

`Curl` must be installed in your system. Amazon Linux 2 has it already installed, so I skipped it.

## Git

Basic tool to work, right? However it is not a dependency here. I will use it later, so I decided to have it installed already.

```bash
sudo yum install -y git
```

## AWS CLI

As I test Klotho with AWS, I need CLI to interact with the selected Cloud. The installation is simple:

```bash
wget https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip
unzip awscli-exe-linux-x86_64.zip
rm awscli-exe-linux-x86_64.zip
sudo ./aws/install
rm -rf aws
```

After successful installation, CLI needs to be configured with user's credentials. To start configuration of CLI, use

```bash
aws configure
```

And fill data.

## Docker

Docker is also one of the required services. Different distibution have different installation processes, here I show the Amazon Linux commands.

```bash
sudo yum install docker
sudo usermod -aG docker ec2-user
```

First, Docker was installed and after installation I added my user (`ec2-user`) to the group `docker` to allow him use Docker CLI.

## Pulumi

Pulumi is well-known Infrastructure as Code tool. Although Pulumi is giving 'almost automated' way of installation, I do not use it. Security reasons :). So, I install it in old-fashioned way.

```bash
wget https://get.pulumi.com/releases/sdk/pulumi-v3.29.1-linux-x64.tar.gz
tar xzvf pulumi-v3.29.1-linux-x64.tar.gz
sudo mv pulumi/pulumi* /usr/local/bin/
rm -rf pulumi*
pulumi version
```
I downloaded the tarball, unpacked it and moved all files from `pulumi` folder to `/usr/local/bin` (which is defined in my `$PATH`). I removed not needed files and on the end I checked if installation was successful.

## NodeJS and packages

Another needed tool is NodeJS. I used the instruction fron their GitHub. Of course, when other programming languages are used, other packages must be installed.

```bash
https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.xz
sudo mkdir -p /usr/local/lib/nodejs
sudo tar -xJvf node-v16.14.2-linux-x64.tar.xz -C /usr/local/lib/nodejs
export PATH=/usr/local/lib/nodejs/node-v16.14.2-linux-x64/bin:$PATH
node -v
npm version
```

Well, not very convenient way, but I don't care here. I use it for tests. Additionally, I added `PATH=$PATH:/usr/local/lib/nodejs/node-v16.14.2-linux-x64/bin` to my `.bash_profile`

To finalize this step, I installed two needed packages

```bash
npm install -g typescript ts-node
```

## Terraform?

Not needed at this moment. Klotho uses Pulumi now, so TF is obsolete today.

# Download the tool

Finally, it is the time to install Klotho. I used the instruction from Klotho website.

```bash
curl -L "https://api.cloudcompiler.run/v1/cli/$(uname | tr '[:upper:]' '[:lower:]')/cloudcc" -o cloudcc
chmod +x cloudcc
sudo mv cloudcc /usr/local/bin/
```

## Final step

The final step of the installation will be initialize the Pulumi project for local use.

```bash
pulumi login --local
```

And we are ready to go!

# First run

When Klotho is run for the first time, it asks for the email. Looks like... I cannot go without it. 

![First run](https://www.pawelpiwosz.net/assets/klotho/klotho01.png)

Right. I am not very big fan of this approach. I understand reasoning, but I preffer to have this as an option. But ok, Khloto is in `early access` state, so this might be very useful for developers.

After complete this step, finally I am able to execute the first command

```bash
cloudcc -h
```

And I see help information.

Help is constructed in intuitive way, I can see the resemblance to AWS CLI and other tools. If I want to see help for specific command, I can do it. For example:

```bash
cloudcc compile -h
```

Will show me information about `compile` commands.

What are main options for Klotho?

`Compile`. This is the first step of creating infrastructure. Code is instrumented, Requirements defined, Klotho is generating templates to deploy on target environment.

`Up`. This command will spin up or update the environment after compilation.

`Destroy`. Well, obviously, with this command the environment will be removed.