### Start PlantUML Local Render Server
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Start a local PlantUML render server using the provided JAR file. Security profile and allowlist configurations may be necessary.
```bash
java -jar scripts/plantuml-mit-1.2026.2.jar -picoweb
```
--------------------------------
### Run Upgrade Script
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Execute the upgrade script from the examples folder to update PlantUML files. This script can be run in read-only mode or with overwrite capabilities.
```bash
uv run upgrade.sh
```
--------------------------------
### Full Example with Multiple Includes
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/README.md
Demonstrates defining the AWSPuml macro, including AWSCommon.puml, and then including specific service files or category files. Use release tags for production diagrams.
```plantuml
' Define the main location (URL or local file path)
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v23.0/dist
' Include main AWSCommon and then resource files
!include AWSPuml/AWSCommon.puml
!include AWSPuml/BusinessApplications/all.puml
!include AWSPuml/Storage/SimpleStorageService.puml
```
--------------------------------
### Hello World PlantUML Diagram
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/README.md
A basic 'Hello World' example demonstrating how to include AWS common files and specific services, then use them to draw elements and relationships. Uncomment the dark mode variable for styling.
```plantuml
@startuml Hello World
' Uncomment the line below for "dark mode" styling
'!$AWS_DARK = true
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v23.0/dist
!include AWSPuml/AWSCommon.puml
!include AWSPuml/BusinessApplications/all.puml
!include AWSPuml/Storage/SimpleStorageService.puml
actor "Person" as personAlias
WorkDocs(desktopAlias, "Label", "Technology", "Optional Description")
SimpleStorageService(storageAlias, "Label", "Technology", "Optional Description")
personAlias --> desktopAlias
desktopAlias --> storageAlias
@enduml
```
--------------------------------
### Run Local HTTP Server (CORS)
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Start a local HTTP server in the dist directory with CORS support. This is necessary for testing Structurizr themes or Mermaid icons.
```bash
cd dist
uv run python ../scripts/http_server_cors.py
```
--------------------------------
### Mermaid Generic Icons Architecture Diagram
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/mermaid-js/mermaid.html
Example of a basic Mermaid architecture diagram using generic icons. Ensure Mermaid syntax is correctly rendered.
```mermaid
architecture-beta
group api(cloud)[API]
service db(database)[Database] in api
service disk1(disk)[Storage] in api
service disk2(disk)[Storage] in api
service server(server)[Server] in api
db:L -- R:server
disk1:T -- B:server
disk2:T -- B:db
```
--------------------------------
### S3 Upload Workflow Diagram
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/s3-upload-workflow/S3 Upload Workflow - mermaid.html
Mermaid diagram illustrating an S3 upload workflow with AWS services. This example uses the architecture syntax to define services and their interactions.
```mermaid
architecture-beta
service user(aws:user)[User]
group awscloud(aws:aws-cloud)[AWS Cloud]
group region(aws:region)[Region] in awscloud
group s3bucket(aws:simple-storage-service)[Amazon S3 bucket] in region
service video(aws:multimedia)[video] in s3bucket
service audio(aws:tape-storage)[audio] in s3bucket
service transcript(aws:documents)[transcript] in s3bucket
user:R -[1 upload]-> L:video
video:R --> L:audio
audio:R --> L:transcript
service handler(aws:lambda-lambda-function)[ObjectCreated event handler] in region
service mediaconvert(aws:elemental-mediaconvert)[AWS Elemental MediaConvert] in region
service transcribe(aws:transcribe)[Amazon Transcribe] in region
handler:T <-[2]- B:video
mediaconvert:T -[3]-> B:audio
transcribe:T -[4]-> B:transcript
group workflow(aws:step-functions-workflow)[AWS Step Functions workflow] in region
service extractaudio(aws:lambda-lambda-function)[extract audio] in workflow
service transcribeaudio(aws:lambda-lambda-function)[transcribe audio] in workflow
extractaudio:R --> L:transcribeaudio
extractaudio{group}:L <-[Start Execution]- B:handler
extractaudio:T --> B:mediaconvert
transcribeaudio:T --> B:transcribe
```
--------------------------------
### Mermaid AWS Icons from Iconify Architecture Diagram
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/mermaid-js/mermaid.html
Architecture diagram using AWS icons sourced from iconify.design within Mermaid. This example highlights the use of 'logos:aws-' prefixes.
```mermaid
architecture-beta
group api(logos:aws-lambda)[API]
service db(logos:aws-aurora)[Database] in api
service disk1(logos:aws-glacier)[Storage] in api
service disk2(logos:aws-s3)[Storage] in api
service server(logos:aws-ec2)[Server] in api
db:L -- R:server
disk1:T -- B:server
disk2:T -- B:db
```
--------------------------------
### Mermaid AWS Icons from aws-icons-for-plantuml Architecture Diagram
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/mermaid-js/mermaid.html
Architecture diagram using AWS icons from the aws-icons-for-plantuml library within Mermaid. This example uses 'aws:' prefixes and custom theme variables.
```mermaid
---
config:
theme: base
themeVariables:
darkMode: false
archEdgeColor: "#232F3E"
archEdgeArrowColor: "#232F3E"
archGroupBorderColor: "#ED7100"
---
architecture-beta
group api(aws:lambda)[API]
service db(aws:aurora)[Database] in api
service disk1(aws:simple-storage-service-glacier)[Storage] in api
service disk2(aws:simple-storage-service)[Storage] in api
service server(aws:ec2)[Server] in api
db:L <-- R:server
disk1:T <-- B:server
disk2:T <-- B:db
```
--------------------------------
### Check Environment Prerequisites
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Execute this command to verify that all necessary prerequisites for the icon builder are met. It will exit if the environment is ready.
```bash
$ uv run icon-builder.py --check-env
Prerequisites met, exiting
```
--------------------------------
### Check Environment Dependencies for Icon Builder
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Use this command to verify that all necessary prerequisites are met before running the icon builder script. If all dependencies are satisfied, it will confirm and exit.
```bash
uv run icon-builder.py --check-env
Prerequisites met, exiting
```
--------------------------------
### Run Icon Builder Script
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Execute the icon builder script to create a configuration template. This is a preliminary step before generating the final configuration.
```bash
uv run icon-builder.py --create-config-template
```
--------------------------------
### Mermaid Initialization with AWS Icons
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/mermaid-js/mermaid.html
Initializes Mermaid.js with custom AWS icons loaded from a JSON file and registers the 'logos' icon pack. Requires a local server to fetch icons.
```javascript
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11.13.0/dist/mermaid.esm.mjs'; let baseUrl = 'http://localhost:8000'; let icons = await fetch(`${baseUrl}/aws-icons-mermaid.json`).then((res) => res.json()); // https://mermaid.js.org/config/icons.html mermaid.registerIconPacks([ { name: 'logos', loader: () => fetch('https://unpkg.com/@iconify-json/logos@1/icons.json').then((res) => res.json()), }, { name: 'aws', loader: () => icons }, ]); mermaid.initialize({ startOnLoad: true });
```
--------------------------------
### AWS Cloud Diagram with Configuration
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/mermaid-js/mermaid.html
Illustrates an AWS Cloud architecture with API Gateway, Lambda, and DynamoDB. Includes theme configuration.
```plantuml
---
config:
theme: base
themeVariables:
darkMode: false
archEdgeColor: "#232F3E"
archEdgeArrowColor: "#232F3E"
archGroupBorderColor: "#7D8998"
---
architecture-beta
service client(aws:client)[Client]
group awscloud(aws:aws-cloud)[AWS Cloud]
service api(aws:api-gateway)[Amazon API Gateway] in awscloud
service lambda1(aws:lambda)[AWS Lambda] in awscloud
service dynamodb(aws:dynamodb)[Amazon DynamoDB] in awscloud
client:R -[1]-> L:api
api:R -[2]-> L:lambda1
lambda1:R -[3]-> L:dynamodb
junction junctionLeft
service s3(aws:simple-storage-service)[Amazon S3] in awscloud
service lambda2(aws:lambda)[AWS Lambda] in awscloud
junction junctionRight
client:B -- T:junctionLeft
junctionLeft:R -[4]-> L:s3
s3:R -[5]-> L:lambda2
lambda2:R -[6]- L:junctionRight
junctionRight:T --> B:dynamodb
```
--------------------------------
### Mermaid Architecture Diagram: AWS CodePipeline
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/mermaid-js/README.md
An example of an `architecture-beta` Mermaid diagram representing an AWS CodePipeline workflow, including services like CodeBuild, CodeDeploy, and S3. This diagram uses AWS icons for services.
```mermaid
---
config:
theme: base
themeVariables:
darkMode: false
archEdgeColor: "#232F3E"
archEdgeArrowColor: "#232F3E"
archGroupBorderColor: "#C925D1"
---
architecture-beta
group cp(aws:codepipeline)[AWS CodePipeline]
service gr(aws:git-repository)[Git Repository] in cp
service cb(aws:codebuild)[AWS CodeBuild] in cp
service cd1(aws:codedeploy)[AWS CodeDeploy] in cp
service s3(aws:simple-storage-service)[Amazon S3 artifact store] in cp
service user(aws:user)[Human Approval] in cp
service dev(aws:ec2)[Amazon EC2 dev] in cp
service cd2(aws:codedeploy)[AWS CodeDeploy] in cp
service prod(aws:ec2)[Amazon EC2 prod] in cp
service sns(aws:simple-notification-service)[SNS Notification] in cp
gr:R --> L:cb
cb:R --> L:cd1
cb:B --> T:s3
cd1:R --> L:user
cd1:B --> T:dev
user:R --> L:cd2
cd2:B --> T:prod
cd2:R --> L:sns
```
--------------------------------
### Include AWSCommon.puml from Local Path
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/README.md
Include the AWSCommon.puml file from a local path. This method is suitable when the library is downloaded and stored locally.
```plantuml
!include path/to/AWSCommon.puml
```
--------------------------------
### Generate All Icons
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Run the icon-builder script without parameters to generate all new icons and update the config.yml file. This process may take several minutes.
```bash
$ uv run icon-builder.py
```
--------------------------------
### Create New config.yml
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Run this command to create a new default config.yml file from the template. You can rename an existing config.yml to preserve custom settings.
```bash
$ uv run icon-builder.py --create-config-template
../source/AWSCommon.puml
Successfully created config-template.yml
$ mv config-template.yml config.yml
```
--------------------------------
### Initialize Mermaid with AWS Icon Packs
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/mermaid-js/README.md
This JavaScript code initializes Mermaid, registers custom icon packs including AWS icons from a local JSON file, and sets up the Mermaid instance for use. Ensure the 'dist' folder is served locally.
```javascript
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.esm.mjs';
let baseUrl = 'http://localhost:8000';
let icons = await fetch(`${baseUrl}/aws-icons-mermaid.json`).then((res) => res.json());
mermaid.registerIconPacks([
{
name: 'logos',
loader: () =>
fetch('https://unpkg.com/@iconify-json/logos@1/icons.json').then((res) => res.json()),
},
{
name: 'aws',
loader: () => icons
},
]);
mermaid.initialize({ startOnLoad: true });
```
--------------------------------
### Run Icon Builder Script
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Execute the main icon builder script to generate output files after configuration. This script processes the icons and creates various output formats.
```bash
uv run icon-builder.py
```
--------------------------------
### Include AWSCommon.puml from GitHub URL
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/README.md
Include the main AWSCommon.puml file directly from the GitHub repository URL. Ensure you use a specific release version (e.g., v23.0) instead of the main branch for stability.
```plantuml
!include https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v23.0/dist/AWSCommon.puml
```
--------------------------------
### Run Upgrade Script in Read-Only Mode
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Execute the upgrade script in read-only mode to preview changes without modifying files. This is the default behavior.
```bash
uv run upgrade.py file.puml
```
--------------------------------
### Sequence Diagram with Image Tags and Custom Styling
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/README.md
This snippet demonstrates generating a sequence diagram using image tags and applying custom styling for colors, text positioning, and stereotypes. It offers more control over the visual appearance.
```plantuml
@startuml Sequence Diagram - Images
' Uncomment the line below for "dark mode" styling
'!$AWS_DARK = true
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v23.0/dist
!include AWSPuml/AWSCommon.puml
!include AWSPuml/AWSExperimental.puml
!include AWSPuml/Compute/Lambda.puml
!include AWSPuml/NetworkingContentDelivery/APIGateway.puml
!include AWSPuml/General/Internetalt1.puml
!include AWSPuml/General/User.puml
!include AWSPuml/Database/DynamoDB.puml
'Hide the bottom boxes / Use filled triangle arrowheads
hide footbox
skinparam style strictuml
skinparam MaxMessageSize 200
participant "$UserIMG()\nUser" as user
box AWS Cloud
'Instead of using ...Participant(), native creole img tags can be used
participant "$APIGatewayIMG()\nCredit Card System\nAll methods are POST" as api << REST API >>
participant "$LambdaIMG()\nAuthorizeCard\nReturns status" as lambda << python3.9 >>
participant "PaymentTransactions\n$DynamoDBIMG()\nsortkey=transaction_id+token" as db << on-demand >>
endbox
participant "Authorizer\nReturns status and token\n$Internetalt1IMG()" as processor
'Use shortcut syntax for activation with colored lifelines and return keyword
user -> api++ $AWSColor(ApplicationIntegration): <$Callout_1> Process transaction\l<$Callout_SP> "POST /prod/process"
api -> lambda++ $AWSColor(Compute): <$Callout_2> Invokes lambda with\l<$Callout_SP> cardholder details
lambda -> processor++ $AWS_COLOR_SQUID: <$Callout_3> Submit via API token\l<$Callout_SP> card number, expiry, CID
processor -> processor: Validate and\lcreate token
return status code, token
lambda ->> db: PUT transaction id, token
return status code,\rtransaction id
return status code
@enduml
```
--------------------------------
### Mermaid Generic Architecture Diagram
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/mermaid-js/README.md
This Mermaid `architecture-beta` diagram demonstrates the use of generic icons for services like API, Database, Storage, and Server within a group.
```mermaid
architecture-beta
group api(cloud)[API]
service db(database)[Database] in api
service disk1(disk)[Storage] in api
service disk2(disk)[Storage] in api
service server(server)[Server] in api
db:L -- R:server
disk1:T -- B:server
disk2:T -- B:db
```
--------------------------------
### Check PlantUML Version
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Execute the PlantUML JAR with the -version parameter to check its version and license information.
```bash
$ java -jar scripts/plantuml-mit-1.2026.2.jar -version
PlantUML version 1.2026.2 / bb8550d [2026-02-27 17:45:29 UTC]
(MIT source distribution)
```
--------------------------------
### Run Upgrade Script with Overwrite
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Execute the upgrade script with the --overwrite flag to modify PlantUML files directly. Supports filename wildcards for batch updates.
```bash
uv run upgrade.py --overwrite "*.puml"
```
--------------------------------
### Basic AWS IoT Rules Engine Usage
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/README.md
Illustrates a simple AWS architecture workflow using AWS service entities for message processing via the Rules Engine, including an error action. Enable dark mode by uncommenting '!$AWS_DARK = true'.
```plantuml
@startuml Basic Usage - AWS IoT Rules Engine
' Uncomment the line below for "dark mode" styling
'!$AWS_DARK = true
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v23.0/dist
!include AWSPuml/AWSCommon.puml
!include AWSPuml/InternetOfThings/IoTRule.puml
!include AWSPuml/Analytics/KinesisDataStreams.puml
!include AWSPuml/ApplicationIntegration/SimpleQueueService.puml
left to right direction
agent "Published Event" as event
IoTRule(iotRule, "Action Error Rule", "error if Kinesis fails")
KinesisDataStreams(eventStream, "IoT Events", "2 shards")
SimpleQueueService(errorQueue, "Rule Error Queue", "failed Rule actions")
event --> iotRule : JSON message
iotRule --> eventStream : messages
iotRule --> errorQueue : Failed action message
@enduml
```
--------------------------------
### Configure VS Code PlantUML Extension
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Update your VS Code settings.json to use the local PlantUML server for rendering. Ensure the server address matches the one you are running.
```json
"plantuml.render": "PlantUMLServer",
"plantuml.server": "http://localhost:8080/plantuml/"
```
--------------------------------
### AWS Marketplace and CloudFront Diagram
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/mermaid-js/mermaid.html
Depicts a more complex AWS architecture involving Marketplace, Lambda Edge, CloudFront, and S3. Includes theme configuration.
```plantuml
---
config:
theme: base
themeVariables:
darkMode: false
archEdgeColor: "#232F3E"
archEdgeArrowColor: "#232F3E"
archGroupBorderColor: "#7D8998"
---
architecture-beta
service users(aws:users)[Customers]
group awscloud(aws:aws-cloud)[AWS Cloud]
service marketplace(aws:marketplace)[AWS Marketplace] in awscloud
service edge(aws:cloudfront-edge-location)[Lambda Edge] in awscloud
service cloudfront(aws:cloudfront)[Amazon CloudFront] in awscloud
service s3(aws:simple-storage-service)[Amazon S3] in awscloud
service page(aws:documents)[Registration Page] in awscloud
service api(aws:api-gateway)[Amazon API Gateway] in awscloud
service lambda(aws:lambda)[AWS Lambda] in awscloud
service dynamodb(aws:dynamodb)[Amazon DynamoDB] in awscloud
users:R --> L:marketplace
users:B --> L:page
marketplace:B --> T:page
marketplace:R --> L:edge
edge:R --> L:cloudfront
cloudfront:B --> R:page
cloudfront:R --> L:s3
page:B --> T:api
api:R --> L:lambda
lambda:R --> L:dynamodb
```
--------------------------------
### Run Pytest for Upgrade Script
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Execute the pytest suite to test the functionality of the upgrade script. This ensures the script correctly handles icon and category updates.
```bash
uv run pytest test_upgrade.py
```
--------------------------------
### Define Local PUML Include Path
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Redefine the AWSPuml macro in your .puml file to point to your local web server when including .puml files from the dist directory.
```plantuml
!define AWSPuml http://localhost:8000
```
--------------------------------
### Basic AWS Service Diagram
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/mermaid-js/mermaid.html
Defines AWS services and their relationships in a simple diagram. Uses PlantUML syntax.
```plantuml
service prod(aws:ec2)[Amazon EC2 prod] in cp
service sns(aws:simple-notification-service)[SNS Notification] in cp
gr:R --> L:cb
cb:R --> L:cd1
cb:B --> T:s3
cd1:R --> L:user
cd1:B --> T:dev
user:R --> L:cd2
cd2:B --> T:prod
cd2:R --> L:sns
```
--------------------------------
### Define AWSPuml Macro for GitHub URL
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/README.md
Define a macro 'AWSPuml' to point to the distribution directory on GitHub. This simplifies subsequent include statements. It's recommended to use a specific release version.
```plantuml
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v23.0/dist
```
--------------------------------
### Sequence Diagram with Participant Macros
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/README.md
Use this snippet to generate a detailed UML sequence diagram with AWS icons using participant macros. It requires including common AWS and specific service definitions.
```plantuml
@startuml Sequence Diagram - Technical
' Uncomment the line below for "dark mode" styling
'!$AWS_DARK = true
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v23.0/dist
!include AWSPuml/AWSCommon.puml
!include AWSPuml/Compute/all.puml
!include AWSPuml/NetworkingContentDelivery/APIGateway.puml
!include AWSPuml/General/Internetalt1.puml
!include AWSPuml/Database/DynamoDB.puml
actor User as user
APIGatewayParticipant(api, Credit Card System, All methods are POST)
LambdaParticipant(lambda, AuthorizeCard,)
DynamoDBParticipant(db, Payment Transactions, sortkey=transaction_id+token)
Internetalt1Participant(processor, Authorizer, Returns status and token)
user -> api: Process transaction
POST /prod/process
api -> lambda: Invokes lambda with cardholder details
lambda -> processor: Submit via API token
card number, expiry, CID
processor -> processor: Validate and create token
processor -> lambda: Returns status code and token
lambda -> db: PUT transaction id, token
lambda -> api: Returns
status code, transaction id
api -> user: Returns status code
@enduml
```
--------------------------------
### Create Color JSON Mapping
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Run this command to generate the JSON structure for AWS category colors. This is useful when new categories are added or colors are updated. The output needs to be manually copied into AWSCommon.puml.
```bash
$ uv run icon-builder.py --create-color-json
```
--------------------------------
### Basic Cognito Sequence Diagram
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/cognito-scenario/README.md
This snippet uses basic PlantUML syntax to define participants, messages, and an alt fragment for a Cognito authentication flow.
```plantuml
@startuml Amazon S3 objects using IAM Temporary Credentials
title Amazon S3 objects using IAM Temporary Credentials
' compare with https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html
participant "User" as user
participant "Cognito User Pool" as userpool
participant "Cognito Identity Pool" as idpool
participant "S3 Bucket" as s3
participant "STS" as sts
participant "IAM Policy" as permissions
' 1. Authenticate and get tokens
user -> userpool: InitiateAuth
user <-- userpool: ID Token and Access Token
' 2. Exchange tokens for AWS credentials
user -> idpool: GetCredentialsForIdentity
idpool -> idpool: map to IAM Role
idpool -> sts: AssumeRoleWithWebIdentity(Role)
idpool <-- sts: temporary security credentials
user <-- idpool: temporary security credentials
' 3. Access AWS services with credentials
user -> s3: GetObject
s3 -> permissions: check permissions
alt no access
s3 <-- permissions: Deny
user <-- s3: error (AccessDenied)
else access
s3 <-- permissions: Allow
user <-- s3: S3 object
end
@enduml
```
--------------------------------
### Mermaid AWS Cloud and VPC Architecture Diagram
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/mermaid-js/mermaid.html
Detailed architecture diagram of AWS Cloud, VPC, Availability Zones, NAT Gateways, and EC2 instances using aws-icons-for-plantuml. Includes custom theme variables.
```mermaid
---
config:
theme: base
themeVariables:
darkMode: false
archEdgeColor: "#232F3E"
archEdgeArrowColor: "#232F3E"
archGroupBorderColor: "#7D8998"
---
architecture-beta
group awscloud(aws:aws-cloud)[AWS Cloud]
group vpc(aws:vpc)[Virtual private cloud] in awscloud
group az2[Availability Zone 2] in vpc
service nat2(aws:vpc-nat-gateway)[NAT gateway] in az2
service instance21(aws:ec2-instance)[Instance] in az2
service instance22(aws:ec2-instance)[Instance] in az2
group az1[Availability Zone 1] in vpc
service nat1(aws:vpc-nat-gateway)[NAT gateway] in az1
service instance11(aws:ec2-instance)[Instance] in az1
service instance12(aws:ec2-instance)[Instance] in az1
group asg1(aws:auto-scaling-group)[Auto Scaling group] in vpc
service asgr1(aws:ec2-auto-scaling-resource) in asg1
group asg2(aws:auto-scaling-group)[Auto Scaling group] in vpc
service asgr2(aws:ec2-auto-scaling-resource) in asg2
service asg(aws:ec2-auto-scaling)[Amazon EC2 Auto Scaling] in vpc
asg:B -- T:asgr1{group}
asgr1{group}:B -- T:asgr2{group}
instance21:L -- R:asgr1{group}
instance22:L -- R:asgr2{group}
instance11:R -- L:asgr1{group}
instance12:R -- L:asgr2{group}
```
--------------------------------
### PlantUML Diagram with AWS Icons and Colors
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/examples/cognito-scenario/README.md
This PlantUML script defines a diagram illustrating Amazon S3 object access using IAM temporary credentials. It includes definitions for AWS icons, custom colors, and a sequence of interactions between users, Cognito, IAM, and S3.
```plantuml
@startuml Amazon S3 objects using IAM Temporary Credentials
title Amazon S3 objects using IAM Temporary Credentials
' compare with https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html
' Uncomment the line below for "dark mode" styling
'!$AWS_DARK = true
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v22.0/dist
!include AWSPuml/AWSCommon.puml
!include AWSPuml/AWSExperimental.puml
!include AWSPuml/General/User.puml
!include AWSPuml/General/SAMLtoken.puml
!include AWSPuml/SecurityIdentityCompliance/Cognito.puml
!include AWSPuml/SecurityIdentityCompliance/IdentityAccessManagementPermissions.puml
!include AWSPuml/SecurityIdentityCompliance/IdentityAccessManagementAWSSTSAlternate.puml
!include AWSPuml/SecurityIdentityCompliance/IdentityAccessManagementTemporarySecurityCredential.puml
!include AWSPuml/SecurityIdentityCompliance/IdentityAccessManagementRole.puml
!include AWSPuml/Storage/SimpleStorageServiceBucket.puml
!include AWSPuml/Storage/SimpleStorageServiceObject.puml
hide footbox
skinparam style strictuml
skinparam Sequence {
MessageAlignment left
}
skinparam Note {
TextAlignment left
FontColor black
BackgroundColor %lighten($AWS_COLOR_SMILE, 90)
}
skinparam WrapWidth 300
skinparam MaxMessageSize 600
!procedure $AWSIcon($service, $line1, $line2="")
participant "$AWSImg($service)\n$line1\n$line2"
!endprocedure
$AWSIcon(User, " ", "User") as user <>
$AWSIcon(Cognito, "User Pool", "Amazon Cognito") as userpool
$AWSIcon(Cognito, "Identity Pool", "Amazon Cognito") as idpool
$AWSIcon(SimpleStorageServiceBucket, "Bucket", "Amazon S3") as s3 <>
$AWSIcon(IdentityAccessManagementAWSSTSAlternate, " ", "AWS STS") as sts
$AWSIcon(IdentityAccessManagementPermissions, "Policy", "AWS IAM") as permissions
note over userpool
1. Authenticate and get tokens
end note
user -> userpool++ $AWSColor(SecurityIdentityCompliance): InitiateAuth
return ID Token and Access Token
note<> left
$SAMLtokenIMG("0.5") $SAMLtokenIMG("0.5")
end note
note over idpool
2. Exchange tokens for AWS credentials
end note
user -> idpool++ $AWSColor(SecurityIdentityCompliance): GetCredentialsForIdentity
idpool -> idpool: map to IAM Role
$AWSIconLeft(IdentityAccessManagementRole)
idpool -> sts++ $AWSColor(SecurityIdentityCompliance): AssumeRoleWithWebIdentity(Role)
return temporary security credentials
$AWSIconLeft(IdentityAccessManagementTemporarySecurityCredential)
return temporary security credentials
$AWSIconLeft(IdentityAccessManagementTemporarySecurityCredential)
note over s3
3. Access AWS services with credentials
end note
user -> s3++ $AWSColor(Storage): GetObject
s3 -> permissions++ $AWSColor(SecurityIdentityCompliance): check permissions
alt no access
permissions --> s3: ❌ Deny
s3 --> user: error (AccessDenied)
else access
return ✅ Allow
return S3 object
$AWSIconLeft(SimpleStorageServiceObject)
end
@enduml
```
--------------------------------
### VPC with Availability Zones and Subnets
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/README.md
This snippet defines a VPC with multiple Availability Zones and subnets, including NAT gateways and EC2 instances. It uses predefined group macros for AWS Cloud, VPC, Availability Zone, and Subnets.
```plantuml
@startuml VPC
' Uncomment the line below for "dark mode" styling
'!$AWS_DARK = true
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v23.0/dist
!include AWSPuml/AWSCommon.puml
!include AWSPuml/AWSSimplified.puml
!include AWSPuml/Compute/EC2.puml
!include AWSPuml/Compute/EC2Instance.puml
!include AWSPuml/Groups/AWSCloud.puml
!include AWSPuml/Groups/VPC.puml
!include AWSPuml/Groups/AvailabilityZone.puml
!include AWSPuml/Groups/PublicSubnet.puml
!include AWSPuml/Groups/PrivateSubnet.puml
!include AWSPuml/NetworkingContentDelivery/VPCNATGateway.puml
!include AWSPuml/NetworkingContentDelivery/VPCInternetGateway.puml
hide stereotype
skinparam linetype ortho
AWSCloudGroup(cloud) {
VPCGroup(vpc) {
VPCInternetGateway(internet_gateway, "Internet gateway", "")
AvailabilityZoneGroup(az_1, "\tAvailability Zone 1\t") {
PublicSubnetGroup(az_1_public, "Public subnet") {
VPCNATGateway(az_1_nat_gateway, "NAT gateway", "") #Transparent
}
PrivateSubnetGroup(az_1_private, "Private subnet") {
EC2Instance(az_1_ec2_1, "Instance", "") #Transparent
}
az_1_ec2_1 .u.> az_1_nat_gateway
}
AvailabilityZoneGroup(az_2, "\tAvailability Zone 2\t") {
PublicSubnetGroup(az_2_public, "Public subnet") {
VPCNATGateway(az_2_nat_gateway, "NAT gateway", "") #Transparent
}
PrivateSubnetGroup(az_2_private, "Private subnet") {
EC2Instance(az_2_ec2_1, "Instance", "") #Transparent
}
az_2_ec2_1 .u.> az_2_nat_gateway
}
az_2_nat_gateway .[hidden]u.> internet_gateway
az_1_nat_gateway .[hidden]u.> internet_gateway
}
}
@enduml
```
--------------------------------
### Raw Image Usage in PlantUML Diagrams
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/README.md
Shows how to include individual AWS icon images directly within PlantUML diagrams for components, databases, and compute services. Enable dark mode by uncommenting '!$AWS_DARK = true'.
```plantuml
@startuml Raw usage - Images
' Uncomment the line below for "dark mode" styling
'!$AWS_DARK = true
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v23.0/dist
!include AWSPuml/AWSCommon.puml
!include AWSPuml/ArtificialIntelligence/SageMakerAIModel.puml
!include AWSPuml/Compute/Compute.puml
!include AWSPuml/General/Documents.puml
component "$SageMakerAIModelIMG()" as myMLModel
database "$DocumentsIMG()" as myDocuments
Compute(mySecondFunction, "Agent Runtime", "Python")
rectangle "$SageMakerAIModelIMG()" as mySecondML
myMLModel --> myDocuments
mySecondFunction --> mySecondML
@enduml
```
--------------------------------
### Generate Simplified View PlantUML Diagram
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/README.md
This PlantUML script generates a simplified view of an application architecture by uncommenting the `AWSSimplified.puml` include. This view focuses on high-level interactions, omitting technical details for executive-level discussions.
```plantuml
@startuml Two Modes - Technical View
' Uncomment the line below for "dark mode" styling
'!$AWS_DARK = true
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v23.0/dist
!include AWSPuml/AWSCommon.puml
' Uncomment the following line to create simplified view
!include AWSPuml/AWSSimplified.puml
!include AWSPuml/General/Users.puml
!include AWSPuml/NetworkingContentDelivery/APIGateway.puml
!include AWSPuml/SecurityIdentityCompliance/Cognito.puml
!include AWSPuml/Compute/Lambda.puml
!include AWSPuml/Database/DynamoDB.puml
left to right direction
Users(sources, "Events", "millions of users")
APIGateway(votingAPI, "Voting API", "user votes")
Cognito(userAuth, "User Authentication", "jwt to submit votes")
Lambda(generateToken, "User Credentials", "return jwt")
Lambda(recordVote, "Record Vote", "enter or update vote per user")
DynamoDB(voteDb, "Vote Database", "one entry per user")
sources --> userAuth
sources --> votingAPI
userAuth <--> generateToken
votingAPI --> recordVote
recordVote --> voteDb
@enduml
```
--------------------------------
### Generate Symbols Only
Source: https://github.com/awslabs/aws-icons-for-plantuml/blob/main/scripts/README.md
Use this parameter to regenerate only the AWSSymbols.md, Structurizr theme, and Mermaid icons files after icons have been created.
```bash
$ uv run icon-builder.py --symbols-only
```