Skip to main content

Read any resource in your AWS Account. You can generate terraform code for them, too.

Project description

balcony

Build and publish a Docker image to ghcr.io

Build and Deploy Documentation website

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 .tf Terraform Resource code

balcony uses read-only operations, it does not take any action on the used AWS account.

Visit the Documentation Website

Installation

pip3 install balcony

Visit Installation & QuickStart Page to get started using balcony

# 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

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.tf file that's generated with balcony terraform-import command

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

Project details


Release history Release notifications | RSS feed

This version

0.3.3

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

balcony-0.3.3.tar.gz (57.5 kB view details)

Uploaded Source

Built Distribution

balcony-0.3.3-py3-none-any.whl (71.4 kB view details)

Uploaded Python 3

File details

Details for the file balcony-0.3.3.tar.gz.

File metadata

  • Download URL: balcony-0.3.3.tar.gz
  • Upload date:
  • Size: 57.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.10.12 Darwin/23.5.0

File hashes

Hashes for balcony-0.3.3.tar.gz
Algorithm Hash digest
SHA256 ffb393afd91f0976d806fcbcbe41cb9e34cb69409242ff6a0b86c8bd1acf5c87
MD5 ba66e40217ba70726d5d43eb59a41fe7
BLAKE2b-256 d68b44beeca86fdd5bfed46e85e0108d454e448cd8c44084af36ce878f80e1ec

See more details on using hashes here.

File details

Details for the file balcony-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: balcony-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 71.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.10.12 Darwin/23.5.0

File hashes

Hashes for balcony-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 7a6d3e9ca2f7e087109b317ec1fd4c44a6d1376d0be06f9cdeed85ccf0a9427c
MD5 c40cd73750bd16bf7d916bed1a540737
BLAKE2b-256 89a7371f99065b426db65d19f9ad59d768f71ff94d632dc4e5f29a0045a41402

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page