balcony
balcony is a modern CLI tool that with some killer features:
- Auto-fill the required parameters for AWS API calls
- Read the JSON data of any AWS resource in your account
- Generate Terraform Import Blocks
- Generate actual
.tfTerraform Resource code
balcony uses read-only operations, it does not take any action on the used AWS account.
Visit the Documentation Website
Installation
Visit Installation & QuickStart Page to get started using balcony
pip3 install balcony
You can also use uv to get balcony.
brew install uv
uvx balcony info
# see options
balcony
# list available resources of ec2
balcony aws ec2
# read a resource
balcony aws s3 Buckets
# show documentation
balcony aws iam Policy --list
# generate terraform import blocks for a resource
balcony terraform-import s3 Buckets
Features
Read any AWS Resource
balcony aws <service> <resource-name> --paginate command reads all resources of a given type in your AWS account.
Related Docs: QuickStart
Filter and Exclude by Tags
- aws-jmespath-utils dependency is used to enable JMESPath expressions to filter and exclude resources by tags
- Following expressions are used to select anything: (
=,*=,=*,*=*)- You can leave one side empty or put a
*there to discard that sides value
- You can leave one side empty or put a
Filter tags
-
Select everything
balcony aws ec2 Instances -js 'DescribeInstances[].Reservations[].Instances[].filter_tags(`["="]`, @).Tags' balcony aws ec2 Instances -js 'DescribeInstances[].Reservations[].Instances[].filter_tags(`["*="]`, @).Tags' balcony aws ec2 Instances -js 'DescribeInstances[].Reservations[].Instances[].filter_tags(`["=*"]`, @).Tags' balcony aws ec2 Instances -js 'DescribeInstances[].Reservations[].Instances[].filter_tags(`["*=*"]`, @).Tags'
-
Find named EC2 Instances
balcony aws ec2 Instances -js 'DescribeInstances[].Reservations[].Instances[].filter_tags(`["Name="]`, @)'
-
Find AWS MAP migration tagged EC2 Instances
balcony aws ec2 Instances -js 'DescribeInstances[].Reservations[].Instances[].filter_tags(`["map-migrated="]`, @)'
Exclude tags
-
Exclude everything
balcony aws ec2 Instances -js 'DescribeInstances[].Reservations[].Instances[].exclude_tags(`["="]`, @).Tags' balcony aws ec2 Instances -js 'DescribeInstances[].Reservations[].Instances[].exclude_tags(`["*="]`, @).Tags' balcony aws ec2 Instances -js 'DescribeInstances[].Reservations[].Instances[].exclude_tags(`["=*"]`, @).Tags' balcony aws ec2 Instances -js 'DescribeInstances[].Reservations[].Instances[].exclude_tags(`["*=*"]`, @).Tags'
-
Find un-named EC2 Instances
balcony aws ec2 Instances -js 'DescribeInstances[].Reservations[].Instances[].exclude_tags(`["Name="]`, @)'
-
Find AWS MAP migration un-tagged EC2 Instances
balcony aws ec2 Instances -js 'DescribeInstances[].Reservations[].Instances[].exclude_tags(`["map-migrated="]`, @)'
Generate Terraform Import Blocks
Terraform v1.5 introduced import blocks that allows users to define their imports as code.
balcony terraform-import <service> <resource-name> command generates these import blocks for you.
balcony terraform-import --list to see the list of supported resources.
Related Docs: Generate Terraform Import Blocks Related Docs: Balcony Terraform Import Support Matrix
Generate actual Terraform Resource Code
If you have:
- initialized terraform project
import_blocks.tffile that's generated withbalcony terraform-importcommand
you can run terraform plan -generate-config-out=generated.tf to generate actual .tf resource code.
This feature is achieved with the balcony-terraform-import Docker Image.
Related Docs: Generate Terraform Code with Docker Image
Interactive Wizard to create balcony import configurations
Balcony doesn't know how to create terraform import blocks for all of the AWS resources.
It can be taught how to do it by creating import-configurations yaml files, but it's a manual process. This is where the interactive wizard comes in.
Interactive Wizards asks you required questions to automatically create the import-configurations yaml files.
Related Docs: Terraform Import Configuration Wizard
Metadata
Release files for balcony 0.3.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| balcony-0.3.10.tar.gz | 49.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| balcony-0.3.10-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 117.9 kB
Release files / balcony-0.3.10.tar.gz
| Download URL | balcony-0.3.10.tar.gz |
|---|---|
| Size | 49.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8e081d3f778a51e2cc1c6d586ed8c89a6fbdb872b25a1a2c2e4b9ab026d2f27b
|
|
BLAKE2b-256 checksum How to use checksums |
fd29753d0f3a4b381f6e31adfde996a460c5a81387db4bc5ec26959716d5433b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / balcony-0.3.10-py3-none-any.whl
| Download URL | balcony-0.3.10-py3-none-any.whl |
|---|---|
| Size | 68.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
eebc0c4361dacfaba92472c4639b6d2516146acb5b7f03d82190dc2b7894d68e
|
|
BLAKE2b-256 checksum How to use checksums |
d82f995a8ad16590af960b0e3f0d7c1407f0251b73a58f245015d56d4a2c5881
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|