Open PatMyron opened 4 years ago
How did you generate this? I'm interested in knowing provisioning times of other types, e.g. AWS::SQS::Queue
re-wrote using matplotlib
for more easily updatable graphing:
from collections import OrderedDict
import matplotlib.pyplot as plt
from operator import itemgetter
map = {'AWS::DirectoryService::MicrosoftAD': 1263,
'AWS::MSK::Cluster': 1078,
'AWS::ImageBuilder::Image': 1037,
'AWS::Elasticsearch::Domain': 814,
'AWS::FSx::FileSystem': 714,
'AWS::OpsWorksCM::Server': 673,
'AWS::AmazonMQ::Broker': 621,
'AWS::DAX::Cluster': 558,
'AWS::RDS::DBInstance': 489,
'AWS::ApiGateway::VpcLink': 437,
'AWS::Glue::DevEndpoint': 426,
'AWS::EC2::ClientVpnTargetNetworkAssociation': 366,
'AWS::SageMaker::Endpoint': 343,
'AWS::CloudFront::Distribution': 293,
'AWS::CloudFront::StreamingDistribution': 287,
'AWS::Config::OrganizationConformancePack': 247,
'AWS::KMS::Key': 238,
'AWS::DMS::ReplicationInstance': 212,
'AWS::AppConfig::Deployment': 198,
'AWS::ElasticBeanstalk::Environment': 190,
'AWS::CloudFormation::WaitCondition': 186,
'AWS::ElastiCache::CacheCluster': 176,
'AWS::AmazonMQ::ConfigurationAssociation': 164,
'AWS::SageMaker::NotebookInstance': 154,
'AWS::Config::OrganizationConfigRule': 152,
'AWS::EC2::ClientVpnAuthorizationRule': 146,
'AWS::ElasticLoadBalancingV2::LoadBalancer': 136,
'AWS::IAM::InstanceProfile': 120,
'AWS::EC2::NatGateway': 110,
'AWS::EC2::Instance': 100,
'AWS::Lambda::Version': 92,
'AWS::EC2::VPCEndpoint': 92,
'AWS::EC2::TransitGateway': 92,
'AWS::EFS::MountTarget': 91,
'AWS::Route53::HostedZone': 80,
'AWS::RDS::DBCluster': 61,
'AWS::AutoScalingPlans::ScalingPlan': 60,
'AWS::Events::Rule': 60,
'AWS::EC2::TransitGatewayAttachment': 60,
'AWS::Route53::RecordSet': 59,
'AWS::Route53Resolver::ResolverRuleAssociation': 59,
'AWS::KinesisFirehose::DeliveryStream': 58,
'AWS::Route53::RecordSetGroup': 52,
'AWS::ServiceCatalog::CloudFormationProvisionedProduct': 48,
'AWS::Config::ConformancePack': 46,
'AWS::ServiceDiscovery::PublicDnsNamespace': 45,
'AWS::ServiceDiscovery::HttpNamespace': 45,
'AWS::DMS::ReplicationTask': 43,
'AWS::CloudFormation::Stack': 36,
'AWS::Route53Resolver::ResolverEndpoint': 36,
'AWS::IAM::User': 35,
'AWS::IAM::Group': 35,
'AWS::WAFRegional::RegexPatternSet': 34,
'AWS::WAFRegional::XssMatchSet': 33,
'AWS::WAFRegional::RateBasedRule': 33,
'AWS::EC2::TransitGatewayRouteTable': 32,
'AWS::WAFRegional::SqlInjectionMatchSet': 32,
'AWS::WAFRegional::GeoMatchSet': 32,
'AWS::WAFRegional::Rule': 32,
'AWS::WAFRegional::IPSet': 31,
'AWS::WAFRegional::SizeConstraintSet': 31,
'AWS::EC2::ClientVpnRoute': 31,
'AWS::Batch::JobQueue': 30,
'AWS::Batch::ComputeEnvironment': 30,
'AWS::WAFRegional::WebACL': 30,
'AWS::DynamoDB::Table': 30,
'AWS::WAFRegional::ByteMatchSet': 30,
'AWS::EFS::FileSystem': 30,
'AWS::Kinesis::Stream': 30,
'AWS::Detective::MemberInvitation': 26,
'AWS::ECS::TaskSet': 24,
'AWS::DMS::EventSubscription': 23,
'Alexa::ASK::Skill': 22,
'AWS::S3::Bucket': 20,
'AWS::AutoScaling::AutoScalingGroup': 20,}
plt.figure(figsize=(8, 15))
plt.barh(*zip(*OrderedDict(sorted(map.items(), key=itemgetter(1))).items()))
plt.xlabel('seconds')
plt.title('CloudFormation resource type provisioning time')
plt.gca().get_xaxis().get_major_formatter().set_scientific(False)
plt.show()
(excluded anything <20s or without data for better visibility)
old graph:
https://plot.ly/~PatMyron/13
https://github.com/jaredtrog/cfplot
https://aws.amazon.com/blogs/devops/how-we-sped-up-aws-cloudformation-deployments-with-optimistic-stabilization/