# InfraMap
(opens new window)
(opens new window)
(opens new window)
(opens new window)
# Overview
Use InfraMap to create your infra diagrams in a single click (or add it as a step in your pipeline), using pruned infra-as-code that keeps all sensitive information safe. It’s a tool with the wow factor and is a genuine time-saver. Think of InfraMap like InfraView’s little sister - reading from tfstate or HCL files (no Terraform? No problem - if you don't have Terraform, open-source tool TerraCognita (opens new window) will generate the HCL and the tfstate file), it automatically builds a graphical representation of your infrastructures without any input from you. The end product is simpler than InfraView, but still offers the accessibility and ease of its big sister. Your InfraMap architecture diagram will open up your infra to non-technical team members, allowing you to identify points of error, troubleshoot faster, and ensure everything is up-to-date.
- Creates a graphical representation of your infrastructure
- Can generate anonymized graphs
- Allows full visibility of cloud resources
- Saves precious time spent creating diagrams by hand
Read your tfstate or HCL to generate a graph specific for each provider, showing only the resources that are most important/relevant.
# Cloud Providers
We support certain providers. This allows us to better represent information that comes from these providers.
If your state file or HCL is from a provider we do not support, the resulting representation will simply be all resources present without any simplification or refinement.
We support Terraform 0.15.3 (and previous) and Terraform State version 3 and 4.
Provider | State | HCL | Grouping1 | External Nodes2 | IAM3 |
---|---|---|---|---|---|
![]() | ✔️ | ✔️ | WIP (opens new window) | ✔️ | ✖️ (https://github.com/cycloidio/inframap/issues/11) |
✔️ | ✔️ | ✖️ | ✖️ | ✖️ | |
✔️ | ✔️ | ✖️ | ✖️ | ✖️ | |
![]() | ✔️ | ✔️ | ✖️ | ✖️ | ✖️ |
![]() | ✔️ | ✔️ | ✖️ | ✖️ | ✖️ |
- Grouping: Group elements that belong to the same group like VPCs or regions
- External Nodes: Show the ingress of the Nodes if any
- IAM: Connections based on IAM (Identity Access Management)
# Installation
# Stable
To install the latest release of InfraMap, you can pick one of this methods:
- pull the latest release from the Releases (opens new window) page
- pull the latest docker image (opens new window) from the Docker hub
- use your Linux package manager (only AUR (opens new window) at the moment)
# Development
You can build and install with the latest sources, you will enjoy the new features and bug fixes. It uses Go Modules (1.13+)
$ git clone https://github.com/cycloidio/inframap
$ cd inframap
$ go mod download
$ make build
2
3
4
# Install via brew
If you're macOS user and using Homebrew (opens new window), you can install via brew command:
$ brew install inframap
# Usage
The inframap --help
will show you the basics.
The most important subcommands are:
generate
: generates the graph from STDIN or file.prune
: removes all unnecessary information from the state or HCL (not supported yet) so it can be shared without any security concerns
# Example
Visualizing with dot
$ inframap generate state.tfstate | dot -Tpng > graph.png
or from the terminal itself
$ inframap generate state.tfstate | graph-easy
or from HCL
$ inframap generate config.tf | graph-easy
or HCL module
$ inframap generate ./my-module/ | graph-easy
using docker image (assuming that your Terraform files are in the working directory)
$ docker run --rm -v ${PWD}:/opt cycloid/inframap generate /opt/terraform.tfstate
Note: InfraMap will guess the type of the input (HCL or TFState) by validating if it's a JSON and if it fails then we fallback
to HCL (except if you send a directory on args, the it'll use HCL directly), to force one specific type you can use --hcl
or --tfstate
flags.
# How is it different to terraform graph
Terraform Graph (opens new window) outputs a dependency graph of all the resources on the tfstate/HCL. We try to go one step further, by trying to make it human-readable.
If the provider is not supported, the output will be closer to the Terraform Graph version (without displaying provider / variable nodes)
Taking https://github.com/cycloid-community-catalog/stack-magento/ as a reference this is the difference in output:
With terraform graph
:
With inframap generate ./terraform/module-magento/ | dot -Tpng > inframap.png
:
With inframap generate --connections=false ./terraform/module-magento/ | dot -Tpng > inframapconnections.png
:
With inframap generate ./terraform/module-magento/ --raw | dot -Tpng > inframapraw.png
:
# How does it work?
For each provider, we support specific types of connections; we have a static list of resources that can be nodes or edges. Once we identify the edges, we try to create one unique edge from the resources they connect.
For a state file, we rely on the dependencies
key (for the <0.13 we replace all depends_on
for dependencies
so we support them) and, for HCL we rely on interpolation to create the base graph one which we then
apply specific provider logic if supported. If not supported, then basic graph is returned.
# FAQ
# Why is my Graph generated empty?
If a graph is returned empty, it means that we support one of the providers you are using on your HCL/TFState but we do not recognize any connection or relevant node.
To show the configuration without any InfraMap applied logic you can use the --raw
flag logic and print everything that we read.
If it works, it would be good to try to know why it was empty before so we can take a look
at it as it could potentially be an issue on InfraMap (open an issue if you want us to take a look).
By default unconnected nodes are removed, you can use --clean=false
to prevent that.
# Does InfraMap support Terraform backends ?
Terraform allows users to use backends
(S3, Google Cloud Storage, Swift, etc.) in order to store the terraform.state
. We currently do not support graph generation from tfstate
stored in such backends. As mentioned in this issue (opens new window), it is possible to play around stdin/out
to generate graph from Terraform backends.
backend | command |
---|---|
S3 | aws s3 cp s3://bucket/path/to/your/file.tfstate - \| inframap generate |
GCS | gsutil cat gs://bucket/path/to/your/file.tfstate \| inframap generate |
# License
Please see the MIT LICENSE (opens new window) file.
# Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog (opens new window), and this project adheres to Semantic Versioning (opens new window).