AWS Data Pipeline
In this example the Digraph has a left to right direction as defined by the rankdir variable. The separation between the nodes is defined by the ranksep parameter and minimal border padding around the image by pad.
The following image:

was generated with this code:
require 'diagrams-rb'
module Diagrams
Digraph.new(rankdir: 'LR', ranksep: 1, pad: 0.5) do
node :elb, label: 'Elastic Load Balancing', icon: Aws::Network.elastic_load_balancing
node :ecs, label: 'Amazon ECS', icon: Aws::Compute.elastic_container_service
cluster margin: 10, style: 'dotted' do
node :kafka, label: 'Amazon Managed\nStreaming of\nApache Kafka', icon: Aws::Analytics.managed_streaming_for_kafka
node :kinesis, label: 'Amazon Kenisis\nData Streams', icon: Aws::Analytics.kinesis_data_streams
node :s3, label: 'Amazon S3', icon: Aws::Storage.simple_storage_service_s3
end
node :emr, label: 'Amazon EMR Serverless', icon: Aws::Analytics.emr
node :redshift, label: 'Amazon Redshift', icon: Aws::Analytics.redshift
node :quicksight, label: 'Amazon QuickSight', icon: Aws::Analytics.quicksight
streams = %i[kafka kinesis]
edge :elb, to: :ecs
edge :ecs, to: streams, style: 'dashed'
edge :ecs, to: :s3, style: 'dashed'
edge streams, to: :s3
edge :s3, to: :emr
edge :emr, to: :redshift
edge :redshift, to: :quicksight
end
end
This can be extended to a more complex example which illustrates the use of some of the additional Graphviz attributes:
require 'diagrams-rb'
module Diagrams
Digraph.new(rankdir: 'LR', ranksep: 1.1, pad: 0.2) do # rubocop:disable Metrics/BlockLength
node :admin, label: 'Admin', icon: Aws::General.user
cluster 'AWS Cloud', margin: 30 do # rubocop:disable Metrics/BlockLength
node :cloudfront, label: 'Amazon CloudFront', icon: Aws::Network.cloudfront
node :apigateway, label: 'Amazon API Gateway', icon: Aws::Mobile.api_gateway
node :s3_a, label: 'Amazon S3', icon: Aws::Storage.simple_storage_service_s3
node :lambda_a, label: 'Amazon Lambda', icon: Aws::Compute.lambda
node :dynamodb, label: 'Amazon DynamoDB', icon: Aws::Database.dynamodb
cluster 'OpenID Connect', style: 'dashed' do
node :cognito, label: 'Amazon Cognito\nUser Pool', icon: Aws::Security.cognito
end
cluster 'Pipeline Orchestration', margin: 50, style: 'dotted' do
node :pipeline_orchestration, label: '', icon: nil, style: 'invis'
node :cloudformation, label: 'Amazon CloudFormation', icon: Aws::Management.cloudformation
node :stepfunctions, label: 'Amazon Step Functions', icon: Aws::Integration.step_functions
node :eventbridge, label: 'Amazon EventBridge', icon: Aws::Integration.eventbridge
node :lambda_b, label: 'Amazon Lambda', icon: Aws::Compute.lambda
end
cluster 'Data Pipeline', margin: 30, style: 'dotted' do
node :data_pipeline, label: '', icon: nil, style: 'invis'
node :elb, label: 'Elastic Load Balancing', icon: Aws::Network.elastic_load_balancing
node :ecs, label: 'Amazon ECS', icon: Aws::Compute.elastic_container_service
cluster margin: 10, style: 'dotted' do
node :kafka, label: 'Amazon Managed\nStreaming of\nApache Kafka', icon: Aws::Analytics.managed_streaming_for_kafka
node :kinesis, label: 'Amazon Kenisis\nData Streams', icon: Aws::Analytics.kinesis_data_streams
node :s3_b, label: 'Amazon S3', icon: Aws::Storage.simple_storage_service_s3
end
node :emr, label: 'Amazon EMR Serverless', icon: Aws::Analytics.emr
node :redshift, label: 'Amazon Redshift', icon: Aws::Analytics.redshift
node :quicksight, label: 'Amazon QuickSight', icon: Aws::Analytics.quicksight
end
end
streams = %i[kafka kinesis]
edge :admin, to: :cloudfront
edge :cloudfront, to: :apigateway
edge :apigateway, to: :cognito, taillabel: 'Authenticate', labeldistance: 0.5, arrowhead: 'none'
edge :s3_a, to: :cognito, label: 'Login', lhead: 'cluster_OpenID_Connect'
edge :apigateway, to: :lambda_a
edge :cloudfront, to: :s3_a
edge :lambda_a, to: :cloudformation, taillabel: 'Execute', labeldistance: 0.5, arrowhead: 'none'
edge :lambda_a, to: :dynamodb
edge :lambda_b, to: :dynamodb
edge :elb, to: :ecs
edge :ecs, to: streams, style: 'dashed'
edge :ecs, to: :s3_b, style: 'dashed'
edge streams, to: :s3_b
edge :s3_b, to: :emr
edge :emr, to: :redshift
edge :redshift, to: :quicksight
edge :cloudformation, to: :stepfunctions, style: 'invis'
edge :stepfunctions, to: :eventbridge, style: 'invis'
edge :eventbridge, to: :lambda_b, style: 'invis'
edge :pipeline_orchestration, to: :data_pipeline
end
end
to produce the following image:

Architecture diagram taken from the AWS documentation