Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/rails-lambda/lambda-console

☁️🐚 A CLI to run shell commands or interact with your application on Lambda.
https://github.com/rails-lambda/lambda-console

Last synced: 3 months ago
JSON representation

☁️🐚 A CLI to run shell commands or interact with your application on Lambda.

Awesome Lists containing this project

README

        

# Lambda Console

☁️🐚 A CLI to run shell commands or interact with your application on Lambda. This includes typical shell commands like `cat /etc/os-release` or language-specific interactions directly with your running application like Ruby's IRB prompt or Rails console.

![Lambda Console CLI Screenshot](./images/lambda-console-cli-dark.png#gh-dark-mode-only)
![Lambda Console CLI Screenshot](./images/lambda-console-cli-light.png#gh-light-mode-only)

The Lambda Console is language agnostic and its [event specification](#specfication) can be implemented in any language. See our list of [supporting implementation](#implementations) for details.

## ⬇️ Installation

```shell
npm install -g lambda-console-cli
```

## 🐚 Usage

Assuming your language or application framework has a [supporting implementation](#implementations) and that you have an AWS CLI user or profile configured with the [required permissions](#permissions), simply invoke `lambda-console-cli` binary.

As seen in the screenshot above, it will present a series of interactive prompts to configure the AWS SDKs needed to invoke your Lambda function with the console [event specification](#specfication). All interactive prompts have CLI options.

```
> lambda-console-cli --help
Usage: lambda-console [options]

A CLI to run shell commands or interact with your application on Lambda.

Options:
-v, --version Output the current version
-r, --region AWS Region name
-p, --profile AWS Profile name
-f, --function-name AWS Lambda Function Name
-h, --help display help for command
```

## 🏘️ Implementations

Have you created a language-specific package or implemented the Lambda Console specification in your framework? Open an GitHub issue and [share your project](https://github.com/rails-lambda/lambda-console/issues/new/choose) with us. We will add it to this list below.

- Ruby: The [lambda-console-ruby](https://github.com/rails-lambda/lambda-console-ruby) gem for any Ruby Lambda.
- Rails: Integrated into the [Lamby](https://github.com/rails-lambda/lamby) v5 for Rails on Lambda.
- Node: Demo https://github.com/rails-lambda/lambda-console/issues/2

## 📐 Specification

Please see [Lambda Console (Ruby)](https://github.com/rails-lambda/lambda-console-ruby) for a full reference implementation of the Lambda Console spec in Ruby.

### Event Structure

The event structure for Lambda Console language specific implementation must conform to the following JSON schema:

```json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"X_LAMBDA_CONSOLE": {
"type": "object",
"oneOf": [
{
"properties": {
"run": {
"type": "string"
}
},
"required": ["run"],
"additionalProperties": false
},
{
"properties": {
"interact": {
"type": "string"
}
},
"required": ["interact"],
"additionalProperties": false
}
]
}
},
"required": ["X_LAMBDA_CONSOLE"]
}

```

More succinctly, one of the two examples are acceptable event types.

**Run Commands**: For running shell commands.

```json
{ "X_LAMBDA_CONSOLE": { "run": "cat /etc/os-release" } }
```

**Interact Commands**: Interact in the context of your program. Like IRB for Ruby.

```json
{ "X_LAMBDA_CONSOLE": { "interact": "User.find(1)" } }
```

### Response Formats

These rules apply to any implementation Lambda response for the Lambda Console to work properly.

**Run Commands**

- `statusCode`: Either `0` if no error or `1` if an error occurred.
- `body`: Combined string of standard out and error in the order they happened.

**Interact Commands**

- `statusCode`: Either `200` if no error or `422` if an error occurred.
- `body`: String response of the expression evaluated by your program.

### Recommendations

- Run: Should assume the Lambda task/application root as the present working directory.
- Run: Should capture standard out and error in a single stream.
- Interactive: Should be run from a language's main context or binding.

## Future Ideas

- Should our interact command capture all stdout or just the return of the evaluated expression?
- Can we leverage some pseudo-tty features for run commands to support features like ANSI colors?
- Creating a more formal response JSON schema as we create more features coupled to that response.
- Add response headers so implementations can signal a language being used for code highlighting.
- Can we stream STDOUT and STDERR back to the client as it happens? Lambda Streaming?

## Permissions

The user running this CLI will need the following IAM actions associated with their user or role:

- `lambda:ListFunctions`
- `lambda:InvokeFunction`

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/rails-lambda/lambda-console. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/rails-lambda/lambda-console/blob/main/CODE_OF_CONDUCT.md).

## License

The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).

## Code of Conduct

Everyone interacting in the Lambda Console project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/rails-lambda/lambda-console/blob/main/CODE_OF_CONDUCT.md).