Metadata-Version: 2.1
Name: draws
Version: 1.0.0a3
Summary: Lightweight AWS Diagram Automation
Author: Jessica Lynch
License: MIT
Project-URL: repository, https://github.com/jessicalynch/draws
Classifier: Intended Audience :: Developers
Classifier: Framework :: AWS CDK
Classifier: Topic :: Documentation
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Description-Content-Type: text/markdown
Provides-Extra: cdk
Requires-Dist: aws-cdk-lib ; extra == 'cdk'
Provides-Extra: dev
Requires-Dist: pytest >=7.4.2 ; extra == 'dev'
Requires-Dist: black >=23.9.1 ; extra == 'dev'
Requires-Dist: flake8 >=7.0.0 ; extra == 'dev'

# draws: lightweight AWS Diagram Automation

[**draws**](https://pypi.org/project/draws/) is a dependency-free tool for automating AWS architecture diagram creation.

<img alt="Example AWS architecture diagram generated by draws from AppSync GraphQL DynamoDB template" src="https://raw.githubusercontent.com/jessicalynch/draws/787f82a2424c02c9098cfb14213b7d6c9b7ee839/examples/output/app-sync-graphql-dynamodb.diagram.svg" />

<img alt="Example AWS architecture diagram generated by draws from S3 trigger template" src="https://raw.githubusercontent.com/jessicalynch/draws/787f82a2424c02c9098cfb14213b7d6c9b7ee839/examples/output/s3-trigger.diagram.svg" />

<img alt="Example AWS architecture diagram generated by draws from serverless backend stack template" src="https://raw.githubusercontent.com/jessicalynch/draws/787f82a2424c02c9098cfb14213b7d6c9b7ee839/examples/output/serverless-backend.diagram.svg" />

## Install

```bash
pip install draws
```

## Example Usage (from cdk app)

Add `Diagrams.of(app)` before `app.synth()`.

_app.py:_

```python
from aws_cdk import App

from draws import Diagrams
from infra.api_to_s3_stack import ApiToS3Stack
from infra.s3_bucket_stack import S3BucketStack

app = App()

bucket_stack = S3BucketStack(app, f"draws-dev-bucket", public_prefix="public")
docs_ui_stack = ApiToS3Stack(app, f"draws-dev-docs-ui", bucket=bucket_stack.bucket)

# Pass the cdk app into Diagrams.of() (directory defaults to app.py location)
Diagrams.of(app, directory="examples/output")

app.synth()
```

Run `cdk ls` to generate diagrams for each stack.

_output:_

```bash
$ cdk ls
Diagram saved to: examples/output/draws-dev-bucket.diagram.svg
Diagram saved to: examples/output/draws-dev-docs-ui.diagram.svg
```

## Example Usage (from template)

```python
import os
from pathlib import Path

from draws import Diagram


if __name__ == "__main__":
    curr_dir = Path(os.path.abspath(os.path.dirname(__file__)))
    templates_dir = curr_dir / "cdk.out"

    D = Diagram.from_template(
        filename=templates_dir / "my-stack.template.json",
        title="My AWS Stack",
    )

    D.to_svg()
```

## Example Usage (manual)

```python
import os
from pathlib import Path

from draws import Diagram, Elem


if __name__ == "__main__":
    with Diagram(title="My AWS Stack") as D:
        rest_api = Elem("AWS::ApiGateway::RestApi", "Rest API")
        lambda_func = Elem("AWS::Lambda::Function", "Lambda")
        bucket = Elem("AWS::S3::Bucket", "Bucket")

        rest_api >> lambda_func
        rest_api << lambda_func
        lambda_func >> bucket

        D.to_svg()
```

<p align="center">
    <img src="https://raw.githubusercontent.com/jessicalynch/draws/787f82a2424c02c9098cfb14213b7d6c9b7ee839/examples/output/manual.svg" width="300" />
</p>
