From 42bbf7161dcd976be5c344d378c2cfae721b29f7 Mon Sep 17 00:00:00 2001 From: Eric Beard Date: Thu, 7 Sep 2023 16:24:49 -0700 Subject: [PATCH 1/7] Initializing estimates --- internal/cmd/forecast/all-types.txt | 1135 ++++++++++++++++++++++ internal/cmd/forecast/estimate.go | 1200 ++++++++++++++++++++++++ internal/cmd/forecast/estimate_test.go | 16 + internal/cmd/forecast/forecast.go | 3 + 4 files changed, 2354 insertions(+) create mode 100644 internal/cmd/forecast/all-types.txt create mode 100644 internal/cmd/forecast/estimate.go create mode 100644 internal/cmd/forecast/estimate_test.go diff --git a/internal/cmd/forecast/all-types.txt b/internal/cmd/forecast/all-types.txt new file mode 100644 index 00000000..604fef42 --- /dev/null +++ b/internal/cmd/forecast/all-types.txt @@ -0,0 +1,1135 @@ +AWS::ACMPCA::Certificate +AWS::ACMPCA::CertificateAuthority +AWS::ACMPCA::CertificateAuthorityActivation +AWS::ACMPCA::Permission +AWS::APS::RuleGroupsNamespace +AWS::APS::Workspace +AWS::AccessAnalyzer::Analyzer +AWS::AmazonMQ::Broker +AWS::AmazonMQ::Configuration +AWS::AmazonMQ::ConfigurationAssociation +AWS::Amplify::App +AWS::Amplify::Branch +AWS::Amplify::Domain +AWS::AmplifyUIBuilder::Component +AWS::AmplifyUIBuilder::Form +AWS::AmplifyUIBuilder::Theme +AWS::ApiGateway::Account +AWS::ApiGateway::ApiKey +AWS::ApiGateway::Authorizer +AWS::ApiGateway::BasePathMapping +AWS::ApiGateway::ClientCertificate +AWS::ApiGateway::Deployment +AWS::ApiGateway::DocumentationPart +AWS::ApiGateway::DocumentationVersion +AWS::ApiGateway::DomainName +AWS::ApiGateway::GatewayResponse +AWS::ApiGateway::Method +AWS::ApiGateway::Model +AWS::ApiGateway::RequestValidator +AWS::ApiGateway::Resource +AWS::ApiGateway::RestApi +AWS::ApiGateway::Stage +AWS::ApiGateway::UsagePlan +AWS::ApiGateway::UsagePlanKey +AWS::ApiGateway::VpcLink +AWS::ApiGatewayV2::Api +AWS::ApiGatewayV2::ApiGatewayManagedOverrides +AWS::ApiGatewayV2::ApiMapping +AWS::ApiGatewayV2::Authorizer +AWS::ApiGatewayV2::Deployment +AWS::ApiGatewayV2::DomainName +AWS::ApiGatewayV2::Integration +AWS::ApiGatewayV2::IntegrationResponse +AWS::ApiGatewayV2::Model +AWS::ApiGatewayV2::Route +AWS::ApiGatewayV2::RouteResponse +AWS::ApiGatewayV2::Stage +AWS::ApiGatewayV2::VpcLink +AWS::AppConfig::Application +AWS::AppConfig::ConfigurationProfile +AWS::AppConfig::Deployment +AWS::AppConfig::DeploymentStrategy +AWS::AppConfig::Environment +AWS::AppConfig::Extension +AWS::AppConfig::ExtensionAssociation +AWS::AppConfig::HostedConfigurationVersion +AWS::AppFlow::Connector +AWS::AppFlow::ConnectorProfile +AWS::AppFlow::Flow +AWS::AppIntegrations::DataIntegration +AWS::AppIntegrations::EventIntegration +AWS::AppMesh::GatewayRoute +AWS::AppMesh::Mesh +AWS::AppMesh::Route +AWS::AppMesh::VirtualGateway +AWS::AppMesh::VirtualNode +AWS::AppMesh::VirtualRouter +AWS::AppMesh::VirtualService +AWS::AppRunner::AutoScalingConfiguration +AWS::AppRunner::ObservabilityConfiguration +AWS::AppRunner::Service +AWS::AppRunner::VpcConnector +AWS::AppRunner::VpcIngressConnection +AWS::AppStream::AppBlock +AWS::AppStream::AppBlockBuilder +AWS::AppStream::Application +AWS::AppStream::ApplicationEntitlementAssociation +AWS::AppStream::ApplicationFleetAssociation +AWS::AppStream::DirectoryConfig +AWS::AppStream::Entitlement +AWS::AppStream::Fleet +AWS::AppStream::ImageBuilder +AWS::AppStream::Stack +AWS::AppStream::StackFleetAssociation +AWS::AppStream::StackUserAssociation +AWS::AppStream::User +AWS::AppSync::ApiCache +AWS::AppSync::ApiKey +AWS::AppSync::DataSource +AWS::AppSync::DomainName +AWS::AppSync::DomainNameApiAssociation +AWS::AppSync::FunctionConfiguration +AWS::AppSync::GraphQLApi +AWS::AppSync::GraphQLSchema +AWS::AppSync::Resolver +AWS::AppSync::SourceApiAssociation +AWS::ApplicationAutoScaling::ScalableTarget +AWS::ApplicationAutoScaling::ScalingPolicy +AWS::ApplicationInsights::Application +AWS::Athena::CapacityReservation +AWS::Athena::DataCatalog +AWS::Athena::NamedQuery +AWS::Athena::PreparedStatement +AWS::Athena::WorkGroup +AWS::AuditManager::Assessment +AWS::AutoScaling::AutoScalingGroup +AWS::AutoScaling::LaunchConfiguration +AWS::AutoScaling::LifecycleHook +AWS::AutoScaling::ScalingPolicy +AWS::AutoScaling::ScheduledAction +AWS::AutoScaling::WarmPool +AWS::AutoScalingPlans::ScalingPlan +AWS::Backup::BackupPlan +AWS::Backup::BackupSelection +AWS::Backup::BackupVault +AWS::Backup::Framework +AWS::Backup::ReportPlan +AWS::BackupGateway::Hypervisor +AWS::Batch::ComputeEnvironment +AWS::Batch::JobDefinition +AWS::Batch::JobQueue +AWS::Batch::SchedulingPolicy +AWS::BillingConductor::BillingGroup +AWS::BillingConductor::CustomLineItem +AWS::BillingConductor::PricingPlan +AWS::BillingConductor::PricingRule +AWS::Budgets::Budget +AWS::Budgets::BudgetsAction +AWS::CE::AnomalyMonitor +AWS::CE::AnomalySubscription +AWS::CE::CostCategory +AWS::CUR::ReportDefinition +AWS::Cassandra::Keyspace +AWS::Cassandra::Table +AWS::CertificateManager::Account +AWS::CertificateManager::Certificate +AWS::Chatbot::MicrosoftTeamsChannelConfiguration +AWS::Chatbot::SlackChannelConfiguration +AWS::CleanRooms::AnalysisTemplate +AWS::CleanRooms::Collaboration +AWS::CleanRooms::ConfiguredTable +AWS::CleanRooms::ConfiguredTableAssociation +AWS::CleanRooms::Membership +AWS::Cloud9::EnvironmentEC2 +AWS::CloudFormation::CustomResource +AWS::CloudFormation::HookDefaultVersion +AWS::CloudFormation::HookTypeConfig +AWS::CloudFormation::HookVersion +AWS::CloudFormation::Macro +AWS::CloudFormation::ModuleDefaultVersion +AWS::CloudFormation::ModuleVersion +AWS::CloudFormation::PublicTypeVersion +AWS::CloudFormation::Publisher +AWS::CloudFormation::ResourceDefaultVersion +AWS::CloudFormation::ResourceVersion +AWS::CloudFormation::Stack +AWS::CloudFormation::StackSet +AWS::CloudFormation::TypeActivation +AWS::CloudFormation::WaitCondition +AWS::CloudFormation::WaitConditionHandle +AWS::CloudFront::CachePolicy +AWS::CloudFront::CloudFrontOriginAccessIdentity +AWS::CloudFront::ContinuousDeploymentPolicy +AWS::CloudFront::Distribution +AWS::CloudFront::Function +AWS::CloudFront::KeyGroup +AWS::CloudFront::MonitoringSubscription +AWS::CloudFront::OriginAccessControl +AWS::CloudFront::OriginRequestPolicy +AWS::CloudFront::PublicKey +AWS::CloudFront::RealtimeLogConfig +AWS::CloudFront::ResponseHeadersPolicy +AWS::CloudFront::StreamingDistribution +AWS::CloudTrail::Channel +AWS::CloudTrail::EventDataStore +AWS::CloudTrail::ResourcePolicy +AWS::CloudTrail::Trail +AWS::CloudWatch::Alarm +AWS::CloudWatch::AnomalyDetector +AWS::CloudWatch::CompositeAlarm +AWS::CloudWatch::Dashboard +AWS::CloudWatch::InsightRule +AWS::CloudWatch::MetricStream +AWS::CodeArtifact::Domain +AWS::CodeArtifact::Repository +AWS::CodeBuild::Project +AWS::CodeBuild::ReportGroup +AWS::CodeBuild::SourceCredential +AWS::CodeCommit::Repository +AWS::CodeDeploy::Application +AWS::CodeDeploy::DeploymentConfig +AWS::CodeDeploy::DeploymentGroup +AWS::CodeGuruProfiler::ProfilingGroup +AWS::CodeGuruReviewer::RepositoryAssociation +AWS::CodePipeline::CustomActionType +AWS::CodePipeline::Pipeline +AWS::CodePipeline::Webhook +AWS::CodeStar::GitHubRepository +AWS::CodeStarConnections::Connection +AWS::CodeStarNotifications::NotificationRule +AWS::Cognito::IdentityPool +AWS::Cognito::IdentityPoolPrincipalTag +AWS::Cognito::IdentityPoolRoleAttachment +AWS::Cognito::UserPool +AWS::Cognito::UserPoolClient +AWS::Cognito::UserPoolDomain +AWS::Cognito::UserPoolGroup +AWS::Cognito::UserPoolIdentityProvider +AWS::Cognito::UserPoolResourceServer +AWS::Cognito::UserPoolRiskConfigurationAttachment +AWS::Cognito::UserPoolUICustomizationAttachment +AWS::Cognito::UserPoolUser +AWS::Cognito::UserPoolUserToGroupAttachment +AWS::Comprehend::DocumentClassifier +AWS::Comprehend::Flywheel +AWS::Config::AggregationAuthorization +AWS::Config::ConfigRule +AWS::Config::ConfigurationAggregator +AWS::Config::ConfigurationRecorder +AWS::Config::ConformancePack +AWS::Config::DeliveryChannel +AWS::Config::OrganizationConfigRule +AWS::Config::OrganizationConformancePack +AWS::Config::RemediationConfiguration +AWS::Config::StoredQuery +AWS::Connect::ApprovedOrigin +AWS::Connect::ContactFlow +AWS::Connect::ContactFlowModule +AWS::Connect::EvaluationForm +AWS::Connect::HoursOfOperation +AWS::Connect::Instance +AWS::Connect::InstanceStorageConfig +AWS::Connect::IntegrationAssociation +AWS::Connect::PhoneNumber +AWS::Connect::Prompt +AWS::Connect::Queue +AWS::Connect::QuickConnect +AWS::Connect::RoutingProfile +AWS::Connect::Rule +AWS::Connect::SecurityKey +AWS::Connect::TaskTemplate +AWS::Connect::TrafficDistributionGroup +AWS::Connect::User +AWS::Connect::UserHierarchyGroup +AWS::Connect::View +AWS::Connect::ViewVersion +AWS::ConnectCampaigns::Campaign +AWS::ControlTower::EnabledControl +AWS::CustomerProfiles::CalculatedAttributeDefinition +AWS::CustomerProfiles::Domain +AWS::CustomerProfiles::EventStream +AWS::CustomerProfiles::Integration +AWS::CustomerProfiles::ObjectType +AWS::DAX::Cluster +AWS::DAX::ParameterGroup +AWS::DAX::SubnetGroup +AWS::DLM::LifecyclePolicy +AWS::DMS::Certificate +AWS::DMS::Endpoint +AWS::DMS::EventSubscription +AWS::DMS::ReplicationConfig +AWS::DMS::ReplicationInstance +AWS::DMS::ReplicationSubnetGroup +AWS::DMS::ReplicationTask +AWS::DataBrew::Dataset +AWS::DataBrew::Job +AWS::DataBrew::Project +AWS::DataBrew::Recipe +AWS::DataBrew::Ruleset +AWS::DataBrew::Schedule +AWS::DataPipeline::Pipeline +AWS::DataSync::Agent +AWS::DataSync::LocationAzureBlob +AWS::DataSync::LocationEFS +AWS::DataSync::LocationFSxLustre +AWS::DataSync::LocationFSxONTAP +AWS::DataSync::LocationFSxOpenZFS +AWS::DataSync::LocationFSxWindows +AWS::DataSync::LocationHDFS +AWS::DataSync::LocationNFS +AWS::DataSync::LocationObjectStorage +AWS::DataSync::LocationS3 +AWS::DataSync::LocationSMB +AWS::DataSync::StorageSystem +AWS::DataSync::Task +AWS::Detective::Graph +AWS::Detective::MemberInvitation +AWS::Detective::OrganizationAdmin +AWS::DevOpsGuru::LogAnomalyDetectionIntegration +AWS::DevOpsGuru::NotificationChannel +AWS::DevOpsGuru::ResourceCollection +AWS::DirectoryService::MicrosoftAD +AWS::DirectoryService::SimpleAD +AWS::DocDB::DBCluster +AWS::DocDB::DBClusterParameterGroup +AWS::DocDB::DBInstance +AWS::DocDB::DBSubnetGroup +AWS::DocDBElastic::Cluster +AWS::DynamoDB::GlobalTable +AWS::DynamoDB::Table +AWS::EC2::CapacityReservation +AWS::EC2::CapacityReservationFleet +AWS::EC2::CarrierGateway +AWS::EC2::ClientVpnAuthorizationRule +AWS::EC2::ClientVpnEndpoint +AWS::EC2::ClientVpnRoute +AWS::EC2::ClientVpnTargetNetworkAssociation +AWS::EC2::CustomerGateway +AWS::EC2::DHCPOptions +AWS::EC2::EC2Fleet +AWS::EC2::EIP +AWS::EC2::EIPAssociation +AWS::EC2::EgressOnlyInternetGateway +AWS::EC2::EnclaveCertificateIamRoleAssociation +AWS::EC2::FlowLog +AWS::EC2::GatewayRouteTableAssociation +AWS::EC2::Host +AWS::EC2::IPAM +AWS::EC2::IPAMAllocation +AWS::EC2::IPAMPool +AWS::EC2::IPAMPoolCidr +AWS::EC2::IPAMResourceDiscovery +AWS::EC2::IPAMResourceDiscoveryAssociation +AWS::EC2::IPAMScope +AWS::EC2::Instance +AWS::EC2::InstanceConnectEndpoint +AWS::EC2::InternetGateway +AWS::EC2::KeyPair +AWS::EC2::LaunchTemplate +AWS::EC2::LocalGatewayRoute +AWS::EC2::LocalGatewayRouteTable +AWS::EC2::LocalGatewayRouteTableVPCAssociation +AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation +AWS::EC2::NatGateway +AWS::EC2::NetworkAcl +AWS::EC2::NetworkAclEntry +AWS::EC2::NetworkInsightsAccessScope +AWS::EC2::NetworkInsightsAccessScopeAnalysis +AWS::EC2::NetworkInsightsAnalysis +AWS::EC2::NetworkInsightsPath +AWS::EC2::NetworkInterface +AWS::EC2::NetworkInterfaceAttachment +AWS::EC2::NetworkInterfacePermission +AWS::EC2::NetworkPerformanceMetricSubscription +AWS::EC2::PlacementGroup +AWS::EC2::PrefixList +AWS::EC2::Route +AWS::EC2::RouteTable +AWS::EC2::SecurityGroup +AWS::EC2::SecurityGroupEgress +AWS::EC2::SecurityGroupIngress +AWS::EC2::SpotFleet +AWS::EC2::Subnet +AWS::EC2::SubnetCidrBlock +AWS::EC2::SubnetNetworkAclAssociation +AWS::EC2::SubnetRouteTableAssociation +AWS::EC2::TrafficMirrorFilter +AWS::EC2::TrafficMirrorFilterRule +AWS::EC2::TrafficMirrorSession +AWS::EC2::TrafficMirrorTarget +AWS::EC2::TransitGateway +AWS::EC2::TransitGatewayAttachment +AWS::EC2::TransitGatewayConnect +AWS::EC2::TransitGatewayMulticastDomain +AWS::EC2::TransitGatewayMulticastDomainAssociation +AWS::EC2::TransitGatewayMulticastGroupMember +AWS::EC2::TransitGatewayMulticastGroupSource +AWS::EC2::TransitGatewayPeeringAttachment +AWS::EC2::TransitGatewayRoute +AWS::EC2::TransitGatewayRouteTable +AWS::EC2::TransitGatewayRouteTableAssociation +AWS::EC2::TransitGatewayRouteTablePropagation +AWS::EC2::TransitGatewayVpcAttachment +AWS::EC2::VPC +AWS::EC2::VPCCidrBlock +AWS::EC2::VPCDHCPOptionsAssociation +AWS::EC2::VPCEndpoint +AWS::EC2::VPCEndpointConnectionNotification +AWS::EC2::VPCEndpointService +AWS::EC2::VPCEndpointServicePermissions +AWS::EC2::VPCGatewayAttachment +AWS::EC2::VPCPeeringConnection +AWS::EC2::VPNConnection +AWS::EC2::VPNConnectionRoute +AWS::EC2::VPNGateway +AWS::EC2::VPNGatewayRoutePropagation +AWS::EC2::VerifiedAccessEndpoint +AWS::EC2::VerifiedAccessGroup +AWS::EC2::VerifiedAccessInstance +AWS::EC2::VerifiedAccessTrustProvider +AWS::EC2::Volume +AWS::EC2::VolumeAttachment +AWS::ECR::PublicRepository +AWS::ECR::PullThroughCacheRule +AWS::ECR::RegistryPolicy +AWS::ECR::ReplicationConfiguration +AWS::ECR::Repository +AWS::ECS::CapacityProvider +AWS::ECS::Cluster +AWS::ECS::ClusterCapacityProviderAssociations +AWS::ECS::PrimaryTaskSet +AWS::ECS::Service +AWS::ECS::TaskDefinition +AWS::ECS::TaskSet +AWS::EFS::AccessPoint +AWS::EFS::FileSystem +AWS::EFS::MountTarget +AWS::EKS::Addon +AWS::EKS::Cluster +AWS::EKS::FargateProfile +AWS::EKS::IdentityProviderConfig +AWS::EKS::Nodegroup +AWS::EMR::Cluster +AWS::EMR::InstanceFleetConfig +AWS::EMR::InstanceGroupConfig +AWS::EMR::SecurityConfiguration +AWS::EMR::Step +AWS::EMR::Studio +AWS::EMR::StudioSessionMapping +AWS::EMR::WALWorkspace +AWS::EMRContainers::VirtualCluster +AWS::EMRServerless::Application +AWS::ElastiCache::CacheCluster +AWS::ElastiCache::GlobalReplicationGroup +AWS::ElastiCache::ParameterGroup +AWS::ElastiCache::ReplicationGroup +AWS::ElastiCache::SecurityGroup +AWS::ElastiCache::SecurityGroupIngress +AWS::ElastiCache::SubnetGroup +AWS::ElastiCache::User +AWS::ElastiCache::UserGroup +AWS::ElasticBeanstalk::Application +AWS::ElasticBeanstalk::ApplicationVersion +AWS::ElasticBeanstalk::ConfigurationTemplate +AWS::ElasticBeanstalk::Environment +AWS::ElasticLoadBalancing::LoadBalancer +AWS::ElasticLoadBalancingV2::Listener +AWS::ElasticLoadBalancingV2::ListenerCertificate +AWS::ElasticLoadBalancingV2::ListenerRule +AWS::ElasticLoadBalancingV2::LoadBalancer +AWS::ElasticLoadBalancingV2::TargetGroup +AWS::Elasticsearch::Domain +AWS::EntityResolution::MatchingWorkflow +AWS::EntityResolution::SchemaMapping +AWS::EventSchemas::Discoverer +AWS::EventSchemas::Registry +AWS::EventSchemas::RegistryPolicy +AWS::EventSchemas::Schema +AWS::Events::ApiDestination +AWS::Events::Archive +AWS::Events::Connection +AWS::Events::Endpoint +AWS::Events::EventBus +AWS::Events::EventBusPolicy +AWS::Events::Rule +AWS::Evidently::Experiment +AWS::Evidently::Feature +AWS::Evidently::Launch +AWS::Evidently::Project +AWS::Evidently::Segment +AWS::FIS::ExperimentTemplate +AWS::FMS::NotificationChannel +AWS::FMS::Policy +AWS::FMS::ResourceSet +AWS::FSx::DataRepositoryAssociation +AWS::FSx::FileSystem +AWS::FSx::Snapshot +AWS::FSx::StorageVirtualMachine +AWS::FSx::Volume +AWS::FinSpace::Environment +AWS::Forecast::Dataset +AWS::Forecast::DatasetGroup +AWS::FraudDetector::Detector +AWS::FraudDetector::EntityType +AWS::FraudDetector::EventType +AWS::FraudDetector::Label +AWS::FraudDetector::List +AWS::FraudDetector::Outcome +AWS::FraudDetector::Variable +AWS::GameLift::Alias +AWS::GameLift::Build +AWS::GameLift::Fleet +AWS::GameLift::GameServerGroup +AWS::GameLift::GameSessionQueue +AWS::GameLift::Location +AWS::GameLift::MatchmakingConfiguration +AWS::GameLift::MatchmakingRuleSet +AWS::GameLift::Script +AWS::GlobalAccelerator::Accelerator +AWS::GlobalAccelerator::EndpointGroup +AWS::GlobalAccelerator::Listener +AWS::Glue::Classifier +AWS::Glue::Connection +AWS::Glue::Crawler +AWS::Glue::DataCatalogEncryptionSettings +AWS::Glue::DataQualityRuleset +AWS::Glue::Database +AWS::Glue::DevEndpoint +AWS::Glue::Job +AWS::Glue::MLTransform +AWS::Glue::Partition +AWS::Glue::Registry +AWS::Glue::Schema +AWS::Glue::SchemaVersion +AWS::Glue::SchemaVersionMetadata +AWS::Glue::SecurityConfiguration +AWS::Glue::Table +AWS::Glue::Trigger +AWS::Glue::Workflow +AWS::Grafana::Workspace +AWS::Greengrass::ConnectorDefinition +AWS::Greengrass::ConnectorDefinitionVersion +AWS::Greengrass::CoreDefinition +AWS::Greengrass::CoreDefinitionVersion +AWS::Greengrass::DeviceDefinition +AWS::Greengrass::DeviceDefinitionVersion +AWS::Greengrass::FunctionDefinition +AWS::Greengrass::FunctionDefinitionVersion +AWS::Greengrass::Group +AWS::Greengrass::GroupVersion +AWS::Greengrass::LoggerDefinition +AWS::Greengrass::LoggerDefinitionVersion +AWS::Greengrass::ResourceDefinition +AWS::Greengrass::ResourceDefinitionVersion +AWS::Greengrass::SubscriptionDefinition +AWS::Greengrass::SubscriptionDefinitionVersion +AWS::GreengrassV2::ComponentVersion +AWS::GreengrassV2::Deployment +AWS::GroundStation::Config +AWS::GroundStation::DataflowEndpointGroup +AWS::GroundStation::MissionProfile +AWS::GuardDuty::Detector +AWS::GuardDuty::Filter +AWS::GuardDuty::IPSet +AWS::GuardDuty::Master +AWS::GuardDuty::Member +AWS::GuardDuty::ThreatIntelSet +AWS::HealthLake::FHIRDatastore +AWS::IAM::AccessKey +AWS::IAM::Group +AWS::IAM::GroupPolicy +AWS::IAM::InstanceProfile +AWS::IAM::ManagedPolicy +AWS::IAM::OIDCProvider +AWS::IAM::Policy +AWS::IAM::Role +AWS::IAM::RolePolicy +AWS::IAM::SAMLProvider +AWS::IAM::ServerCertificate +AWS::IAM::ServiceLinkedRole +AWS::IAM::User +AWS::IAM::UserPolicy +AWS::IAM::UserToGroupAddition +AWS::IAM::VirtualMFADevice +AWS::IVS::Channel +AWS::IVS::PlaybackKeyPair +AWS::IVS::RecordingConfiguration +AWS::IVS::StreamKey +AWS::IVSChat::LoggingConfiguration +AWS::IVSChat::Room +AWS::IdentityStore::Group +AWS::IdentityStore::GroupMembership +AWS::ImageBuilder::Component +AWS::ImageBuilder::ContainerRecipe +AWS::ImageBuilder::DistributionConfiguration +AWS::ImageBuilder::Image +AWS::ImageBuilder::ImagePipeline +AWS::ImageBuilder::ImageRecipe +AWS::ImageBuilder::InfrastructureConfiguration +AWS::Inspector::AssessmentTarget +AWS::Inspector::AssessmentTemplate +AWS::Inspector::ResourceGroup +AWS::InspectorV2::Filter +AWS::InternetMonitor::Monitor +AWS::IoT1Click::Device +AWS::IoT1Click::Placement +AWS::IoT1Click::Project +AWS::IoT::AccountAuditConfiguration +AWS::IoT::Authorizer +AWS::IoT::BillingGroup +AWS::IoT::CACertificate +AWS::IoT::Certificate +AWS::IoT::CustomMetric +AWS::IoT::Dimension +AWS::IoT::DomainConfiguration +AWS::IoT::FleetMetric +AWS::IoT::JobTemplate +AWS::IoT::Logging +AWS::IoT::MitigationAction +AWS::IoT::Policy +AWS::IoT::PolicyPrincipalAttachment +AWS::IoT::ProvisioningTemplate +AWS::IoT::ResourceSpecificLogging +AWS::IoT::RoleAlias +AWS::IoT::ScheduledAudit +AWS::IoT::SecurityProfile +AWS::IoT::Thing +AWS::IoT::ThingGroup +AWS::IoT::ThingPrincipalAttachment +AWS::IoT::ThingType +AWS::IoT::TopicRule +AWS::IoT::TopicRuleDestination +AWS::IoTAnalytics::Channel +AWS::IoTAnalytics::Dataset +AWS::IoTAnalytics::Datastore +AWS::IoTAnalytics::Pipeline +AWS::IoTCoreDeviceAdvisor::SuiteDefinition +AWS::IoTEvents::AlarmModel +AWS::IoTEvents::DetectorModel +AWS::IoTEvents::Input +AWS::IoTFleetHub::Application +AWS::IoTFleetWise::Campaign +AWS::IoTFleetWise::DecoderManifest +AWS::IoTFleetWise::Fleet +AWS::IoTFleetWise::ModelManifest +AWS::IoTFleetWise::SignalCatalog +AWS::IoTFleetWise::Vehicle +AWS::IoTSiteWise::AccessPolicy +AWS::IoTSiteWise::Asset +AWS::IoTSiteWise::AssetModel +AWS::IoTSiteWise::Dashboard +AWS::IoTSiteWise::Gateway +AWS::IoTSiteWise::Portal +AWS::IoTSiteWise::Project +AWS::IoTThingsGraph::FlowTemplate +AWS::IoTTwinMaker::ComponentType +AWS::IoTTwinMaker::Entity +AWS::IoTTwinMaker::Scene +AWS::IoTTwinMaker::SyncJob +AWS::IoTTwinMaker::Workspace +AWS::IoTWireless::Destination +AWS::IoTWireless::DeviceProfile +AWS::IoTWireless::FuotaTask +AWS::IoTWireless::MulticastGroup +AWS::IoTWireless::NetworkAnalyzerConfiguration +AWS::IoTWireless::PartnerAccount +AWS::IoTWireless::ServiceProfile +AWS::IoTWireless::TaskDefinition +AWS::IoTWireless::WirelessDevice +AWS::IoTWireless::WirelessDeviceImportTask +AWS::IoTWireless::WirelessGateway +AWS::KMS::Alias +AWS::KMS::Key +AWS::KMS::ReplicaKey +AWS::KafkaConnect::Connector +AWS::Kendra::DataSource +AWS::Kendra::Faq +AWS::Kendra::Index +AWS::KendraRanking::ExecutionPlan +AWS::Kinesis::Stream +AWS::Kinesis::StreamConsumer +AWS::KinesisAnalytics::Application +AWS::KinesisAnalytics::ApplicationOutput +AWS::KinesisAnalytics::ApplicationReferenceDataSource +AWS::KinesisAnalyticsV2::Application +AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption +AWS::KinesisAnalyticsV2::ApplicationOutput +AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource +AWS::KinesisFirehose::DeliveryStream +AWS::KinesisVideo::SignalingChannel +AWS::KinesisVideo::Stream +AWS::LakeFormation::DataCellsFilter +AWS::LakeFormation::DataLakeSettings +AWS::LakeFormation::Permissions +AWS::LakeFormation::PrincipalPermissions +AWS::LakeFormation::Resource +AWS::LakeFormation::Tag +AWS::LakeFormation::TagAssociation +AWS::Lambda::Alias +AWS::Lambda::CodeSigningConfig +AWS::Lambda::EventInvokeConfig +AWS::Lambda::EventSourceMapping +AWS::Lambda::Function +AWS::Lambda::LayerVersion +AWS::Lambda::LayerVersionPermission +AWS::Lambda::Permission +AWS::Lambda::Url +AWS::Lambda::Version +AWS::Lex::Bot +AWS::Lex::BotAlias +AWS::Lex::BotVersion +AWS::Lex::ResourcePolicy +AWS::LicenseManager::Grant +AWS::LicenseManager::License +AWS::Lightsail::Alarm +AWS::Lightsail::Bucket +AWS::Lightsail::Certificate +AWS::Lightsail::Container +AWS::Lightsail::Database +AWS::Lightsail::Disk +AWS::Lightsail::Distribution +AWS::Lightsail::Instance +AWS::Lightsail::LoadBalancer +AWS::Lightsail::LoadBalancerTlsCertificate +AWS::Lightsail::StaticIp +AWS::Location::GeofenceCollection +AWS::Location::Map +AWS::Location::PlaceIndex +AWS::Location::RouteCalculator +AWS::Location::Tracker +AWS::Location::TrackerConsumer +AWS::Logs::AccountPolicy +AWS::Logs::Destination +AWS::Logs::LogGroup +AWS::Logs::LogStream +AWS::Logs::LogStream +AWS::Logs::MetricFilter +AWS::Logs::QueryDefinition +AWS::Logs::ResourcePolicy +AWS::Logs::SubscriptionFilter +AWS::LookoutEquipment::InferenceScheduler +AWS::LookoutMetrics::Alert +AWS::LookoutMetrics::AnomalyDetector +AWS::LookoutVision::Project +AWS::M2::Application +AWS::M2::Environment +AWS::MSK::BatchScramSecret +AWS::MSK::Cluster +AWS::MSK::ClusterPolicy +AWS::MSK::Configuration +AWS::MSK::ServerlessCluster +AWS::MSK::VpcConnection +AWS::MWAA::Environment +AWS::Macie::AllowList +AWS::Macie::CustomDataIdentifier +AWS::Macie::FindingsFilter +AWS::Macie::Session +AWS::ManagedBlockchain::Accessor +AWS::ManagedBlockchain::Member +AWS::ManagedBlockchain::Node +AWS::MediaConnect::Bridge +AWS::MediaConnect::BridgeOutput +AWS::MediaConnect::BridgeSource +AWS::MediaConnect::Flow +AWS::MediaConnect::FlowEntitlement +AWS::MediaConnect::FlowOutput +AWS::MediaConnect::FlowSource +AWS::MediaConnect::FlowVpcInterface +AWS::MediaConnect::Gateway +AWS::MediaConvert::JobTemplate +AWS::MediaConvert::Preset +AWS::MediaConvert::Queue +AWS::MediaLive::Channel +AWS::MediaLive::Input +AWS::MediaLive::InputSecurityGroup +AWS::MediaPackage::Asset +AWS::MediaPackage::Channel +AWS::MediaPackage::OriginEndpoint +AWS::MediaPackage::PackagingConfiguration +AWS::MediaPackage::PackagingGroup +AWS::MediaStore::Container +AWS::MediaTailor::Channel +AWS::MediaTailor::ChannelPolicy +AWS::MediaTailor::LiveSource +AWS::MediaTailor::PlaybackConfiguration +AWS::MediaTailor::SourceLocation +AWS::MediaTailor::VodSource +AWS::MemoryDB::ACL +AWS::MemoryDB::Cluster +AWS::MemoryDB::ParameterGroup +AWS::MemoryDB::SubnetGroup +AWS::MemoryDB::User +AWS::Neptune::DBCluster +AWS::Neptune::DBClusterParameterGroup +AWS::Neptune::DBInstance +AWS::Neptune::DBParameterGroup +AWS::Neptune::DBSubnetGroup +AWS::NetworkFirewall::Firewall +AWS::NetworkFirewall::FirewallPolicy +AWS::NetworkFirewall::LoggingConfiguration +AWS::NetworkFirewall::RuleGroup +AWS::NetworkManager::ConnectAttachment +AWS::NetworkManager::ConnectPeer +AWS::NetworkManager::CoreNetwork +AWS::NetworkManager::CustomerGatewayAssociation +AWS::NetworkManager::Device +AWS::NetworkManager::GlobalNetwork +AWS::NetworkManager::Link +AWS::NetworkManager::LinkAssociation +AWS::NetworkManager::Site +AWS::NetworkManager::SiteToSiteVpnAttachment +AWS::NetworkManager::TransitGatewayPeering +AWS::NetworkManager::TransitGatewayRegistration +AWS::NetworkManager::TransitGatewayRouteTableAttachment +AWS::NetworkManager::VpcAttachment +AWS::NimbleStudio::LaunchProfile +AWS::NimbleStudio::StreamingImage +AWS::NimbleStudio::Studio +AWS::NimbleStudio::StudioComponent +AWS::OSIS::Pipeline +AWS::Oam::Link +AWS::Oam::Sink +AWS::Omics::AnnotationStore +AWS::Omics::ReferenceStore +AWS::Omics::RunGroup +AWS::Omics::SequenceStore +AWS::Omics::VariantStore +AWS::Omics::Workflow +AWS::OpenSearchServerless::AccessPolicy +AWS::OpenSearchServerless::Collection +AWS::OpenSearchServerless::SecurityConfig +AWS::OpenSearchServerless::SecurityPolicy +AWS::OpenSearchServerless::VpcEndpoint +AWS::OpenSearchService::Domain +AWS::OpsWorks::App +AWS::OpsWorks::ElasticLoadBalancerAttachment +AWS::OpsWorks::Instance +AWS::OpsWorks::Layer +AWS::OpsWorks::Stack +AWS::OpsWorks::UserProfile +AWS::OpsWorks::Volume +AWS::OpsWorksCM::Server +AWS::Organizations::Account +AWS::Organizations::Organization +AWS::Organizations::OrganizationalUnit +AWS::Organizations::Policy +AWS::Organizations::ResourcePolicy +AWS::PCAConnectorAD::Connector +AWS::PCAConnectorAD::DirectoryRegistration +AWS::PCAConnectorAD::ServicePrincipalName +AWS::PCAConnectorAD::Template +AWS::PCAConnectorAD::TemplateGroupAccessControlEntry +AWS::Panorama::ApplicationInstance +AWS::Panorama::Package +AWS::Panorama::PackageVersion +AWS::Personalize::Dataset +AWS::Personalize::DatasetGroup +AWS::Personalize::Schema +AWS::Personalize::Solution +AWS::Pinpoint::ADMChannel +AWS::Pinpoint::APNSChannel +AWS::Pinpoint::APNSSandboxChannel +AWS::Pinpoint::APNSVoipChannel +AWS::Pinpoint::APNSVoipSandboxChannel +AWS::Pinpoint::App +AWS::Pinpoint::ApplicationSettings +AWS::Pinpoint::BaiduChannel +AWS::Pinpoint::Campaign +AWS::Pinpoint::EmailChannel +AWS::Pinpoint::EmailTemplate +AWS::Pinpoint::EventStream +AWS::Pinpoint::GCMChannel +AWS::Pinpoint::InAppTemplate +AWS::Pinpoint::PushTemplate +AWS::Pinpoint::SMSChannel +AWS::Pinpoint::Segment +AWS::Pinpoint::SmsTemplate +AWS::Pinpoint::VoiceChannel +AWS::PinpointEmail::ConfigurationSet +AWS::PinpointEmail::ConfigurationSetEventDestination +AWS::PinpointEmail::DedicatedIpPool +AWS::PinpointEmail::Identity +AWS::Pipes::Pipe +AWS::Proton::EnvironmentAccountConnection +AWS::Proton::EnvironmentTemplate +AWS::Proton::ServiceTemplate +AWS::QLDB::Ledger +AWS::QLDB::Stream +AWS::QuickSight::Analysis +AWS::QuickSight::Dashboard +AWS::QuickSight::DataSet +AWS::QuickSight::DataSource +AWS::QuickSight::RefreshSchedule +AWS::QuickSight::Template +AWS::QuickSight::Theme +AWS::QuickSight::Topic +AWS::QuickSight::VPCConnection +AWS::RAM::Permission +AWS::RAM::ResourceShare +AWS::RDS::CustomDBEngineVersion +AWS::RDS::DBCluster +AWS::RDS::DBClusterParameterGroup +AWS::RDS::DBInstance +AWS::RDS::DBParameterGroup +AWS::RDS::DBProxy +AWS::RDS::DBProxyEndpoint +AWS::RDS::DBProxyTargetGroup +AWS::RDS::DBSecurityGroup +AWS::RDS::DBSecurityGroupIngress +AWS::RDS::DBSubnetGroup +AWS::RDS::EventSubscription +AWS::RDS::GlobalCluster +AWS::RDS::OptionGroup +AWS::RUM::AppMonitor +AWS::Redshift::Cluster +AWS::Redshift::ClusterParameterGroup +AWS::Redshift::ClusterSecurityGroup +AWS::Redshift::ClusterSecurityGroupIngress +AWS::Redshift::ClusterSubnetGroup +AWS::Redshift::EndpointAccess +AWS::Redshift::EndpointAuthorization +AWS::Redshift::EventSubscription +AWS::Redshift::ScheduledAction +AWS::RedshiftServerless::Namespace +AWS::RedshiftServerless::Workgroup +AWS::RefactorSpaces::Application +AWS::RefactorSpaces::Environment +AWS::RefactorSpaces::Route +AWS::RefactorSpaces::Service +AWS::Rekognition::Collection +AWS::Rekognition::Project +AWS::Rekognition::StreamProcessor +AWS::ResilienceHub::App +AWS::ResilienceHub::ResiliencyPolicy +AWS::ResourceExplorer2::DefaultViewAssociation +AWS::ResourceExplorer2::Index +AWS::ResourceExplorer2::View +AWS::ResourceGroups::Group +AWS::RoboMaker::Fleet +AWS::RoboMaker::Robot +AWS::RoboMaker::RobotApplication +AWS::RoboMaker::RobotApplicationVersion +AWS::RoboMaker::SimulationApplication +AWS::RoboMaker::SimulationApplicationVersion +AWS::RolesAnywhere::CRL +AWS::RolesAnywhere::Profile +AWS::RolesAnywhere::TrustAnchor +AWS::Route53::CidrCollection +AWS::Route53::DNSSEC +AWS::Route53::HealthCheck +AWS::Route53::HostedZone +AWS::Route53::KeySigningKey +AWS::Route53::RecordSet +AWS::Route53::RecordSetGroup +AWS::Route53RecoveryControl::Cluster +AWS::Route53RecoveryControl::ControlPanel +AWS::Route53RecoveryControl::RoutingControl +AWS::Route53RecoveryControl::SafetyRule +AWS::Route53RecoveryReadiness::Cell +AWS::Route53RecoveryReadiness::ReadinessCheck +AWS::Route53RecoveryReadiness::RecoveryGroup +AWS::Route53RecoveryReadiness::ResourceSet +AWS::Route53Resolver::FirewallDomainList +AWS::Route53Resolver::FirewallRuleGroup +AWS::Route53Resolver::FirewallRuleGroupAssociation +AWS::Route53Resolver::OutpostResolver +AWS::Route53Resolver::ResolverConfig +AWS::Route53Resolver::ResolverDNSSECConfig +AWS::Route53Resolver::ResolverEndpoint +AWS::Route53Resolver::ResolverQueryLoggingConfig +AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation +AWS::Route53Resolver::ResolverRule +AWS::Route53Resolver::ResolverRuleAssociation +AWS::S3::AccessPoint +AWS::S3::Bucket +AWS::S3::BucketPolicy +AWS::S3::MultiRegionAccessPoint +AWS::S3::MultiRegionAccessPointPolicy +AWS::S3::StorageLens +AWS::S3ObjectLambda::AccessPoint +AWS::S3ObjectLambda::AccessPointPolicy +AWS::S3Outposts::AccessPoint +AWS::S3Outposts::Bucket +AWS::S3Outposts::BucketPolicy +AWS::S3Outposts::Endpoint +AWS::SDB::Domain +AWS::SES::ConfigurationSet +AWS::SES::ConfigurationSetEventDestination +AWS::SES::ContactList +AWS::SES::DedicatedIpPool +AWS::SES::EmailIdentity +AWS::SES::ReceiptFilter +AWS::SES::ReceiptRule +AWS::SES::ReceiptRuleSet +AWS::SES::Template +AWS::SES::VdmAttributes +AWS::SNS::Subscription +AWS::SNS::Topic +AWS::SNS::TopicInlinePolicy +AWS::SNS::TopicPolicy +AWS::SQS::Queue +AWS::SQS::QueueInlinePolicy +AWS::SQS::QueuePolicy +AWS::SSM::Association +AWS::SSM::Document +AWS::SSM::MaintenanceWindow +AWS::SSM::MaintenanceWindowTarget +AWS::SSM::MaintenanceWindowTask +AWS::SSM::Parameter +AWS::SSM::PatchBaseline +AWS::SSM::ResourceDataSync +AWS::SSM::ResourcePolicy +AWS::SSMContacts::Contact +AWS::SSMContacts::ContactChannel +AWS::SSMContacts::Plan +AWS::SSMContacts::Rotation +AWS::SSMIncidents::ReplicationSet +AWS::SSMIncidents::ResponsePlan +AWS::SSO::Assignment +AWS::SSO::InstanceAccessControlAttributeConfiguration +AWS::SSO::PermissionSet +AWS::SageMaker::App +AWS::SageMaker::AppImageConfig +AWS::SageMaker::CodeRepository +AWS::SageMaker::DataQualityJobDefinition +AWS::SageMaker::Device +AWS::SageMaker::DeviceFleet +AWS::SageMaker::Domain +AWS::SageMaker::Endpoint +AWS::SageMaker::EndpointConfig +AWS::SageMaker::FeatureGroup +AWS::SageMaker::Image +AWS::SageMaker::ImageVersion +AWS::SageMaker::InferenceExperiment +AWS::SageMaker::Model +AWS::SageMaker::ModelBiasJobDefinition +AWS::SageMaker::ModelCard +AWS::SageMaker::ModelExplainabilityJobDefinition +AWS::SageMaker::ModelPackage +AWS::SageMaker::ModelPackageGroup +AWS::SageMaker::ModelQualityJobDefinition +AWS::SageMaker::MonitoringSchedule +AWS::SageMaker::NotebookInstance +AWS::SageMaker::NotebookInstanceLifecycleConfig +AWS::SageMaker::Pipeline +AWS::SageMaker::Project +AWS::SageMaker::Space +AWS::SageMaker::UserProfile +AWS::SageMaker::Workteam +AWS::Scheduler::Schedule +AWS::Scheduler::ScheduleGroup +AWS::SecretsManager::ResourcePolicy +AWS::SecretsManager::RotationSchedule +AWS::SecretsManager::Secret +AWS::SecretsManager::SecretTargetAttachment +AWS::SecurityHub::AutomationRule +AWS::SecurityHub::Hub +AWS::SecurityHub::Standard +AWS::ServiceCatalog::AcceptedPortfolioShare +AWS::ServiceCatalog::CloudFormationProduct +AWS::ServiceCatalog::CloudFormationProvisionedProduct +AWS::ServiceCatalog::LaunchNotificationConstraint +AWS::ServiceCatalog::LaunchRoleConstraint +AWS::ServiceCatalog::LaunchTemplateConstraint +AWS::ServiceCatalog::Portfolio +AWS::ServiceCatalog::PortfolioPrincipalAssociation +AWS::ServiceCatalog::PortfolioProductAssociation +AWS::ServiceCatalog::PortfolioShare +AWS::ServiceCatalog::ResourceUpdateConstraint +AWS::ServiceCatalog::ServiceAction +AWS::ServiceCatalog::ServiceActionAssociation +AWS::ServiceCatalog::StackSetConstraint +AWS::ServiceCatalog::TagOption +AWS::ServiceCatalog::TagOptionAssociation +AWS::ServiceCatalogAppRegistry::Application +AWS::ServiceCatalogAppRegistry::AttributeGroup +AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation +AWS::ServiceCatalogAppRegistry::ResourceAssociation +AWS::ServiceDiscovery::HttpNamespace +AWS::ServiceDiscovery::Instance +AWS::ServiceDiscovery::PrivateDnsNamespace +AWS::ServiceDiscovery::PublicDnsNamespace +AWS::ServiceDiscovery::Service +AWS::Shield::DRTAccess +AWS::Shield::ProactiveEngagement +AWS::Shield::Protection +AWS::Shield::ProtectionGroup +AWS::Signer::ProfilePermission +AWS::Signer::SigningProfile +AWS::SimSpaceWeaver::Simulation +AWS::StepFunctions::Activity +AWS::StepFunctions::StateMachine +AWS::StepFunctions::StateMachineAlias +AWS::StepFunctions::StateMachineVersion +AWS::SupportApp::AccountAlias +AWS::SupportApp::SlackChannelConfiguration +AWS::SupportApp::SlackWorkspaceConfiguration +AWS::Synthetics::Canary +AWS::Synthetics::Group +AWS::SystemsManagerSAP::Application +AWS::Timestream::Database +AWS::Timestream::ScheduledQuery +AWS::Timestream::Table +AWS::Transfer::Agreement +AWS::Transfer::Certificate +AWS::Transfer::Connector +AWS::Transfer::Profile +AWS::Transfer::Server +AWS::Transfer::User +AWS::Transfer::Workflow +AWS::VerifiedPermissions::IdentitySource +AWS::VerifiedPermissions::Policy +AWS::VerifiedPermissions::PolicyStore +AWS::VerifiedPermissions::PolicyTemplate +AWS::VoiceID::Domain +AWS::VpcLattice::AccessLogSubscription +AWS::VpcLattice::AuthPolicy +AWS::VpcLattice::Listener +AWS::VpcLattice::ResourcePolicy +AWS::VpcLattice::Rule +AWS::VpcLattice::Service +AWS::VpcLattice::ServiceNetwork +AWS::VpcLattice::ServiceNetworkServiceAssociation +AWS::VpcLattice::ServiceNetworkVpcAssociation +AWS::VpcLattice::TargetGroup +AWS::WAF::ByteMatchSet +AWS::WAF::IPSet +AWS::WAF::Rule +AWS::WAF::SizeConstraintSet +AWS::WAF::SqlInjectionMatchSet +AWS::WAF::WebACL +AWS::WAF::XssMatchSet +AWS::WAFRegional::ByteMatchSet +AWS::WAFRegional::GeoMatchSet +AWS::WAFRegional::IPSet +AWS::WAFRegional::RateBasedRule +AWS::WAFRegional::RegexPatternSet +AWS::WAFRegional::Rule +AWS::WAFRegional::SizeConstraintSet +AWS::WAFRegional::SqlInjectionMatchSet +AWS::WAFRegional::WebACL +AWS::WAFRegional::WebACLAssociation +AWS::WAFRegional::XssMatchSet +AWS::WAFv2::IPSet +AWS::WAFv2::LoggingConfiguration +AWS::WAFv2::RegexPatternSet +AWS::WAFv2::RuleGroup +AWS::WAFv2::WebACL +AWS::WAFv2::WebACLAssociation +AWS::Wisdom::Assistant +AWS::Wisdom::AssistantAssociation +AWS::Wisdom::KnowledgeBase +AWS::WorkSpaces::ConnectionAlias +AWS::WorkSpaces::Workspace +AWS::WorkSpacesWeb::BrowserSettings +AWS::WorkSpacesWeb::IdentityProvider +AWS::WorkSpacesWeb::IpAccessSettings +AWS::WorkSpacesWeb::NetworkSettings +AWS::WorkSpacesWeb::Portal +AWS::WorkSpacesWeb::TrustStore +AWS::WorkSpacesWeb::UserAccessLoggingSettings +AWS::WorkSpacesWeb::UserSettings +AWS::XRay::Group +AWS::XRay::ResourcePolicy +AWS::XRay::SamplingRule diff --git a/internal/cmd/forecast/estimate.go b/internal/cmd/forecast/estimate.go new file mode 100644 index 00000000..88e01b3d --- /dev/null +++ b/internal/cmd/forecast/estimate.go @@ -0,0 +1,1200 @@ +package forecast + +import ( + "errors" + "fmt" +) + +var Estimates map[string]ResourceEstimate + +// ResourceEstimate stores the estimated time, in seconds, to create, +// update, or delete a specific resource type. +// The Name is something like "AWS::S3::Bucket" +type ResourceEstimate struct { + Name string + Create int + Update int + Delete int +} + +// NewResourceEstimate creates a new instance of ResourceEstimate +func NewResourceEstimate(name string, create int, update int, del int) ResourceEstimate { + est := ResourceEstimate{} + est.Name = name + est.Create = create + est.Update = update + est.Delete = del + return est +} + +type StackAction string + +const ( + Create StackAction = "create" + Update = "update" + Delete = "delete" +) + +// GetResourceEstimate returns the estimated time an action will take for the given resource type +func GetResourceEstimate(resourceType string, action StackAction) (int, error) { + + est, exists := Estimates[resourceType] + if exists { + switch action { + case Create: + return est.Create, nil + case Update: + return est.Update, nil + case Delete: + return est.Delete, nil + } + return 0, nil + } else { + return 0, errors.New(fmt.Sprintf("no estimate available for %v", resourceType)) + } +} + +// init initializes the Estimates map for all AWS resource types +func InitEstimates() { + + Estimates = make(map[string]ResourceEstimate, 0) + + // TODO - Fill in the values with historically average create, update, delete times + + Estimates["AWS::ACMPCA::Certificate"] = NewResourceEstimate("AWS::ACMPCA::Certificate", 1, 1, 1) + Estimates["AWS::ACMPCA::CertificateAuthority"] = NewResourceEstimate("AWS::ACMPCA::CertificateAuthority", 1, 1, 1) + Estimates["AWS::ACMPCA::CertificateAuthorityActivation"] = NewResourceEstimate("AWS::ACMPCA::CertificateAuthorityActivation", 1, 1, 1) + Estimates["AWS::ACMPCA::Permission"] = NewResourceEstimate("AWS::ACMPCA::Permission", 1, 1, 1) + Estimates["AWS::APS::RuleGroupsNamespace"] = NewResourceEstimate("AWS::APS::RuleGroupsNamespace", 1, 1, 1) + Estimates["AWS::APS::Workspace"] = NewResourceEstimate("AWS::APS::Workspace", 1, 1, 1) + Estimates["AWS::AccessAnalyzer::Analyzer"] = NewResourceEstimate("AWS::AccessAnalyzer::Analyzer", 1, 1, 1) + Estimates["AWS::AmazonMQ::Broker"] = NewResourceEstimate("AWS::AmazonMQ::Broker", 1, 1, 1) + Estimates["AWS::AmazonMQ::Configuration"] = NewResourceEstimate("AWS::AmazonMQ::Configuration", 1, 1, 1) + Estimates["AWS::AmazonMQ::ConfigurationAssociation"] = NewResourceEstimate("AWS::AmazonMQ::ConfigurationAssociation", 1, 1, 1) + Estimates["AWS::Amplify::App"] = NewResourceEstimate("AWS::Amplify::App", 1, 1, 1) + Estimates["AWS::Amplify::Branch"] = NewResourceEstimate("AWS::Amplify::Branch", 1, 1, 1) + Estimates["AWS::Amplify::Domain"] = NewResourceEstimate("AWS::Amplify::Domain", 1, 1, 1) + Estimates["AWS::AmplifyUIBuilder::Component"] = NewResourceEstimate("AWS::AmplifyUIBuilder::Component", 1, 1, 1) + Estimates["AWS::AmplifyUIBuilder::Form"] = NewResourceEstimate("AWS::AmplifyUIBuilder::Form", 1, 1, 1) + Estimates["AWS::AmplifyUIBuilder::Theme"] = NewResourceEstimate("AWS::AmplifyUIBuilder::Theme", 1, 1, 1) + Estimates["AWS::ApiGateway::Account"] = NewResourceEstimate("AWS::ApiGateway::Account", 1, 1, 1) + Estimates["AWS::ApiGateway::ApiKey"] = NewResourceEstimate("AWS::ApiGateway::ApiKey", 1, 1, 1) + Estimates["AWS::ApiGateway::Authorizer"] = NewResourceEstimate("AWS::ApiGateway::Authorizer", 1, 1, 1) + Estimates["AWS::ApiGateway::BasePathMapping"] = NewResourceEstimate("AWS::ApiGateway::BasePathMapping", 1, 1, 1) + Estimates["AWS::ApiGateway::ClientCertificate"] = NewResourceEstimate("AWS::ApiGateway::ClientCertificate", 1, 1, 1) + Estimates["AWS::ApiGateway::Deployment"] = NewResourceEstimate("AWS::ApiGateway::Deployment", 1, 1, 1) + Estimates["AWS::ApiGateway::DocumentationPart"] = NewResourceEstimate("AWS::ApiGateway::DocumentationPart", 1, 1, 1) + Estimates["AWS::ApiGateway::DocumentationVersion"] = NewResourceEstimate("AWS::ApiGateway::DocumentationVersion", 1, 1, 1) + Estimates["AWS::ApiGateway::DomainName"] = NewResourceEstimate("AWS::ApiGateway::DomainName", 1, 1, 1) + Estimates["AWS::ApiGateway::GatewayResponse"] = NewResourceEstimate("AWS::ApiGateway::GatewayResponse", 1, 1, 1) + Estimates["AWS::ApiGateway::Method"] = NewResourceEstimate("AWS::ApiGateway::Method", 1, 1, 1) + Estimates["AWS::ApiGateway::Model"] = NewResourceEstimate("AWS::ApiGateway::Model", 1, 1, 1) + Estimates["AWS::ApiGateway::RequestValidator"] = NewResourceEstimate("AWS::ApiGateway::RequestValidator", 1, 1, 1) + Estimates["AWS::ApiGateway::Resource"] = NewResourceEstimate("AWS::ApiGateway::Resource", 1, 1, 1) + Estimates["AWS::ApiGateway::RestApi"] = NewResourceEstimate("AWS::ApiGateway::RestApi", 1, 1, 1) + Estimates["AWS::ApiGateway::Stage"] = NewResourceEstimate("AWS::ApiGateway::Stage", 1, 1, 1) + Estimates["AWS::ApiGateway::UsagePlan"] = NewResourceEstimate("AWS::ApiGateway::UsagePlan", 1, 1, 1) + Estimates["AWS::ApiGateway::UsagePlanKey"] = NewResourceEstimate("AWS::ApiGateway::UsagePlanKey", 1, 1, 1) + Estimates["AWS::ApiGateway::VpcLink"] = NewResourceEstimate("AWS::ApiGateway::VpcLink", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::Api"] = NewResourceEstimate("AWS::ApiGatewayV2::Api", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::ApiGatewayManagedOverrides"] = NewResourceEstimate("AWS::ApiGatewayV2::ApiGatewayManagedOverrides", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::ApiMapping"] = NewResourceEstimate("AWS::ApiGatewayV2::ApiMapping", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::Authorizer"] = NewResourceEstimate("AWS::ApiGatewayV2::Authorizer", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::Deployment"] = NewResourceEstimate("AWS::ApiGatewayV2::Deployment", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::DomainName"] = NewResourceEstimate("AWS::ApiGatewayV2::DomainName", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::Integration"] = NewResourceEstimate("AWS::ApiGatewayV2::Integration", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::IntegrationResponse"] = NewResourceEstimate("AWS::ApiGatewayV2::IntegrationResponse", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::Model"] = NewResourceEstimate("AWS::ApiGatewayV2::Model", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::Route"] = NewResourceEstimate("AWS::ApiGatewayV2::Route", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::RouteResponse"] = NewResourceEstimate("AWS::ApiGatewayV2::RouteResponse", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::Stage"] = NewResourceEstimate("AWS::ApiGatewayV2::Stage", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::VpcLink"] = NewResourceEstimate("AWS::ApiGatewayV2::VpcLink", 1, 1, 1) + Estimates["AWS::AppConfig::Application"] = NewResourceEstimate("AWS::AppConfig::Application", 1, 1, 1) + Estimates["AWS::AppConfig::ConfigurationProfile"] = NewResourceEstimate("AWS::AppConfig::ConfigurationProfile", 1, 1, 1) + Estimates["AWS::AppConfig::Deployment"] = NewResourceEstimate("AWS::AppConfig::Deployment", 1, 1, 1) + Estimates["AWS::AppConfig::DeploymentStrategy"] = NewResourceEstimate("AWS::AppConfig::DeploymentStrategy", 1, 1, 1) + Estimates["AWS::AppConfig::Environment"] = NewResourceEstimate("AWS::AppConfig::Environment", 1, 1, 1) + Estimates["AWS::AppConfig::Extension"] = NewResourceEstimate("AWS::AppConfig::Extension", 1, 1, 1) + Estimates["AWS::AppConfig::ExtensionAssociation"] = NewResourceEstimate("AWS::AppConfig::ExtensionAssociation", 1, 1, 1) + Estimates["AWS::AppConfig::HostedConfigurationVersion"] = NewResourceEstimate("AWS::AppConfig::HostedConfigurationVersion", 1, 1, 1) + Estimates["AWS::AppFlow::Connector"] = NewResourceEstimate("AWS::AppFlow::Connector", 1, 1, 1) + Estimates["AWS::AppFlow::ConnectorProfile"] = NewResourceEstimate("AWS::AppFlow::ConnectorProfile", 1, 1, 1) + Estimates["AWS::AppFlow::Flow"] = NewResourceEstimate("AWS::AppFlow::Flow", 1, 1, 1) + Estimates["AWS::AppIntegrations::DataIntegration"] = NewResourceEstimate("AWS::AppIntegrations::DataIntegration", 1, 1, 1) + Estimates["AWS::AppIntegrations::EventIntegration"] = NewResourceEstimate("AWS::AppIntegrations::EventIntegration", 1, 1, 1) + Estimates["AWS::AppMesh::GatewayRoute"] = NewResourceEstimate("AWS::AppMesh::GatewayRoute", 1, 1, 1) + Estimates["AWS::AppMesh::Mesh"] = NewResourceEstimate("AWS::AppMesh::Mesh", 1, 1, 1) + Estimates["AWS::AppMesh::Route"] = NewResourceEstimate("AWS::AppMesh::Route", 1, 1, 1) + Estimates["AWS::AppMesh::VirtualGateway"] = NewResourceEstimate("AWS::AppMesh::VirtualGateway", 1, 1, 1) + Estimates["AWS::AppMesh::VirtualNode"] = NewResourceEstimate("AWS::AppMesh::VirtualNode", 1, 1, 1) + Estimates["AWS::AppMesh::VirtualRouter"] = NewResourceEstimate("AWS::AppMesh::VirtualRouter", 1, 1, 1) + Estimates["AWS::AppMesh::VirtualService"] = NewResourceEstimate("AWS::AppMesh::VirtualService", 1, 1, 1) + Estimates["AWS::AppRunner::AutoScalingConfiguration"] = NewResourceEstimate("AWS::AppRunner::AutoScalingConfiguration", 1, 1, 1) + Estimates["AWS::AppRunner::ObservabilityConfiguration"] = NewResourceEstimate("AWS::AppRunner::ObservabilityConfiguration", 1, 1, 1) + Estimates["AWS::AppRunner::Service"] = NewResourceEstimate("AWS::AppRunner::Service", 1, 1, 1) + Estimates["AWS::AppRunner::VpcConnector"] = NewResourceEstimate("AWS::AppRunner::VpcConnector", 1, 1, 1) + Estimates["AWS::AppRunner::VpcIngressConnection"] = NewResourceEstimate("AWS::AppRunner::VpcIngressConnection", 1, 1, 1) + Estimates["AWS::AppStream::AppBlock"] = NewResourceEstimate("AWS::AppStream::AppBlock", 1, 1, 1) + Estimates["AWS::AppStream::AppBlockBuilder"] = NewResourceEstimate("AWS::AppStream::AppBlockBuilder", 1, 1, 1) + Estimates["AWS::AppStream::Application"] = NewResourceEstimate("AWS::AppStream::Application", 1, 1, 1) + Estimates["AWS::AppStream::ApplicationEntitlementAssociation"] = NewResourceEstimate("AWS::AppStream::ApplicationEntitlementAssociation", 1, 1, 1) + Estimates["AWS::AppStream::ApplicationFleetAssociation"] = NewResourceEstimate("AWS::AppStream::ApplicationFleetAssociation", 1, 1, 1) + Estimates["AWS::AppStream::DirectoryConfig"] = NewResourceEstimate("AWS::AppStream::DirectoryConfig", 1, 1, 1) + Estimates["AWS::AppStream::Entitlement"] = NewResourceEstimate("AWS::AppStream::Entitlement", 1, 1, 1) + Estimates["AWS::AppStream::Fleet"] = NewResourceEstimate("AWS::AppStream::Fleet", 1, 1, 1) + Estimates["AWS::AppStream::ImageBuilder"] = NewResourceEstimate("AWS::AppStream::ImageBuilder", 1, 1, 1) + Estimates["AWS::AppStream::Stack"] = NewResourceEstimate("AWS::AppStream::Stack", 1, 1, 1) + Estimates["AWS::AppStream::StackFleetAssociation"] = NewResourceEstimate("AWS::AppStream::StackFleetAssociation", 1, 1, 1) + Estimates["AWS::AppStream::StackUserAssociation"] = NewResourceEstimate("AWS::AppStream::StackUserAssociation", 1, 1, 1) + Estimates["AWS::AppStream::User"] = NewResourceEstimate("AWS::AppStream::User", 1, 1, 1) + Estimates["AWS::AppSync::ApiCache"] = NewResourceEstimate("AWS::AppSync::ApiCache", 1, 1, 1) + Estimates["AWS::AppSync::ApiKey"] = NewResourceEstimate("AWS::AppSync::ApiKey", 1, 1, 1) + Estimates["AWS::AppSync::DataSource"] = NewResourceEstimate("AWS::AppSync::DataSource", 1, 1, 1) + Estimates["AWS::AppSync::DomainName"] = NewResourceEstimate("AWS::AppSync::DomainName", 1, 1, 1) + Estimates["AWS::AppSync::DomainNameApiAssociation"] = NewResourceEstimate("AWS::AppSync::DomainNameApiAssociation", 1, 1, 1) + Estimates["AWS::AppSync::FunctionConfiguration"] = NewResourceEstimate("AWS::AppSync::FunctionConfiguration", 1, 1, 1) + Estimates["AWS::AppSync::GraphQLApi"] = NewResourceEstimate("AWS::AppSync::GraphQLApi", 1, 1, 1) + Estimates["AWS::AppSync::GraphQLSchema"] = NewResourceEstimate("AWS::AppSync::GraphQLSchema", 1, 1, 1) + Estimates["AWS::AppSync::Resolver"] = NewResourceEstimate("AWS::AppSync::Resolver", 1, 1, 1) + Estimates["AWS::AppSync::SourceApiAssociation"] = NewResourceEstimate("AWS::AppSync::SourceApiAssociation", 1, 1, 1) + Estimates["AWS::ApplicationAutoScaling::ScalableTarget"] = NewResourceEstimate("AWS::ApplicationAutoScaling::ScalableTarget", 1, 1, 1) + Estimates["AWS::ApplicationAutoScaling::ScalingPolicy"] = NewResourceEstimate("AWS::ApplicationAutoScaling::ScalingPolicy", 1, 1, 1) + Estimates["AWS::ApplicationInsights::Application"] = NewResourceEstimate("AWS::ApplicationInsights::Application", 1, 1, 1) + Estimates["AWS::Athena::CapacityReservation"] = NewResourceEstimate("AWS::Athena::CapacityReservation", 1, 1, 1) + Estimates["AWS::Athena::DataCatalog"] = NewResourceEstimate("AWS::Athena::DataCatalog", 1, 1, 1) + Estimates["AWS::Athena::NamedQuery"] = NewResourceEstimate("AWS::Athena::NamedQuery", 1, 1, 1) + Estimates["AWS::Athena::PreparedStatement"] = NewResourceEstimate("AWS::Athena::PreparedStatement", 1, 1, 1) + Estimates["AWS::Athena::WorkGroup"] = NewResourceEstimate("AWS::Athena::WorkGroup", 1, 1, 1) + Estimates["AWS::AuditManager::Assessment"] = NewResourceEstimate("AWS::AuditManager::Assessment", 1, 1, 1) + Estimates["AWS::AutoScaling::AutoScalingGroup"] = NewResourceEstimate("AWS::AutoScaling::AutoScalingGroup", 1, 1, 1) + Estimates["AWS::AutoScaling::LaunchConfiguration"] = NewResourceEstimate("AWS::AutoScaling::LaunchConfiguration", 1, 1, 1) + Estimates["AWS::AutoScaling::LifecycleHook"] = NewResourceEstimate("AWS::AutoScaling::LifecycleHook", 1, 1, 1) + Estimates["AWS::AutoScaling::ScalingPolicy"] = NewResourceEstimate("AWS::AutoScaling::ScalingPolicy", 1, 1, 1) + Estimates["AWS::AutoScaling::ScheduledAction"] = NewResourceEstimate("AWS::AutoScaling::ScheduledAction", 1, 1, 1) + Estimates["AWS::AutoScaling::WarmPool"] = NewResourceEstimate("AWS::AutoScaling::WarmPool", 1, 1, 1) + Estimates["AWS::AutoScalingPlans::ScalingPlan"] = NewResourceEstimate("AWS::AutoScalingPlans::ScalingPlan", 1, 1, 1) + Estimates["AWS::Backup::BackupPlan"] = NewResourceEstimate("AWS::Backup::BackupPlan", 1, 1, 1) + Estimates["AWS::Backup::BackupSelection"] = NewResourceEstimate("AWS::Backup::BackupSelection", 1, 1, 1) + Estimates["AWS::Backup::BackupVault"] = NewResourceEstimate("AWS::Backup::BackupVault", 1, 1, 1) + Estimates["AWS::Backup::Framework"] = NewResourceEstimate("AWS::Backup::Framework", 1, 1, 1) + Estimates["AWS::Backup::ReportPlan"] = NewResourceEstimate("AWS::Backup::ReportPlan", 1, 1, 1) + Estimates["AWS::BackupGateway::Hypervisor"] = NewResourceEstimate("AWS::BackupGateway::Hypervisor", 1, 1, 1) + Estimates["AWS::Batch::ComputeEnvironment"] = NewResourceEstimate("AWS::Batch::ComputeEnvironment", 1, 1, 1) + Estimates["AWS::Batch::JobDefinition"] = NewResourceEstimate("AWS::Batch::JobDefinition", 1, 1, 1) + Estimates["AWS::Batch::JobQueue"] = NewResourceEstimate("AWS::Batch::JobQueue", 1, 1, 1) + Estimates["AWS::Batch::SchedulingPolicy"] = NewResourceEstimate("AWS::Batch::SchedulingPolicy", 1, 1, 1) + Estimates["AWS::BillingConductor::BillingGroup"] = NewResourceEstimate("AWS::BillingConductor::BillingGroup", 1, 1, 1) + Estimates["AWS::BillingConductor::CustomLineItem"] = NewResourceEstimate("AWS::BillingConductor::CustomLineItem", 1, 1, 1) + Estimates["AWS::BillingConductor::PricingPlan"] = NewResourceEstimate("AWS::BillingConductor::PricingPlan", 1, 1, 1) + Estimates["AWS::BillingConductor::PricingRule"] = NewResourceEstimate("AWS::BillingConductor::PricingRule", 1, 1, 1) + Estimates["AWS::Budgets::Budget"] = NewResourceEstimate("AWS::Budgets::Budget", 1, 1, 1) + Estimates["AWS::Budgets::BudgetsAction"] = NewResourceEstimate("AWS::Budgets::BudgetsAction", 1, 1, 1) + Estimates["AWS::CE::AnomalyMonitor"] = NewResourceEstimate("AWS::CE::AnomalyMonitor", 1, 1, 1) + Estimates["AWS::CE::AnomalySubscription"] = NewResourceEstimate("AWS::CE::AnomalySubscription", 1, 1, 1) + Estimates["AWS::CE::CostCategory"] = NewResourceEstimate("AWS::CE::CostCategory", 1, 1, 1) + Estimates["AWS::CUR::ReportDefinition"] = NewResourceEstimate("AWS::CUR::ReportDefinition", 1, 1, 1) + Estimates["AWS::Cassandra::Keyspace"] = NewResourceEstimate("AWS::Cassandra::Keyspace", 1, 1, 1) + Estimates["AWS::Cassandra::Table"] = NewResourceEstimate("AWS::Cassandra::Table", 1, 1, 1) + Estimates["AWS::CertificateManager::Account"] = NewResourceEstimate("AWS::CertificateManager::Account", 1, 1, 1) + Estimates["AWS::CertificateManager::Certificate"] = NewResourceEstimate("AWS::CertificateManager::Certificate", 1, 1, 1) + Estimates["AWS::Chatbot::MicrosoftTeamsChannelConfiguration"] = NewResourceEstimate("AWS::Chatbot::MicrosoftTeamsChannelConfiguration", 1, 1, 1) + Estimates["AWS::Chatbot::SlackChannelConfiguration"] = NewResourceEstimate("AWS::Chatbot::SlackChannelConfiguration", 1, 1, 1) + Estimates["AWS::CleanRooms::AnalysisTemplate"] = NewResourceEstimate("AWS::CleanRooms::AnalysisTemplate", 1, 1, 1) + Estimates["AWS::CleanRooms::Collaboration"] = NewResourceEstimate("AWS::CleanRooms::Collaboration", 1, 1, 1) + Estimates["AWS::CleanRooms::ConfiguredTable"] = NewResourceEstimate("AWS::CleanRooms::ConfiguredTable", 1, 1, 1) + Estimates["AWS::CleanRooms::ConfiguredTableAssociation"] = NewResourceEstimate("AWS::CleanRooms::ConfiguredTableAssociation", 1, 1, 1) + Estimates["AWS::CleanRooms::Membership"] = NewResourceEstimate("AWS::CleanRooms::Membership", 1, 1, 1) + Estimates["AWS::Cloud9::EnvironmentEC2"] = NewResourceEstimate("AWS::Cloud9::EnvironmentEC2", 1, 1, 1) + Estimates["AWS::CloudFormation::CustomResource"] = NewResourceEstimate("AWS::CloudFormation::CustomResource", 1, 1, 1) + Estimates["AWS::CloudFormation::HookDefaultVersion"] = NewResourceEstimate("AWS::CloudFormation::HookDefaultVersion", 1, 1, 1) + Estimates["AWS::CloudFormation::HookTypeConfig"] = NewResourceEstimate("AWS::CloudFormation::HookTypeConfig", 1, 1, 1) + Estimates["AWS::CloudFormation::HookVersion"] = NewResourceEstimate("AWS::CloudFormation::HookVersion", 1, 1, 1) + Estimates["AWS::CloudFormation::Macro"] = NewResourceEstimate("AWS::CloudFormation::Macro", 1, 1, 1) + Estimates["AWS::CloudFormation::ModuleDefaultVersion"] = NewResourceEstimate("AWS::CloudFormation::ModuleDefaultVersion", 1, 1, 1) + Estimates["AWS::CloudFormation::ModuleVersion"] = NewResourceEstimate("AWS::CloudFormation::ModuleVersion", 1, 1, 1) + Estimates["AWS::CloudFormation::PublicTypeVersion"] = NewResourceEstimate("AWS::CloudFormation::PublicTypeVersion", 1, 1, 1) + Estimates["AWS::CloudFormation::Publisher"] = NewResourceEstimate("AWS::CloudFormation::Publisher", 1, 1, 1) + Estimates["AWS::CloudFormation::ResourceDefaultVersion"] = NewResourceEstimate("AWS::CloudFormation::ResourceDefaultVersion", 1, 1, 1) + Estimates["AWS::CloudFormation::ResourceVersion"] = NewResourceEstimate("AWS::CloudFormation::ResourceVersion", 1, 1, 1) + Estimates["AWS::CloudFormation::Stack"] = NewResourceEstimate("AWS::CloudFormation::Stack", 1, 1, 1) + Estimates["AWS::CloudFormation::StackSet"] = NewResourceEstimate("AWS::CloudFormation::StackSet", 1, 1, 1) + Estimates["AWS::CloudFormation::TypeActivation"] = NewResourceEstimate("AWS::CloudFormation::TypeActivation", 1, 1, 1) + Estimates["AWS::CloudFormation::WaitCondition"] = NewResourceEstimate("AWS::CloudFormation::WaitCondition", 1, 1, 1) + Estimates["AWS::CloudFormation::WaitConditionHandle"] = NewResourceEstimate("AWS::CloudFormation::WaitConditionHandle", 1, 1, 1) + Estimates["AWS::CloudFront::CachePolicy"] = NewResourceEstimate("AWS::CloudFront::CachePolicy", 1, 1, 1) + Estimates["AWS::CloudFront::CloudFrontOriginAccessIdentity"] = NewResourceEstimate("AWS::CloudFront::CloudFrontOriginAccessIdentity", 1, 1, 1) + Estimates["AWS::CloudFront::ContinuousDeploymentPolicy"] = NewResourceEstimate("AWS::CloudFront::ContinuousDeploymentPolicy", 1, 1, 1) + Estimates["AWS::CloudFront::Distribution"] = NewResourceEstimate("AWS::CloudFront::Distribution", 1, 1, 1) + Estimates["AWS::CloudFront::Function"] = NewResourceEstimate("AWS::CloudFront::Function", 1, 1, 1) + Estimates["AWS::CloudFront::KeyGroup"] = NewResourceEstimate("AWS::CloudFront::KeyGroup", 1, 1, 1) + Estimates["AWS::CloudFront::MonitoringSubscription"] = NewResourceEstimate("AWS::CloudFront::MonitoringSubscription", 1, 1, 1) + Estimates["AWS::CloudFront::OriginAccessControl"] = NewResourceEstimate("AWS::CloudFront::OriginAccessControl", 1, 1, 1) + Estimates["AWS::CloudFront::OriginRequestPolicy"] = NewResourceEstimate("AWS::CloudFront::OriginRequestPolicy", 1, 1, 1) + Estimates["AWS::CloudFront::PublicKey"] = NewResourceEstimate("AWS::CloudFront::PublicKey", 1, 1, 1) + Estimates["AWS::CloudFront::RealtimeLogConfig"] = NewResourceEstimate("AWS::CloudFront::RealtimeLogConfig", 1, 1, 1) + Estimates["AWS::CloudFront::ResponseHeadersPolicy"] = NewResourceEstimate("AWS::CloudFront::ResponseHeadersPolicy", 1, 1, 1) + Estimates["AWS::CloudFront::StreamingDistribution"] = NewResourceEstimate("AWS::CloudFront::StreamingDistribution", 1, 1, 1) + Estimates["AWS::CloudTrail::Channel"] = NewResourceEstimate("AWS::CloudTrail::Channel", 1, 1, 1) + Estimates["AWS::CloudTrail::EventDataStore"] = NewResourceEstimate("AWS::CloudTrail::EventDataStore", 1, 1, 1) + Estimates["AWS::CloudTrail::ResourcePolicy"] = NewResourceEstimate("AWS::CloudTrail::ResourcePolicy", 1, 1, 1) + Estimates["AWS::CloudTrail::Trail"] = NewResourceEstimate("AWS::CloudTrail::Trail", 1, 1, 1) + Estimates["AWS::CloudWatch::Alarm"] = NewResourceEstimate("AWS::CloudWatch::Alarm", 1, 1, 1) + Estimates["AWS::CloudWatch::AnomalyDetector"] = NewResourceEstimate("AWS::CloudWatch::AnomalyDetector", 1, 1, 1) + Estimates["AWS::CloudWatch::CompositeAlarm"] = NewResourceEstimate("AWS::CloudWatch::CompositeAlarm", 1, 1, 1) + Estimates["AWS::CloudWatch::Dashboard"] = NewResourceEstimate("AWS::CloudWatch::Dashboard", 1, 1, 1) + Estimates["AWS::CloudWatch::InsightRule"] = NewResourceEstimate("AWS::CloudWatch::InsightRule", 1, 1, 1) + Estimates["AWS::CloudWatch::MetricStream"] = NewResourceEstimate("AWS::CloudWatch::MetricStream", 1, 1, 1) + Estimates["AWS::CodeArtifact::Domain"] = NewResourceEstimate("AWS::CodeArtifact::Domain", 1, 1, 1) + Estimates["AWS::CodeArtifact::Repository"] = NewResourceEstimate("AWS::CodeArtifact::Repository", 1, 1, 1) + Estimates["AWS::CodeBuild::Project"] = NewResourceEstimate("AWS::CodeBuild::Project", 1, 1, 1) + Estimates["AWS::CodeBuild::ReportGroup"] = NewResourceEstimate("AWS::CodeBuild::ReportGroup", 1, 1, 1) + Estimates["AWS::CodeBuild::SourceCredential"] = NewResourceEstimate("AWS::CodeBuild::SourceCredential", 1, 1, 1) + Estimates["AWS::CodeCommit::Repository"] = NewResourceEstimate("AWS::CodeCommit::Repository", 1, 1, 1) + Estimates["AWS::CodeDeploy::Application"] = NewResourceEstimate("AWS::CodeDeploy::Application", 1, 1, 1) + Estimates["AWS::CodeDeploy::DeploymentConfig"] = NewResourceEstimate("AWS::CodeDeploy::DeploymentConfig", 1, 1, 1) + Estimates["AWS::CodeDeploy::DeploymentGroup"] = NewResourceEstimate("AWS::CodeDeploy::DeploymentGroup", 1, 1, 1) + Estimates["AWS::CodeGuruProfiler::ProfilingGroup"] = NewResourceEstimate("AWS::CodeGuruProfiler::ProfilingGroup", 1, 1, 1) + Estimates["AWS::CodeGuruReviewer::RepositoryAssociation"] = NewResourceEstimate("AWS::CodeGuruReviewer::RepositoryAssociation", 1, 1, 1) + Estimates["AWS::CodePipeline::CustomActionType"] = NewResourceEstimate("AWS::CodePipeline::CustomActionType", 1, 1, 1) + Estimates["AWS::CodePipeline::Pipeline"] = NewResourceEstimate("AWS::CodePipeline::Pipeline", 1, 1, 1) + Estimates["AWS::CodePipeline::Webhook"] = NewResourceEstimate("AWS::CodePipeline::Webhook", 1, 1, 1) + Estimates["AWS::CodeStar::GitHubRepository"] = NewResourceEstimate("AWS::CodeStar::GitHubRepository", 1, 1, 1) + Estimates["AWS::CodeStarConnections::Connection"] = NewResourceEstimate("AWS::CodeStarConnections::Connection", 1, 1, 1) + Estimates["AWS::CodeStarNotifications::NotificationRule"] = NewResourceEstimate("AWS::CodeStarNotifications::NotificationRule", 1, 1, 1) + Estimates["AWS::Cognito::IdentityPool"] = NewResourceEstimate("AWS::Cognito::IdentityPool", 1, 1, 1) + Estimates["AWS::Cognito::IdentityPoolPrincipalTag"] = NewResourceEstimate("AWS::Cognito::IdentityPoolPrincipalTag", 1, 1, 1) + Estimates["AWS::Cognito::IdentityPoolRoleAttachment"] = NewResourceEstimate("AWS::Cognito::IdentityPoolRoleAttachment", 1, 1, 1) + Estimates["AWS::Cognito::UserPool"] = NewResourceEstimate("AWS::Cognito::UserPool", 1, 1, 1) + Estimates["AWS::Cognito::UserPoolClient"] = NewResourceEstimate("AWS::Cognito::UserPoolClient", 1, 1, 1) + Estimates["AWS::Cognito::UserPoolDomain"] = NewResourceEstimate("AWS::Cognito::UserPoolDomain", 1, 1, 1) + Estimates["AWS::Cognito::UserPoolGroup"] = NewResourceEstimate("AWS::Cognito::UserPoolGroup", 1, 1, 1) + Estimates["AWS::Cognito::UserPoolIdentityProvider"] = NewResourceEstimate("AWS::Cognito::UserPoolIdentityProvider", 1, 1, 1) + Estimates["AWS::Cognito::UserPoolResourceServer"] = NewResourceEstimate("AWS::Cognito::UserPoolResourceServer", 1, 1, 1) + Estimates["AWS::Cognito::UserPoolRiskConfigurationAttachment"] = NewResourceEstimate("AWS::Cognito::UserPoolRiskConfigurationAttachment", 1, 1, 1) + Estimates["AWS::Cognito::UserPoolUICustomizationAttachment"] = NewResourceEstimate("AWS::Cognito::UserPoolUICustomizationAttachment", 1, 1, 1) + Estimates["AWS::Cognito::UserPoolUser"] = NewResourceEstimate("AWS::Cognito::UserPoolUser", 1, 1, 1) + Estimates["AWS::Cognito::UserPoolUserToGroupAttachment"] = NewResourceEstimate("AWS::Cognito::UserPoolUserToGroupAttachment", 1, 1, 1) + Estimates["AWS::Comprehend::DocumentClassifier"] = NewResourceEstimate("AWS::Comprehend::DocumentClassifier", 1, 1, 1) + Estimates["AWS::Comprehend::Flywheel"] = NewResourceEstimate("AWS::Comprehend::Flywheel", 1, 1, 1) + Estimates["AWS::Config::AggregationAuthorization"] = NewResourceEstimate("AWS::Config::AggregationAuthorization", 1, 1, 1) + Estimates["AWS::Config::ConfigRule"] = NewResourceEstimate("AWS::Config::ConfigRule", 1, 1, 1) + Estimates["AWS::Config::ConfigurationAggregator"] = NewResourceEstimate("AWS::Config::ConfigurationAggregator", 1, 1, 1) + Estimates["AWS::Config::ConfigurationRecorder"] = NewResourceEstimate("AWS::Config::ConfigurationRecorder", 1, 1, 1) + Estimates["AWS::Config::ConformancePack"] = NewResourceEstimate("AWS::Config::ConformancePack", 1, 1, 1) + Estimates["AWS::Config::DeliveryChannel"] = NewResourceEstimate("AWS::Config::DeliveryChannel", 1, 1, 1) + Estimates["AWS::Config::OrganizationConfigRule"] = NewResourceEstimate("AWS::Config::OrganizationConfigRule", 1, 1, 1) + Estimates["AWS::Config::OrganizationConformancePack"] = NewResourceEstimate("AWS::Config::OrganizationConformancePack", 1, 1, 1) + Estimates["AWS::Config::RemediationConfiguration"] = NewResourceEstimate("AWS::Config::RemediationConfiguration", 1, 1, 1) + Estimates["AWS::Config::StoredQuery"] = NewResourceEstimate("AWS::Config::StoredQuery", 1, 1, 1) + Estimates["AWS::Connect::ApprovedOrigin"] = NewResourceEstimate("AWS::Connect::ApprovedOrigin", 1, 1, 1) + Estimates["AWS::Connect::ContactFlow"] = NewResourceEstimate("AWS::Connect::ContactFlow", 1, 1, 1) + Estimates["AWS::Connect::ContactFlowModule"] = NewResourceEstimate("AWS::Connect::ContactFlowModule", 1, 1, 1) + Estimates["AWS::Connect::EvaluationForm"] = NewResourceEstimate("AWS::Connect::EvaluationForm", 1, 1, 1) + Estimates["AWS::Connect::HoursOfOperation"] = NewResourceEstimate("AWS::Connect::HoursOfOperation", 1, 1, 1) + Estimates["AWS::Connect::Instance"] = NewResourceEstimate("AWS::Connect::Instance", 1, 1, 1) + Estimates["AWS::Connect::InstanceStorageConfig"] = NewResourceEstimate("AWS::Connect::InstanceStorageConfig", 1, 1, 1) + Estimates["AWS::Connect::IntegrationAssociation"] = NewResourceEstimate("AWS::Connect::IntegrationAssociation", 1, 1, 1) + Estimates["AWS::Connect::PhoneNumber"] = NewResourceEstimate("AWS::Connect::PhoneNumber", 1, 1, 1) + Estimates["AWS::Connect::Prompt"] = NewResourceEstimate("AWS::Connect::Prompt", 1, 1, 1) + Estimates["AWS::Connect::Queue"] = NewResourceEstimate("AWS::Connect::Queue", 1, 1, 1) + Estimates["AWS::Connect::QuickConnect"] = NewResourceEstimate("AWS::Connect::QuickConnect", 1, 1, 1) + Estimates["AWS::Connect::RoutingProfile"] = NewResourceEstimate("AWS::Connect::RoutingProfile", 1, 1, 1) + Estimates["AWS::Connect::Rule"] = NewResourceEstimate("AWS::Connect::Rule", 1, 1, 1) + Estimates["AWS::Connect::SecurityKey"] = NewResourceEstimate("AWS::Connect::SecurityKey", 1, 1, 1) + Estimates["AWS::Connect::TaskTemplate"] = NewResourceEstimate("AWS::Connect::TaskTemplate", 1, 1, 1) + Estimates["AWS::Connect::TrafficDistributionGroup"] = NewResourceEstimate("AWS::Connect::TrafficDistributionGroup", 1, 1, 1) + Estimates["AWS::Connect::User"] = NewResourceEstimate("AWS::Connect::User", 1, 1, 1) + Estimates["AWS::Connect::UserHierarchyGroup"] = NewResourceEstimate("AWS::Connect::UserHierarchyGroup", 1, 1, 1) + Estimates["AWS::Connect::View"] = NewResourceEstimate("AWS::Connect::View", 1, 1, 1) + Estimates["AWS::Connect::ViewVersion"] = NewResourceEstimate("AWS::Connect::ViewVersion", 1, 1, 1) + Estimates["AWS::ConnectCampaigns::Campaign"] = NewResourceEstimate("AWS::ConnectCampaigns::Campaign", 1, 1, 1) + Estimates["AWS::ControlTower::EnabledControl"] = NewResourceEstimate("AWS::ControlTower::EnabledControl", 1, 1, 1) + Estimates["AWS::CustomerProfiles::CalculatedAttributeDefinition"] = NewResourceEstimate("AWS::CustomerProfiles::CalculatedAttributeDefinition", 1, 1, 1) + Estimates["AWS::CustomerProfiles::Domain"] = NewResourceEstimate("AWS::CustomerProfiles::Domain", 1, 1, 1) + Estimates["AWS::CustomerProfiles::EventStream"] = NewResourceEstimate("AWS::CustomerProfiles::EventStream", 1, 1, 1) + Estimates["AWS::CustomerProfiles::Integration"] = NewResourceEstimate("AWS::CustomerProfiles::Integration", 1, 1, 1) + Estimates["AWS::CustomerProfiles::ObjectType"] = NewResourceEstimate("AWS::CustomerProfiles::ObjectType", 1, 1, 1) + Estimates["AWS::DAX::Cluster"] = NewResourceEstimate("AWS::DAX::Cluster", 1, 1, 1) + Estimates["AWS::DAX::ParameterGroup"] = NewResourceEstimate("AWS::DAX::ParameterGroup", 1, 1, 1) + Estimates["AWS::DAX::SubnetGroup"] = NewResourceEstimate("AWS::DAX::SubnetGroup", 1, 1, 1) + Estimates["AWS::DLM::LifecyclePolicy"] = NewResourceEstimate("AWS::DLM::LifecyclePolicy", 1, 1, 1) + Estimates["AWS::DMS::Certificate"] = NewResourceEstimate("AWS::DMS::Certificate", 1, 1, 1) + Estimates["AWS::DMS::Endpoint"] = NewResourceEstimate("AWS::DMS::Endpoint", 1, 1, 1) + Estimates["AWS::DMS::EventSubscription"] = NewResourceEstimate("AWS::DMS::EventSubscription", 1, 1, 1) + Estimates["AWS::DMS::ReplicationConfig"] = NewResourceEstimate("AWS::DMS::ReplicationConfig", 1, 1, 1) + Estimates["AWS::DMS::ReplicationInstance"] = NewResourceEstimate("AWS::DMS::ReplicationInstance", 1, 1, 1) + Estimates["AWS::DMS::ReplicationSubnetGroup"] = NewResourceEstimate("AWS::DMS::ReplicationSubnetGroup", 1, 1, 1) + Estimates["AWS::DMS::ReplicationTask"] = NewResourceEstimate("AWS::DMS::ReplicationTask", 1, 1, 1) + Estimates["AWS::DataBrew::Dataset"] = NewResourceEstimate("AWS::DataBrew::Dataset", 1, 1, 1) + Estimates["AWS::DataBrew::Job"] = NewResourceEstimate("AWS::DataBrew::Job", 1, 1, 1) + Estimates["AWS::DataBrew::Project"] = NewResourceEstimate("AWS::DataBrew::Project", 1, 1, 1) + Estimates["AWS::DataBrew::Recipe"] = NewResourceEstimate("AWS::DataBrew::Recipe", 1, 1, 1) + Estimates["AWS::DataBrew::Ruleset"] = NewResourceEstimate("AWS::DataBrew::Ruleset", 1, 1, 1) + Estimates["AWS::DataBrew::Schedule"] = NewResourceEstimate("AWS::DataBrew::Schedule", 1, 1, 1) + Estimates["AWS::DataPipeline::Pipeline"] = NewResourceEstimate("AWS::DataPipeline::Pipeline", 1, 1, 1) + Estimates["AWS::DataSync::Agent"] = NewResourceEstimate("AWS::DataSync::Agent", 1, 1, 1) + Estimates["AWS::DataSync::LocationAzureBlob"] = NewResourceEstimate("AWS::DataSync::LocationAzureBlob", 1, 1, 1) + Estimates["AWS::DataSync::LocationEFS"] = NewResourceEstimate("AWS::DataSync::LocationEFS", 1, 1, 1) + Estimates["AWS::DataSync::LocationFSxLustre"] = NewResourceEstimate("AWS::DataSync::LocationFSxLustre", 1, 1, 1) + Estimates["AWS::DataSync::LocationFSxONTAP"] = NewResourceEstimate("AWS::DataSync::LocationFSxONTAP", 1, 1, 1) + Estimates["AWS::DataSync::LocationFSxOpenZFS"] = NewResourceEstimate("AWS::DataSync::LocationFSxOpenZFS", 1, 1, 1) + Estimates["AWS::DataSync::LocationFSxWindows"] = NewResourceEstimate("AWS::DataSync::LocationFSxWindows", 1, 1, 1) + Estimates["AWS::DataSync::LocationHDFS"] = NewResourceEstimate("AWS::DataSync::LocationHDFS", 1, 1, 1) + Estimates["AWS::DataSync::LocationNFS"] = NewResourceEstimate("AWS::DataSync::LocationNFS", 1, 1, 1) + Estimates["AWS::DataSync::LocationObjectStorage"] = NewResourceEstimate("AWS::DataSync::LocationObjectStorage", 1, 1, 1) + Estimates["AWS::DataSync::LocationS3"] = NewResourceEstimate("AWS::DataSync::LocationS3", 1, 1, 1) + Estimates["AWS::DataSync::LocationSMB"] = NewResourceEstimate("AWS::DataSync::LocationSMB", 1, 1, 1) + Estimates["AWS::DataSync::StorageSystem"] = NewResourceEstimate("AWS::DataSync::StorageSystem", 1, 1, 1) + Estimates["AWS::DataSync::Task"] = NewResourceEstimate("AWS::DataSync::Task", 1, 1, 1) + Estimates["AWS::Detective::Graph"] = NewResourceEstimate("AWS::Detective::Graph", 1, 1, 1) + Estimates["AWS::Detective::MemberInvitation"] = NewResourceEstimate("AWS::Detective::MemberInvitation", 1, 1, 1) + Estimates["AWS::Detective::OrganizationAdmin"] = NewResourceEstimate("AWS::Detective::OrganizationAdmin", 1, 1, 1) + Estimates["AWS::DevOpsGuru::LogAnomalyDetectionIntegration"] = NewResourceEstimate("AWS::DevOpsGuru::LogAnomalyDetectionIntegration", 1, 1, 1) + Estimates["AWS::DevOpsGuru::NotificationChannel"] = NewResourceEstimate("AWS::DevOpsGuru::NotificationChannel", 1, 1, 1) + Estimates["AWS::DevOpsGuru::ResourceCollection"] = NewResourceEstimate("AWS::DevOpsGuru::ResourceCollection", 1, 1, 1) + Estimates["AWS::DirectoryService::MicrosoftAD"] = NewResourceEstimate("AWS::DirectoryService::MicrosoftAD", 1, 1, 1) + Estimates["AWS::DirectoryService::SimpleAD"] = NewResourceEstimate("AWS::DirectoryService::SimpleAD", 1, 1, 1) + Estimates["AWS::DocDB::DBCluster"] = NewResourceEstimate("AWS::DocDB::DBCluster", 1, 1, 1) + Estimates["AWS::DocDB::DBClusterParameterGroup"] = NewResourceEstimate("AWS::DocDB::DBClusterParameterGroup", 1, 1, 1) + Estimates["AWS::DocDB::DBInstance"] = NewResourceEstimate("AWS::DocDB::DBInstance", 1, 1, 1) + Estimates["AWS::DocDB::DBSubnetGroup"] = NewResourceEstimate("AWS::DocDB::DBSubnetGroup", 1, 1, 1) + Estimates["AWS::DocDBElastic::Cluster"] = NewResourceEstimate("AWS::DocDBElastic::Cluster", 1, 1, 1) + Estimates["AWS::DynamoDB::GlobalTable"] = NewResourceEstimate("AWS::DynamoDB::GlobalTable", 1, 1, 1) + Estimates["AWS::DynamoDB::Table"] = NewResourceEstimate("AWS::DynamoDB::Table", 1, 1, 1) + Estimates["AWS::EC2::CapacityReservation"] = NewResourceEstimate("AWS::EC2::CapacityReservation", 1, 1, 1) + Estimates["AWS::EC2::CapacityReservationFleet"] = NewResourceEstimate("AWS::EC2::CapacityReservationFleet", 1, 1, 1) + Estimates["AWS::EC2::CarrierGateway"] = NewResourceEstimate("AWS::EC2::CarrierGateway", 1, 1, 1) + Estimates["AWS::EC2::ClientVpnAuthorizationRule"] = NewResourceEstimate("AWS::EC2::ClientVpnAuthorizationRule", 1, 1, 1) + Estimates["AWS::EC2::ClientVpnEndpoint"] = NewResourceEstimate("AWS::EC2::ClientVpnEndpoint", 1, 1, 1) + Estimates["AWS::EC2::ClientVpnRoute"] = NewResourceEstimate("AWS::EC2::ClientVpnRoute", 1, 1, 1) + Estimates["AWS::EC2::ClientVpnTargetNetworkAssociation"] = NewResourceEstimate("AWS::EC2::ClientVpnTargetNetworkAssociation", 1, 1, 1) + Estimates["AWS::EC2::CustomerGateway"] = NewResourceEstimate("AWS::EC2::CustomerGateway", 1, 1, 1) + Estimates["AWS::EC2::DHCPOptions"] = NewResourceEstimate("AWS::EC2::DHCPOptions", 1, 1, 1) + Estimates["AWS::EC2::EC2Fleet"] = NewResourceEstimate("AWS::EC2::EC2Fleet", 1, 1, 1) + Estimates["AWS::EC2::EIP"] = NewResourceEstimate("AWS::EC2::EIP", 1, 1, 1) + Estimates["AWS::EC2::EIPAssociation"] = NewResourceEstimate("AWS::EC2::EIPAssociation", 1, 1, 1) + Estimates["AWS::EC2::EgressOnlyInternetGateway"] = NewResourceEstimate("AWS::EC2::EgressOnlyInternetGateway", 1, 1, 1) + Estimates["AWS::EC2::EnclaveCertificateIamRoleAssociation"] = NewResourceEstimate("AWS::EC2::EnclaveCertificateIamRoleAssociation", 1, 1, 1) + Estimates["AWS::EC2::FlowLog"] = NewResourceEstimate("AWS::EC2::FlowLog", 1, 1, 1) + Estimates["AWS::EC2::GatewayRouteTableAssociation"] = NewResourceEstimate("AWS::EC2::GatewayRouteTableAssociation", 1, 1, 1) + Estimates["AWS::EC2::Host"] = NewResourceEstimate("AWS::EC2::Host", 1, 1, 1) + Estimates["AWS::EC2::IPAM"] = NewResourceEstimate("AWS::EC2::IPAM", 1, 1, 1) + Estimates["AWS::EC2::IPAMAllocation"] = NewResourceEstimate("AWS::EC2::IPAMAllocation", 1, 1, 1) + Estimates["AWS::EC2::IPAMPool"] = NewResourceEstimate("AWS::EC2::IPAMPool", 1, 1, 1) + Estimates["AWS::EC2::IPAMPoolCidr"] = NewResourceEstimate("AWS::EC2::IPAMPoolCidr", 1, 1, 1) + Estimates["AWS::EC2::IPAMResourceDiscovery"] = NewResourceEstimate("AWS::EC2::IPAMResourceDiscovery", 1, 1, 1) + Estimates["AWS::EC2::IPAMResourceDiscoveryAssociation"] = NewResourceEstimate("AWS::EC2::IPAMResourceDiscoveryAssociation", 1, 1, 1) + Estimates["AWS::EC2::IPAMScope"] = NewResourceEstimate("AWS::EC2::IPAMScope", 1, 1, 1) + Estimates["AWS::EC2::Instance"] = NewResourceEstimate("AWS::EC2::Instance", 1, 1, 1) + Estimates["AWS::EC2::InstanceConnectEndpoint"] = NewResourceEstimate("AWS::EC2::InstanceConnectEndpoint", 1, 1, 1) + Estimates["AWS::EC2::InternetGateway"] = NewResourceEstimate("AWS::EC2::InternetGateway", 1, 1, 1) + Estimates["AWS::EC2::KeyPair"] = NewResourceEstimate("AWS::EC2::KeyPair", 1, 1, 1) + Estimates["AWS::EC2::LaunchTemplate"] = NewResourceEstimate("AWS::EC2::LaunchTemplate", 1, 1, 1) + Estimates["AWS::EC2::LocalGatewayRoute"] = NewResourceEstimate("AWS::EC2::LocalGatewayRoute", 1, 1, 1) + Estimates["AWS::EC2::LocalGatewayRouteTable"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTable", 1, 1, 1) + Estimates["AWS::EC2::LocalGatewayRouteTableVPCAssociation"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTableVPCAssociation", 1, 1, 1) + Estimates["AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation", 1, 1, 1) + Estimates["AWS::EC2::NatGateway"] = NewResourceEstimate("AWS::EC2::NatGateway", 1, 1, 1) + Estimates["AWS::EC2::NetworkAcl"] = NewResourceEstimate("AWS::EC2::NetworkAcl", 1, 1, 1) + Estimates["AWS::EC2::NetworkAclEntry"] = NewResourceEstimate("AWS::EC2::NetworkAclEntry", 1, 1, 1) + Estimates["AWS::EC2::NetworkInsightsAccessScope"] = NewResourceEstimate("AWS::EC2::NetworkInsightsAccessScope", 1, 1, 1) + Estimates["AWS::EC2::NetworkInsightsAccessScopeAnalysis"] = NewResourceEstimate("AWS::EC2::NetworkInsightsAccessScopeAnalysis", 1, 1, 1) + Estimates["AWS::EC2::NetworkInsightsAnalysis"] = NewResourceEstimate("AWS::EC2::NetworkInsightsAnalysis", 1, 1, 1) + Estimates["AWS::EC2::NetworkInsightsPath"] = NewResourceEstimate("AWS::EC2::NetworkInsightsPath", 1, 1, 1) + Estimates["AWS::EC2::NetworkInterface"] = NewResourceEstimate("AWS::EC2::NetworkInterface", 1, 1, 1) + Estimates["AWS::EC2::NetworkInterfaceAttachment"] = NewResourceEstimate("AWS::EC2::NetworkInterfaceAttachment", 1, 1, 1) + Estimates["AWS::EC2::NetworkInterfacePermission"] = NewResourceEstimate("AWS::EC2::NetworkInterfacePermission", 1, 1, 1) + Estimates["AWS::EC2::NetworkPerformanceMetricSubscription"] = NewResourceEstimate("AWS::EC2::NetworkPerformanceMetricSubscription", 1, 1, 1) + Estimates["AWS::EC2::PlacementGroup"] = NewResourceEstimate("AWS::EC2::PlacementGroup", 1, 1, 1) + Estimates["AWS::EC2::PrefixList"] = NewResourceEstimate("AWS::EC2::PrefixList", 1, 1, 1) + Estimates["AWS::EC2::Route"] = NewResourceEstimate("AWS::EC2::Route", 1, 1, 1) + Estimates["AWS::EC2::RouteTable"] = NewResourceEstimate("AWS::EC2::RouteTable", 1, 1, 1) + Estimates["AWS::EC2::SecurityGroup"] = NewResourceEstimate("AWS::EC2::SecurityGroup", 1, 1, 1) + Estimates["AWS::EC2::SecurityGroupEgress"] = NewResourceEstimate("AWS::EC2::SecurityGroupEgress", 1, 1, 1) + Estimates["AWS::EC2::SecurityGroupIngress"] = NewResourceEstimate("AWS::EC2::SecurityGroupIngress", 1, 1, 1) + Estimates["AWS::EC2::SpotFleet"] = NewResourceEstimate("AWS::EC2::SpotFleet", 1, 1, 1) + Estimates["AWS::EC2::Subnet"] = NewResourceEstimate("AWS::EC2::Subnet", 1, 1, 1) + Estimates["AWS::EC2::SubnetCidrBlock"] = NewResourceEstimate("AWS::EC2::SubnetCidrBlock", 1, 1, 1) + Estimates["AWS::EC2::SubnetNetworkAclAssociation"] = NewResourceEstimate("AWS::EC2::SubnetNetworkAclAssociation", 1, 1, 1) + Estimates["AWS::EC2::SubnetRouteTableAssociation"] = NewResourceEstimate("AWS::EC2::SubnetRouteTableAssociation", 1, 1, 1) + Estimates["AWS::EC2::TrafficMirrorFilter"] = NewResourceEstimate("AWS::EC2::TrafficMirrorFilter", 1, 1, 1) + Estimates["AWS::EC2::TrafficMirrorFilterRule"] = NewResourceEstimate("AWS::EC2::TrafficMirrorFilterRule", 1, 1, 1) + Estimates["AWS::EC2::TrafficMirrorSession"] = NewResourceEstimate("AWS::EC2::TrafficMirrorSession", 1, 1, 1) + Estimates["AWS::EC2::TrafficMirrorTarget"] = NewResourceEstimate("AWS::EC2::TrafficMirrorTarget", 1, 1, 1) + Estimates["AWS::EC2::TransitGateway"] = NewResourceEstimate("AWS::EC2::TransitGateway", 1, 1, 1) + Estimates["AWS::EC2::TransitGatewayAttachment"] = NewResourceEstimate("AWS::EC2::TransitGatewayAttachment", 1, 1, 1) + Estimates["AWS::EC2::TransitGatewayConnect"] = NewResourceEstimate("AWS::EC2::TransitGatewayConnect", 1, 1, 1) + Estimates["AWS::EC2::TransitGatewayMulticastDomain"] = NewResourceEstimate("AWS::EC2::TransitGatewayMulticastDomain", 1, 1, 1) + Estimates["AWS::EC2::TransitGatewayMulticastDomainAssociation"] = NewResourceEstimate("AWS::EC2::TransitGatewayMulticastDomainAssociation", 1, 1, 1) + Estimates["AWS::EC2::TransitGatewayMulticastGroupMember"] = NewResourceEstimate("AWS::EC2::TransitGatewayMulticastGroupMember", 1, 1, 1) + Estimates["AWS::EC2::TransitGatewayMulticastGroupSource"] = NewResourceEstimate("AWS::EC2::TransitGatewayMulticastGroupSource", 1, 1, 1) + Estimates["AWS::EC2::TransitGatewayPeeringAttachment"] = NewResourceEstimate("AWS::EC2::TransitGatewayPeeringAttachment", 1, 1, 1) + Estimates["AWS::EC2::TransitGatewayRoute"] = NewResourceEstimate("AWS::EC2::TransitGatewayRoute", 1, 1, 1) + Estimates["AWS::EC2::TransitGatewayRouteTable"] = NewResourceEstimate("AWS::EC2::TransitGatewayRouteTable", 1, 1, 1) + Estimates["AWS::EC2::TransitGatewayRouteTableAssociation"] = NewResourceEstimate("AWS::EC2::TransitGatewayRouteTableAssociation", 1, 1, 1) + Estimates["AWS::EC2::TransitGatewayRouteTablePropagation"] = NewResourceEstimate("AWS::EC2::TransitGatewayRouteTablePropagation", 1, 1, 1) + Estimates["AWS::EC2::TransitGatewayVpcAttachment"] = NewResourceEstimate("AWS::EC2::TransitGatewayVpcAttachment", 1, 1, 1) + Estimates["AWS::EC2::VPC"] = NewResourceEstimate("AWS::EC2::VPC", 1, 1, 1) + Estimates["AWS::EC2::VPCCidrBlock"] = NewResourceEstimate("AWS::EC2::VPCCidrBlock", 1, 1, 1) + Estimates["AWS::EC2::VPCDHCPOptionsAssociation"] = NewResourceEstimate("AWS::EC2::VPCDHCPOptionsAssociation", 1, 1, 1) + Estimates["AWS::EC2::VPCEndpoint"] = NewResourceEstimate("AWS::EC2::VPCEndpoint", 1, 1, 1) + Estimates["AWS::EC2::VPCEndpointConnectionNotification"] = NewResourceEstimate("AWS::EC2::VPCEndpointConnectionNotification", 1, 1, 1) + Estimates["AWS::EC2::VPCEndpointService"] = NewResourceEstimate("AWS::EC2::VPCEndpointService", 1, 1, 1) + Estimates["AWS::EC2::VPCEndpointServicePermissions"] = NewResourceEstimate("AWS::EC2::VPCEndpointServicePermissions", 1, 1, 1) + Estimates["AWS::EC2::VPCGatewayAttachment"] = NewResourceEstimate("AWS::EC2::VPCGatewayAttachment", 1, 1, 1) + Estimates["AWS::EC2::VPCPeeringConnection"] = NewResourceEstimate("AWS::EC2::VPCPeeringConnection", 1, 1, 1) + Estimates["AWS::EC2::VPNConnection"] = NewResourceEstimate("AWS::EC2::VPNConnection", 1, 1, 1) + Estimates["AWS::EC2::VPNConnectionRoute"] = NewResourceEstimate("AWS::EC2::VPNConnectionRoute", 1, 1, 1) + Estimates["AWS::EC2::VPNGateway"] = NewResourceEstimate("AWS::EC2::VPNGateway", 1, 1, 1) + Estimates["AWS::EC2::VPNGatewayRoutePropagation"] = NewResourceEstimate("AWS::EC2::VPNGatewayRoutePropagation", 1, 1, 1) + Estimates["AWS::EC2::VerifiedAccessEndpoint"] = NewResourceEstimate("AWS::EC2::VerifiedAccessEndpoint", 1, 1, 1) + Estimates["AWS::EC2::VerifiedAccessGroup"] = NewResourceEstimate("AWS::EC2::VerifiedAccessGroup", 1, 1, 1) + Estimates["AWS::EC2::VerifiedAccessInstance"] = NewResourceEstimate("AWS::EC2::VerifiedAccessInstance", 1, 1, 1) + Estimates["AWS::EC2::VerifiedAccessTrustProvider"] = NewResourceEstimate("AWS::EC2::VerifiedAccessTrustProvider", 1, 1, 1) + Estimates["AWS::EC2::Volume"] = NewResourceEstimate("AWS::EC2::Volume", 1, 1, 1) + Estimates["AWS::EC2::VolumeAttachment"] = NewResourceEstimate("AWS::EC2::VolumeAttachment", 1, 1, 1) + Estimates["AWS::ECR::PublicRepository"] = NewResourceEstimate("AWS::ECR::PublicRepository", 1, 1, 1) + Estimates["AWS::ECR::PullThroughCacheRule"] = NewResourceEstimate("AWS::ECR::PullThroughCacheRule", 1, 1, 1) + Estimates["AWS::ECR::RegistryPolicy"] = NewResourceEstimate("AWS::ECR::RegistryPolicy", 1, 1, 1) + Estimates["AWS::ECR::ReplicationConfiguration"] = NewResourceEstimate("AWS::ECR::ReplicationConfiguration", 1, 1, 1) + Estimates["AWS::ECR::Repository"] = NewResourceEstimate("AWS::ECR::Repository", 1, 1, 1) + Estimates["AWS::ECS::CapacityProvider"] = NewResourceEstimate("AWS::ECS::CapacityProvider", 1, 1, 1) + Estimates["AWS::ECS::Cluster"] = NewResourceEstimate("AWS::ECS::Cluster", 1, 1, 1) + Estimates["AWS::ECS::ClusterCapacityProviderAssociations"] = NewResourceEstimate("AWS::ECS::ClusterCapacityProviderAssociations", 1, 1, 1) + Estimates["AWS::ECS::PrimaryTaskSet"] = NewResourceEstimate("AWS::ECS::PrimaryTaskSet", 1, 1, 1) + Estimates["AWS::ECS::Service"] = NewResourceEstimate("AWS::ECS::Service", 1, 1, 1) + Estimates["AWS::ECS::TaskDefinition"] = NewResourceEstimate("AWS::ECS::TaskDefinition", 1, 1, 1) + Estimates["AWS::ECS::TaskSet"] = NewResourceEstimate("AWS::ECS::TaskSet", 1, 1, 1) + Estimates["AWS::EFS::AccessPoint"] = NewResourceEstimate("AWS::EFS::AccessPoint", 1, 1, 1) + Estimates["AWS::EFS::FileSystem"] = NewResourceEstimate("AWS::EFS::FileSystem", 1, 1, 1) + Estimates["AWS::EFS::MountTarget"] = NewResourceEstimate("AWS::EFS::MountTarget", 1, 1, 1) + Estimates["AWS::EKS::Addon"] = NewResourceEstimate("AWS::EKS::Addon", 1, 1, 1) + Estimates["AWS::EKS::Cluster"] = NewResourceEstimate("AWS::EKS::Cluster", 1, 1, 1) + Estimates["AWS::EKS::FargateProfile"] = NewResourceEstimate("AWS::EKS::FargateProfile", 1, 1, 1) + Estimates["AWS::EKS::IdentityProviderConfig"] = NewResourceEstimate("AWS::EKS::IdentityProviderConfig", 1, 1, 1) + Estimates["AWS::EKS::Nodegroup"] = NewResourceEstimate("AWS::EKS::Nodegroup", 1, 1, 1) + Estimates["AWS::EMR::Cluster"] = NewResourceEstimate("AWS::EMR::Cluster", 1, 1, 1) + Estimates["AWS::EMR::InstanceFleetConfig"] = NewResourceEstimate("AWS::EMR::InstanceFleetConfig", 1, 1, 1) + Estimates["AWS::EMR::InstanceGroupConfig"] = NewResourceEstimate("AWS::EMR::InstanceGroupConfig", 1, 1, 1) + Estimates["AWS::EMR::SecurityConfiguration"] = NewResourceEstimate("AWS::EMR::SecurityConfiguration", 1, 1, 1) + Estimates["AWS::EMR::Step"] = NewResourceEstimate("AWS::EMR::Step", 1, 1, 1) + Estimates["AWS::EMR::Studio"] = NewResourceEstimate("AWS::EMR::Studio", 1, 1, 1) + Estimates["AWS::EMR::StudioSessionMapping"] = NewResourceEstimate("AWS::EMR::StudioSessionMapping", 1, 1, 1) + Estimates["AWS::EMR::WALWorkspace"] = NewResourceEstimate("AWS::EMR::WALWorkspace", 1, 1, 1) + Estimates["AWS::EMRContainers::VirtualCluster"] = NewResourceEstimate("AWS::EMRContainers::VirtualCluster", 1, 1, 1) + Estimates["AWS::EMRServerless::Application"] = NewResourceEstimate("AWS::EMRServerless::Application", 1, 1, 1) + Estimates["AWS::ElastiCache::CacheCluster"] = NewResourceEstimate("AWS::ElastiCache::CacheCluster", 1, 1, 1) + Estimates["AWS::ElastiCache::GlobalReplicationGroup"] = NewResourceEstimate("AWS::ElastiCache::GlobalReplicationGroup", 1, 1, 1) + Estimates["AWS::ElastiCache::ParameterGroup"] = NewResourceEstimate("AWS::ElastiCache::ParameterGroup", 1, 1, 1) + Estimates["AWS::ElastiCache::ReplicationGroup"] = NewResourceEstimate("AWS::ElastiCache::ReplicationGroup", 1, 1, 1) + Estimates["AWS::ElastiCache::SecurityGroup"] = NewResourceEstimate("AWS::ElastiCache::SecurityGroup", 1, 1, 1) + Estimates["AWS::ElastiCache::SecurityGroupIngress"] = NewResourceEstimate("AWS::ElastiCache::SecurityGroupIngress", 1, 1, 1) + Estimates["AWS::ElastiCache::SubnetGroup"] = NewResourceEstimate("AWS::ElastiCache::SubnetGroup", 1, 1, 1) + Estimates["AWS::ElastiCache::User"] = NewResourceEstimate("AWS::ElastiCache::User", 1, 1, 1) + Estimates["AWS::ElastiCache::UserGroup"] = NewResourceEstimate("AWS::ElastiCache::UserGroup", 1, 1, 1) + Estimates["AWS::ElasticBeanstalk::Application"] = NewResourceEstimate("AWS::ElasticBeanstalk::Application", 1, 1, 1) + Estimates["AWS::ElasticBeanstalk::ApplicationVersion"] = NewResourceEstimate("AWS::ElasticBeanstalk::ApplicationVersion", 1, 1, 1) + Estimates["AWS::ElasticBeanstalk::ConfigurationTemplate"] = NewResourceEstimate("AWS::ElasticBeanstalk::ConfigurationTemplate", 1, 1, 1) + Estimates["AWS::ElasticBeanstalk::Environment"] = NewResourceEstimate("AWS::ElasticBeanstalk::Environment", 1, 1, 1) + Estimates["AWS::ElasticLoadBalancing::LoadBalancer"] = NewResourceEstimate("AWS::ElasticLoadBalancing::LoadBalancer", 1, 1, 1) + Estimates["AWS::ElasticLoadBalancingV2::Listener"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::Listener", 1, 1, 1) + Estimates["AWS::ElasticLoadBalancingV2::ListenerCertificate"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::ListenerCertificate", 1, 1, 1) + Estimates["AWS::ElasticLoadBalancingV2::ListenerRule"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::ListenerRule", 1, 1, 1) + Estimates["AWS::ElasticLoadBalancingV2::LoadBalancer"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::LoadBalancer", 1, 1, 1) + Estimates["AWS::ElasticLoadBalancingV2::TargetGroup"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::TargetGroup", 1, 1, 1) + Estimates["AWS::Elasticsearch::Domain"] = NewResourceEstimate("AWS::Elasticsearch::Domain", 1, 1, 1) + Estimates["AWS::EntityResolution::MatchingWorkflow"] = NewResourceEstimate("AWS::EntityResolution::MatchingWorkflow", 1, 1, 1) + Estimates["AWS::EntityResolution::SchemaMapping"] = NewResourceEstimate("AWS::EntityResolution::SchemaMapping", 1, 1, 1) + Estimates["AWS::EventSchemas::Discoverer"] = NewResourceEstimate("AWS::EventSchemas::Discoverer", 1, 1, 1) + Estimates["AWS::EventSchemas::Registry"] = NewResourceEstimate("AWS::EventSchemas::Registry", 1, 1, 1) + Estimates["AWS::EventSchemas::RegistryPolicy"] = NewResourceEstimate("AWS::EventSchemas::RegistryPolicy", 1, 1, 1) + Estimates["AWS::EventSchemas::Schema"] = NewResourceEstimate("AWS::EventSchemas::Schema", 1, 1, 1) + Estimates["AWS::Events::ApiDestination"] = NewResourceEstimate("AWS::Events::ApiDestination", 1, 1, 1) + Estimates["AWS::Events::Archive"] = NewResourceEstimate("AWS::Events::Archive", 1, 1, 1) + Estimates["AWS::Events::Connection"] = NewResourceEstimate("AWS::Events::Connection", 1, 1, 1) + Estimates["AWS::Events::Endpoint"] = NewResourceEstimate("AWS::Events::Endpoint", 1, 1, 1) + Estimates["AWS::Events::EventBus"] = NewResourceEstimate("AWS::Events::EventBus", 1, 1, 1) + Estimates["AWS::Events::EventBusPolicy"] = NewResourceEstimate("AWS::Events::EventBusPolicy", 1, 1, 1) + Estimates["AWS::Events::Rule"] = NewResourceEstimate("AWS::Events::Rule", 1, 1, 1) + Estimates["AWS::Evidently::Experiment"] = NewResourceEstimate("AWS::Evidently::Experiment", 1, 1, 1) + Estimates["AWS::Evidently::Feature"] = NewResourceEstimate("AWS::Evidently::Feature", 1, 1, 1) + Estimates["AWS::Evidently::Launch"] = NewResourceEstimate("AWS::Evidently::Launch", 1, 1, 1) + Estimates["AWS::Evidently::Project"] = NewResourceEstimate("AWS::Evidently::Project", 1, 1, 1) + Estimates["AWS::Evidently::Segment"] = NewResourceEstimate("AWS::Evidently::Segment", 1, 1, 1) + Estimates["AWS::FIS::ExperimentTemplate"] = NewResourceEstimate("AWS::FIS::ExperimentTemplate", 1, 1, 1) + Estimates["AWS::FMS::NotificationChannel"] = NewResourceEstimate("AWS::FMS::NotificationChannel", 1, 1, 1) + Estimates["AWS::FMS::Policy"] = NewResourceEstimate("AWS::FMS::Policy", 1, 1, 1) + Estimates["AWS::FMS::ResourceSet"] = NewResourceEstimate("AWS::FMS::ResourceSet", 1, 1, 1) + Estimates["AWS::FSx::DataRepositoryAssociation"] = NewResourceEstimate("AWS::FSx::DataRepositoryAssociation", 1, 1, 1) + Estimates["AWS::FSx::FileSystem"] = NewResourceEstimate("AWS::FSx::FileSystem", 1, 1, 1) + Estimates["AWS::FSx::Snapshot"] = NewResourceEstimate("AWS::FSx::Snapshot", 1, 1, 1) + Estimates["AWS::FSx::StorageVirtualMachine"] = NewResourceEstimate("AWS::FSx::StorageVirtualMachine", 1, 1, 1) + Estimates["AWS::FSx::Volume"] = NewResourceEstimate("AWS::FSx::Volume", 1, 1, 1) + Estimates["AWS::FinSpace::Environment"] = NewResourceEstimate("AWS::FinSpace::Environment", 1, 1, 1) + Estimates["AWS::Forecast::Dataset"] = NewResourceEstimate("AWS::Forecast::Dataset", 1, 1, 1) + Estimates["AWS::Forecast::DatasetGroup"] = NewResourceEstimate("AWS::Forecast::DatasetGroup", 1, 1, 1) + Estimates["AWS::FraudDetector::Detector"] = NewResourceEstimate("AWS::FraudDetector::Detector", 1, 1, 1) + Estimates["AWS::FraudDetector::EntityType"] = NewResourceEstimate("AWS::FraudDetector::EntityType", 1, 1, 1) + Estimates["AWS::FraudDetector::EventType"] = NewResourceEstimate("AWS::FraudDetector::EventType", 1, 1, 1) + Estimates["AWS::FraudDetector::Label"] = NewResourceEstimate("AWS::FraudDetector::Label", 1, 1, 1) + Estimates["AWS::FraudDetector::List"] = NewResourceEstimate("AWS::FraudDetector::List", 1, 1, 1) + Estimates["AWS::FraudDetector::Outcome"] = NewResourceEstimate("AWS::FraudDetector::Outcome", 1, 1, 1) + Estimates["AWS::FraudDetector::Variable"] = NewResourceEstimate("AWS::FraudDetector::Variable", 1, 1, 1) + Estimates["AWS::GameLift::Alias"] = NewResourceEstimate("AWS::GameLift::Alias", 1, 1, 1) + Estimates["AWS::GameLift::Build"] = NewResourceEstimate("AWS::GameLift::Build", 1, 1, 1) + Estimates["AWS::GameLift::Fleet"] = NewResourceEstimate("AWS::GameLift::Fleet", 1, 1, 1) + Estimates["AWS::GameLift::GameServerGroup"] = NewResourceEstimate("AWS::GameLift::GameServerGroup", 1, 1, 1) + Estimates["AWS::GameLift::GameSessionQueue"] = NewResourceEstimate("AWS::GameLift::GameSessionQueue", 1, 1, 1) + Estimates["AWS::GameLift::Location"] = NewResourceEstimate("AWS::GameLift::Location", 1, 1, 1) + Estimates["AWS::GameLift::MatchmakingConfiguration"] = NewResourceEstimate("AWS::GameLift::MatchmakingConfiguration", 1, 1, 1) + Estimates["AWS::GameLift::MatchmakingRuleSet"] = NewResourceEstimate("AWS::GameLift::MatchmakingRuleSet", 1, 1, 1) + Estimates["AWS::GameLift::Script"] = NewResourceEstimate("AWS::GameLift::Script", 1, 1, 1) + Estimates["AWS::GlobalAccelerator::Accelerator"] = NewResourceEstimate("AWS::GlobalAccelerator::Accelerator", 1, 1, 1) + Estimates["AWS::GlobalAccelerator::EndpointGroup"] = NewResourceEstimate("AWS::GlobalAccelerator::EndpointGroup", 1, 1, 1) + Estimates["AWS::GlobalAccelerator::Listener"] = NewResourceEstimate("AWS::GlobalAccelerator::Listener", 1, 1, 1) + Estimates["AWS::Glue::Classifier"] = NewResourceEstimate("AWS::Glue::Classifier", 1, 1, 1) + Estimates["AWS::Glue::Connection"] = NewResourceEstimate("AWS::Glue::Connection", 1, 1, 1) + Estimates["AWS::Glue::Crawler"] = NewResourceEstimate("AWS::Glue::Crawler", 1, 1, 1) + Estimates["AWS::Glue::DataCatalogEncryptionSettings"] = NewResourceEstimate("AWS::Glue::DataCatalogEncryptionSettings", 1, 1, 1) + Estimates["AWS::Glue::DataQualityRuleset"] = NewResourceEstimate("AWS::Glue::DataQualityRuleset", 1, 1, 1) + Estimates["AWS::Glue::Database"] = NewResourceEstimate("AWS::Glue::Database", 1, 1, 1) + Estimates["AWS::Glue::DevEndpoint"] = NewResourceEstimate("AWS::Glue::DevEndpoint", 1, 1, 1) + Estimates["AWS::Glue::Job"] = NewResourceEstimate("AWS::Glue::Job", 1, 1, 1) + Estimates["AWS::Glue::MLTransform"] = NewResourceEstimate("AWS::Glue::MLTransform", 1, 1, 1) + Estimates["AWS::Glue::Partition"] = NewResourceEstimate("AWS::Glue::Partition", 1, 1, 1) + Estimates["AWS::Glue::Registry"] = NewResourceEstimate("AWS::Glue::Registry", 1, 1, 1) + Estimates["AWS::Glue::Schema"] = NewResourceEstimate("AWS::Glue::Schema", 1, 1, 1) + Estimates["AWS::Glue::SchemaVersion"] = NewResourceEstimate("AWS::Glue::SchemaVersion", 1, 1, 1) + Estimates["AWS::Glue::SchemaVersionMetadata"] = NewResourceEstimate("AWS::Glue::SchemaVersionMetadata", 1, 1, 1) + Estimates["AWS::Glue::SecurityConfiguration"] = NewResourceEstimate("AWS::Glue::SecurityConfiguration", 1, 1, 1) + Estimates["AWS::Glue::Table"] = NewResourceEstimate("AWS::Glue::Table", 1, 1, 1) + Estimates["AWS::Glue::Trigger"] = NewResourceEstimate("AWS::Glue::Trigger", 1, 1, 1) + Estimates["AWS::Glue::Workflow"] = NewResourceEstimate("AWS::Glue::Workflow", 1, 1, 1) + Estimates["AWS::Grafana::Workspace"] = NewResourceEstimate("AWS::Grafana::Workspace", 1, 1, 1) + Estimates["AWS::Greengrass::ConnectorDefinition"] = NewResourceEstimate("AWS::Greengrass::ConnectorDefinition", 1, 1, 1) + Estimates["AWS::Greengrass::ConnectorDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::ConnectorDefinitionVersion", 1, 1, 1) + Estimates["AWS::Greengrass::CoreDefinition"] = NewResourceEstimate("AWS::Greengrass::CoreDefinition", 1, 1, 1) + Estimates["AWS::Greengrass::CoreDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::CoreDefinitionVersion", 1, 1, 1) + Estimates["AWS::Greengrass::DeviceDefinition"] = NewResourceEstimate("AWS::Greengrass::DeviceDefinition", 1, 1, 1) + Estimates["AWS::Greengrass::DeviceDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::DeviceDefinitionVersion", 1, 1, 1) + Estimates["AWS::Greengrass::FunctionDefinition"] = NewResourceEstimate("AWS::Greengrass::FunctionDefinition", 1, 1, 1) + Estimates["AWS::Greengrass::FunctionDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::FunctionDefinitionVersion", 1, 1, 1) + Estimates["AWS::Greengrass::Group"] = NewResourceEstimate("AWS::Greengrass::Group", 1, 1, 1) + Estimates["AWS::Greengrass::GroupVersion"] = NewResourceEstimate("AWS::Greengrass::GroupVersion", 1, 1, 1) + Estimates["AWS::Greengrass::LoggerDefinition"] = NewResourceEstimate("AWS::Greengrass::LoggerDefinition", 1, 1, 1) + Estimates["AWS::Greengrass::LoggerDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::LoggerDefinitionVersion", 1, 1, 1) + Estimates["AWS::Greengrass::ResourceDefinition"] = NewResourceEstimate("AWS::Greengrass::ResourceDefinition", 1, 1, 1) + Estimates["AWS::Greengrass::ResourceDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::ResourceDefinitionVersion", 1, 1, 1) + Estimates["AWS::Greengrass::SubscriptionDefinition"] = NewResourceEstimate("AWS::Greengrass::SubscriptionDefinition", 1, 1, 1) + Estimates["AWS::Greengrass::SubscriptionDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::SubscriptionDefinitionVersion", 1, 1, 1) + Estimates["AWS::GreengrassV2::ComponentVersion"] = NewResourceEstimate("AWS::GreengrassV2::ComponentVersion", 1, 1, 1) + Estimates["AWS::GreengrassV2::Deployment"] = NewResourceEstimate("AWS::GreengrassV2::Deployment", 1, 1, 1) + Estimates["AWS::GroundStation::Config"] = NewResourceEstimate("AWS::GroundStation::Config", 1, 1, 1) + Estimates["AWS::GroundStation::DataflowEndpointGroup"] = NewResourceEstimate("AWS::GroundStation::DataflowEndpointGroup", 1, 1, 1) + Estimates["AWS::GroundStation::MissionProfile"] = NewResourceEstimate("AWS::GroundStation::MissionProfile", 1, 1, 1) + Estimates["AWS::GuardDuty::Detector"] = NewResourceEstimate("AWS::GuardDuty::Detector", 1, 1, 1) + Estimates["AWS::GuardDuty::Filter"] = NewResourceEstimate("AWS::GuardDuty::Filter", 1, 1, 1) + Estimates["AWS::GuardDuty::IPSet"] = NewResourceEstimate("AWS::GuardDuty::IPSet", 1, 1, 1) + Estimates["AWS::GuardDuty::Master"] = NewResourceEstimate("AWS::GuardDuty::Master", 1, 1, 1) + Estimates["AWS::GuardDuty::Member"] = NewResourceEstimate("AWS::GuardDuty::Member", 1, 1, 1) + Estimates["AWS::GuardDuty::ThreatIntelSet"] = NewResourceEstimate("AWS::GuardDuty::ThreatIntelSet", 1, 1, 1) + Estimates["AWS::HealthLake::FHIRDatastore"] = NewResourceEstimate("AWS::HealthLake::FHIRDatastore", 1, 1, 1) + Estimates["AWS::IAM::AccessKey"] = NewResourceEstimate("AWS::IAM::AccessKey", 1, 1, 1) + Estimates["AWS::IAM::Group"] = NewResourceEstimate("AWS::IAM::Group", 1, 1, 1) + Estimates["AWS::IAM::GroupPolicy"] = NewResourceEstimate("AWS::IAM::GroupPolicy", 1, 1, 1) + Estimates["AWS::IAM::InstanceProfile"] = NewResourceEstimate("AWS::IAM::InstanceProfile", 1, 1, 1) + Estimates["AWS::IAM::ManagedPolicy"] = NewResourceEstimate("AWS::IAM::ManagedPolicy", 1, 1, 1) + Estimates["AWS::IAM::OIDCProvider"] = NewResourceEstimate("AWS::IAM::OIDCProvider", 1, 1, 1) + Estimates["AWS::IAM::Policy"] = NewResourceEstimate("AWS::IAM::Policy", 1, 1, 1) + Estimates["AWS::IAM::Role"] = NewResourceEstimate("AWS::IAM::Role", 1, 1, 1) + Estimates["AWS::IAM::RolePolicy"] = NewResourceEstimate("AWS::IAM::RolePolicy", 1, 1, 1) + Estimates["AWS::IAM::SAMLProvider"] = NewResourceEstimate("AWS::IAM::SAMLProvider", 1, 1, 1) + Estimates["AWS::IAM::ServerCertificate"] = NewResourceEstimate("AWS::IAM::ServerCertificate", 1, 1, 1) + Estimates["AWS::IAM::ServiceLinkedRole"] = NewResourceEstimate("AWS::IAM::ServiceLinkedRole", 1, 1, 1) + Estimates["AWS::IAM::User"] = NewResourceEstimate("AWS::IAM::User", 1, 1, 1) + Estimates["AWS::IAM::UserPolicy"] = NewResourceEstimate("AWS::IAM::UserPolicy", 1, 1, 1) + Estimates["AWS::IAM::UserToGroupAddition"] = NewResourceEstimate("AWS::IAM::UserToGroupAddition", 1, 1, 1) + Estimates["AWS::IAM::VirtualMFADevice"] = NewResourceEstimate("AWS::IAM::VirtualMFADevice", 1, 1, 1) + Estimates["AWS::IVS::Channel"] = NewResourceEstimate("AWS::IVS::Channel", 1, 1, 1) + Estimates["AWS::IVS::PlaybackKeyPair"] = NewResourceEstimate("AWS::IVS::PlaybackKeyPair", 1, 1, 1) + Estimates["AWS::IVS::RecordingConfiguration"] = NewResourceEstimate("AWS::IVS::RecordingConfiguration", 1, 1, 1) + Estimates["AWS::IVS::StreamKey"] = NewResourceEstimate("AWS::IVS::StreamKey", 1, 1, 1) + Estimates["AWS::IVSChat::LoggingConfiguration"] = NewResourceEstimate("AWS::IVSChat::LoggingConfiguration", 1, 1, 1) + Estimates["AWS::IVSChat::Room"] = NewResourceEstimate("AWS::IVSChat::Room", 1, 1, 1) + Estimates["AWS::IdentityStore::Group"] = NewResourceEstimate("AWS::IdentityStore::Group", 1, 1, 1) + Estimates["AWS::IdentityStore::GroupMembership"] = NewResourceEstimate("AWS::IdentityStore::GroupMembership", 1, 1, 1) + Estimates["AWS::ImageBuilder::Component"] = NewResourceEstimate("AWS::ImageBuilder::Component", 1, 1, 1) + Estimates["AWS::ImageBuilder::ContainerRecipe"] = NewResourceEstimate("AWS::ImageBuilder::ContainerRecipe", 1, 1, 1) + Estimates["AWS::ImageBuilder::DistributionConfiguration"] = NewResourceEstimate("AWS::ImageBuilder::DistributionConfiguration", 1, 1, 1) + Estimates["AWS::ImageBuilder::Image"] = NewResourceEstimate("AWS::ImageBuilder::Image", 1, 1, 1) + Estimates["AWS::ImageBuilder::ImagePipeline"] = NewResourceEstimate("AWS::ImageBuilder::ImagePipeline", 1, 1, 1) + Estimates["AWS::ImageBuilder::ImageRecipe"] = NewResourceEstimate("AWS::ImageBuilder::ImageRecipe", 1, 1, 1) + Estimates["AWS::ImageBuilder::InfrastructureConfiguration"] = NewResourceEstimate("AWS::ImageBuilder::InfrastructureConfiguration", 1, 1, 1) + Estimates["AWS::Inspector::AssessmentTarget"] = NewResourceEstimate("AWS::Inspector::AssessmentTarget", 1, 1, 1) + Estimates["AWS::Inspector::AssessmentTemplate"] = NewResourceEstimate("AWS::Inspector::AssessmentTemplate", 1, 1, 1) + Estimates["AWS::Inspector::ResourceGroup"] = NewResourceEstimate("AWS::Inspector::ResourceGroup", 1, 1, 1) + Estimates["AWS::InspectorV2::Filter"] = NewResourceEstimate("AWS::InspectorV2::Filter", 1, 1, 1) + Estimates["AWS::InternetMonitor::Monitor"] = NewResourceEstimate("AWS::InternetMonitor::Monitor", 1, 1, 1) + Estimates["AWS::IoT1Click::Device"] = NewResourceEstimate("AWS::IoT1Click::Device", 1, 1, 1) + Estimates["AWS::IoT1Click::Placement"] = NewResourceEstimate("AWS::IoT1Click::Placement", 1, 1, 1) + Estimates["AWS::IoT1Click::Project"] = NewResourceEstimate("AWS::IoT1Click::Project", 1, 1, 1) + Estimates["AWS::IoT::AccountAuditConfiguration"] = NewResourceEstimate("AWS::IoT::AccountAuditConfiguration", 1, 1, 1) + Estimates["AWS::IoT::Authorizer"] = NewResourceEstimate("AWS::IoT::Authorizer", 1, 1, 1) + Estimates["AWS::IoT::BillingGroup"] = NewResourceEstimate("AWS::IoT::BillingGroup", 1, 1, 1) + Estimates["AWS::IoT::CACertificate"] = NewResourceEstimate("AWS::IoT::CACertificate", 1, 1, 1) + Estimates["AWS::IoT::Certificate"] = NewResourceEstimate("AWS::IoT::Certificate", 1, 1, 1) + Estimates["AWS::IoT::CustomMetric"] = NewResourceEstimate("AWS::IoT::CustomMetric", 1, 1, 1) + Estimates["AWS::IoT::Dimension"] = NewResourceEstimate("AWS::IoT::Dimension", 1, 1, 1) + Estimates["AWS::IoT::DomainConfiguration"] = NewResourceEstimate("AWS::IoT::DomainConfiguration", 1, 1, 1) + Estimates["AWS::IoT::FleetMetric"] = NewResourceEstimate("AWS::IoT::FleetMetric", 1, 1, 1) + Estimates["AWS::IoT::JobTemplate"] = NewResourceEstimate("AWS::IoT::JobTemplate", 1, 1, 1) + Estimates["AWS::IoT::Logging"] = NewResourceEstimate("AWS::IoT::Logging", 1, 1, 1) + Estimates["AWS::IoT::MitigationAction"] = NewResourceEstimate("AWS::IoT::MitigationAction", 1, 1, 1) + Estimates["AWS::IoT::Policy"] = NewResourceEstimate("AWS::IoT::Policy", 1, 1, 1) + Estimates["AWS::IoT::PolicyPrincipalAttachment"] = NewResourceEstimate("AWS::IoT::PolicyPrincipalAttachment", 1, 1, 1) + Estimates["AWS::IoT::ProvisioningTemplate"] = NewResourceEstimate("AWS::IoT::ProvisioningTemplate", 1, 1, 1) + Estimates["AWS::IoT::ResourceSpecificLogging"] = NewResourceEstimate("AWS::IoT::ResourceSpecificLogging", 1, 1, 1) + Estimates["AWS::IoT::RoleAlias"] = NewResourceEstimate("AWS::IoT::RoleAlias", 1, 1, 1) + Estimates["AWS::IoT::ScheduledAudit"] = NewResourceEstimate("AWS::IoT::ScheduledAudit", 1, 1, 1) + Estimates["AWS::IoT::SecurityProfile"] = NewResourceEstimate("AWS::IoT::SecurityProfile", 1, 1, 1) + Estimates["AWS::IoT::Thing"] = NewResourceEstimate("AWS::IoT::Thing", 1, 1, 1) + Estimates["AWS::IoT::ThingGroup"] = NewResourceEstimate("AWS::IoT::ThingGroup", 1, 1, 1) + Estimates["AWS::IoT::ThingPrincipalAttachment"] = NewResourceEstimate("AWS::IoT::ThingPrincipalAttachment", 1, 1, 1) + Estimates["AWS::IoT::ThingType"] = NewResourceEstimate("AWS::IoT::ThingType", 1, 1, 1) + Estimates["AWS::IoT::TopicRule"] = NewResourceEstimate("AWS::IoT::TopicRule", 1, 1, 1) + Estimates["AWS::IoT::TopicRuleDestination"] = NewResourceEstimate("AWS::IoT::TopicRuleDestination", 1, 1, 1) + Estimates["AWS::IoTAnalytics::Channel"] = NewResourceEstimate("AWS::IoTAnalytics::Channel", 1, 1, 1) + Estimates["AWS::IoTAnalytics::Dataset"] = NewResourceEstimate("AWS::IoTAnalytics::Dataset", 1, 1, 1) + Estimates["AWS::IoTAnalytics::Datastore"] = NewResourceEstimate("AWS::IoTAnalytics::Datastore", 1, 1, 1) + Estimates["AWS::IoTAnalytics::Pipeline"] = NewResourceEstimate("AWS::IoTAnalytics::Pipeline", 1, 1, 1) + Estimates["AWS::IoTCoreDeviceAdvisor::SuiteDefinition"] = NewResourceEstimate("AWS::IoTCoreDeviceAdvisor::SuiteDefinition", 1, 1, 1) + Estimates["AWS::IoTEvents::AlarmModel"] = NewResourceEstimate("AWS::IoTEvents::AlarmModel", 1, 1, 1) + Estimates["AWS::IoTEvents::DetectorModel"] = NewResourceEstimate("AWS::IoTEvents::DetectorModel", 1, 1, 1) + Estimates["AWS::IoTEvents::Input"] = NewResourceEstimate("AWS::IoTEvents::Input", 1, 1, 1) + Estimates["AWS::IoTFleetHub::Application"] = NewResourceEstimate("AWS::IoTFleetHub::Application", 1, 1, 1) + Estimates["AWS::IoTFleetWise::Campaign"] = NewResourceEstimate("AWS::IoTFleetWise::Campaign", 1, 1, 1) + Estimates["AWS::IoTFleetWise::DecoderManifest"] = NewResourceEstimate("AWS::IoTFleetWise::DecoderManifest", 1, 1, 1) + Estimates["AWS::IoTFleetWise::Fleet"] = NewResourceEstimate("AWS::IoTFleetWise::Fleet", 1, 1, 1) + Estimates["AWS::IoTFleetWise::ModelManifest"] = NewResourceEstimate("AWS::IoTFleetWise::ModelManifest", 1, 1, 1) + Estimates["AWS::IoTFleetWise::SignalCatalog"] = NewResourceEstimate("AWS::IoTFleetWise::SignalCatalog", 1, 1, 1) + Estimates["AWS::IoTFleetWise::Vehicle"] = NewResourceEstimate("AWS::IoTFleetWise::Vehicle", 1, 1, 1) + Estimates["AWS::IoTSiteWise::AccessPolicy"] = NewResourceEstimate("AWS::IoTSiteWise::AccessPolicy", 1, 1, 1) + Estimates["AWS::IoTSiteWise::Asset"] = NewResourceEstimate("AWS::IoTSiteWise::Asset", 1, 1, 1) + Estimates["AWS::IoTSiteWise::AssetModel"] = NewResourceEstimate("AWS::IoTSiteWise::AssetModel", 1, 1, 1) + Estimates["AWS::IoTSiteWise::Dashboard"] = NewResourceEstimate("AWS::IoTSiteWise::Dashboard", 1, 1, 1) + Estimates["AWS::IoTSiteWise::Gateway"] = NewResourceEstimate("AWS::IoTSiteWise::Gateway", 1, 1, 1) + Estimates["AWS::IoTSiteWise::Portal"] = NewResourceEstimate("AWS::IoTSiteWise::Portal", 1, 1, 1) + Estimates["AWS::IoTSiteWise::Project"] = NewResourceEstimate("AWS::IoTSiteWise::Project", 1, 1, 1) + Estimates["AWS::IoTThingsGraph::FlowTemplate"] = NewResourceEstimate("AWS::IoTThingsGraph::FlowTemplate", 1, 1, 1) + Estimates["AWS::IoTTwinMaker::ComponentType"] = NewResourceEstimate("AWS::IoTTwinMaker::ComponentType", 1, 1, 1) + Estimates["AWS::IoTTwinMaker::Entity"] = NewResourceEstimate("AWS::IoTTwinMaker::Entity", 1, 1, 1) + Estimates["AWS::IoTTwinMaker::Scene"] = NewResourceEstimate("AWS::IoTTwinMaker::Scene", 1, 1, 1) + Estimates["AWS::IoTTwinMaker::SyncJob"] = NewResourceEstimate("AWS::IoTTwinMaker::SyncJob", 1, 1, 1) + Estimates["AWS::IoTTwinMaker::Workspace"] = NewResourceEstimate("AWS::IoTTwinMaker::Workspace", 1, 1, 1) + Estimates["AWS::IoTWireless::Destination"] = NewResourceEstimate("AWS::IoTWireless::Destination", 1, 1, 1) + Estimates["AWS::IoTWireless::DeviceProfile"] = NewResourceEstimate("AWS::IoTWireless::DeviceProfile", 1, 1, 1) + Estimates["AWS::IoTWireless::FuotaTask"] = NewResourceEstimate("AWS::IoTWireless::FuotaTask", 1, 1, 1) + Estimates["AWS::IoTWireless::MulticastGroup"] = NewResourceEstimate("AWS::IoTWireless::MulticastGroup", 1, 1, 1) + Estimates["AWS::IoTWireless::NetworkAnalyzerConfiguration"] = NewResourceEstimate("AWS::IoTWireless::NetworkAnalyzerConfiguration", 1, 1, 1) + Estimates["AWS::IoTWireless::PartnerAccount"] = NewResourceEstimate("AWS::IoTWireless::PartnerAccount", 1, 1, 1) + Estimates["AWS::IoTWireless::ServiceProfile"] = NewResourceEstimate("AWS::IoTWireless::ServiceProfile", 1, 1, 1) + Estimates["AWS::IoTWireless::TaskDefinition"] = NewResourceEstimate("AWS::IoTWireless::TaskDefinition", 1, 1, 1) + Estimates["AWS::IoTWireless::WirelessDevice"] = NewResourceEstimate("AWS::IoTWireless::WirelessDevice", 1, 1, 1) + Estimates["AWS::IoTWireless::WirelessDeviceImportTask"] = NewResourceEstimate("AWS::IoTWireless::WirelessDeviceImportTask", 1, 1, 1) + Estimates["AWS::IoTWireless::WirelessGateway"] = NewResourceEstimate("AWS::IoTWireless::WirelessGateway", 1, 1, 1) + Estimates["AWS::KMS::Alias"] = NewResourceEstimate("AWS::KMS::Alias", 1, 1, 1) + Estimates["AWS::KMS::Key"] = NewResourceEstimate("AWS::KMS::Key", 1, 1, 1) + Estimates["AWS::KMS::ReplicaKey"] = NewResourceEstimate("AWS::KMS::ReplicaKey", 1, 1, 1) + Estimates["AWS::KafkaConnect::Connector"] = NewResourceEstimate("AWS::KafkaConnect::Connector", 1, 1, 1) + Estimates["AWS::Kendra::DataSource"] = NewResourceEstimate("AWS::Kendra::DataSource", 1, 1, 1) + Estimates["AWS::Kendra::Faq"] = NewResourceEstimate("AWS::Kendra::Faq", 1, 1, 1) + Estimates["AWS::Kendra::Index"] = NewResourceEstimate("AWS::Kendra::Index", 1, 1, 1) + Estimates["AWS::KendraRanking::ExecutionPlan"] = NewResourceEstimate("AWS::KendraRanking::ExecutionPlan", 1, 1, 1) + Estimates["AWS::Kinesis::Stream"] = NewResourceEstimate("AWS::Kinesis::Stream", 1, 1, 1) + Estimates["AWS::Kinesis::StreamConsumer"] = NewResourceEstimate("AWS::Kinesis::StreamConsumer", 1, 1, 1) + Estimates["AWS::KinesisAnalytics::Application"] = NewResourceEstimate("AWS::KinesisAnalytics::Application", 1, 1, 1) + Estimates["AWS::KinesisAnalytics::ApplicationOutput"] = NewResourceEstimate("AWS::KinesisAnalytics::ApplicationOutput", 1, 1, 1) + Estimates["AWS::KinesisAnalytics::ApplicationReferenceDataSource"] = NewResourceEstimate("AWS::KinesisAnalytics::ApplicationReferenceDataSource", 1, 1, 1) + Estimates["AWS::KinesisAnalyticsV2::Application"] = NewResourceEstimate("AWS::KinesisAnalyticsV2::Application", 1, 1, 1) + Estimates["AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption"] = NewResourceEstimate("AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption", 1, 1, 1) + Estimates["AWS::KinesisAnalyticsV2::ApplicationOutput"] = NewResourceEstimate("AWS::KinesisAnalyticsV2::ApplicationOutput", 1, 1, 1) + Estimates["AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource"] = NewResourceEstimate("AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource", 1, 1, 1) + Estimates["AWS::KinesisFirehose::DeliveryStream"] = NewResourceEstimate("AWS::KinesisFirehose::DeliveryStream", 1, 1, 1) + Estimates["AWS::KinesisVideo::SignalingChannel"] = NewResourceEstimate("AWS::KinesisVideo::SignalingChannel", 1, 1, 1) + Estimates["AWS::KinesisVideo::Stream"] = NewResourceEstimate("AWS::KinesisVideo::Stream", 1, 1, 1) + Estimates["AWS::LakeFormation::DataCellsFilter"] = NewResourceEstimate("AWS::LakeFormation::DataCellsFilter", 1, 1, 1) + Estimates["AWS::LakeFormation::DataLakeSettings"] = NewResourceEstimate("AWS::LakeFormation::DataLakeSettings", 1, 1, 1) + Estimates["AWS::LakeFormation::Permissions"] = NewResourceEstimate("AWS::LakeFormation::Permissions", 1, 1, 1) + Estimates["AWS::LakeFormation::PrincipalPermissions"] = NewResourceEstimate("AWS::LakeFormation::PrincipalPermissions", 1, 1, 1) + Estimates["AWS::LakeFormation::Resource"] = NewResourceEstimate("AWS::LakeFormation::Resource", 1, 1, 1) + Estimates["AWS::LakeFormation::Tag"] = NewResourceEstimate("AWS::LakeFormation::Tag", 1, 1, 1) + Estimates["AWS::LakeFormation::TagAssociation"] = NewResourceEstimate("AWS::LakeFormation::TagAssociation", 1, 1, 1) + Estimates["AWS::Lambda::Alias"] = NewResourceEstimate("AWS::Lambda::Alias", 1, 1, 1) + Estimates["AWS::Lambda::CodeSigningConfig"] = NewResourceEstimate("AWS::Lambda::CodeSigningConfig", 1, 1, 1) + Estimates["AWS::Lambda::EventInvokeConfig"] = NewResourceEstimate("AWS::Lambda::EventInvokeConfig", 1, 1, 1) + Estimates["AWS::Lambda::EventSourceMapping"] = NewResourceEstimate("AWS::Lambda::EventSourceMapping", 1, 1, 1) + Estimates["AWS::Lambda::Function"] = NewResourceEstimate("AWS::Lambda::Function", 1, 1, 1) + Estimates["AWS::Lambda::LayerVersion"] = NewResourceEstimate("AWS::Lambda::LayerVersion", 1, 1, 1) + Estimates["AWS::Lambda::LayerVersionPermission"] = NewResourceEstimate("AWS::Lambda::LayerVersionPermission", 1, 1, 1) + Estimates["AWS::Lambda::Permission"] = NewResourceEstimate("AWS::Lambda::Permission", 1, 1, 1) + Estimates["AWS::Lambda::Url"] = NewResourceEstimate("AWS::Lambda::Url", 1, 1, 1) + Estimates["AWS::Lambda::Version"] = NewResourceEstimate("AWS::Lambda::Version", 1, 1, 1) + Estimates["AWS::Lex::Bot"] = NewResourceEstimate("AWS::Lex::Bot", 1, 1, 1) + Estimates["AWS::Lex::BotAlias"] = NewResourceEstimate("AWS::Lex::BotAlias", 1, 1, 1) + Estimates["AWS::Lex::BotVersion"] = NewResourceEstimate("AWS::Lex::BotVersion", 1, 1, 1) + Estimates["AWS::Lex::ResourcePolicy"] = NewResourceEstimate("AWS::Lex::ResourcePolicy", 1, 1, 1) + Estimates["AWS::LicenseManager::Grant"] = NewResourceEstimate("AWS::LicenseManager::Grant", 1, 1, 1) + Estimates["AWS::LicenseManager::License"] = NewResourceEstimate("AWS::LicenseManager::License", 1, 1, 1) + Estimates["AWS::Lightsail::Alarm"] = NewResourceEstimate("AWS::Lightsail::Alarm", 1, 1, 1) + Estimates["AWS::Lightsail::Bucket"] = NewResourceEstimate("AWS::Lightsail::Bucket", 1, 1, 1) + Estimates["AWS::Lightsail::Certificate"] = NewResourceEstimate("AWS::Lightsail::Certificate", 1, 1, 1) + Estimates["AWS::Lightsail::Container"] = NewResourceEstimate("AWS::Lightsail::Container", 1, 1, 1) + Estimates["AWS::Lightsail::Database"] = NewResourceEstimate("AWS::Lightsail::Database", 1, 1, 1) + Estimates["AWS::Lightsail::Disk"] = NewResourceEstimate("AWS::Lightsail::Disk", 1, 1, 1) + Estimates["AWS::Lightsail::Distribution"] = NewResourceEstimate("AWS::Lightsail::Distribution", 1, 1, 1) + Estimates["AWS::Lightsail::Instance"] = NewResourceEstimate("AWS::Lightsail::Instance", 1, 1, 1) + Estimates["AWS::Lightsail::LoadBalancer"] = NewResourceEstimate("AWS::Lightsail::LoadBalancer", 1, 1, 1) + Estimates["AWS::Lightsail::LoadBalancerTlsCertificate"] = NewResourceEstimate("AWS::Lightsail::LoadBalancerTlsCertificate", 1, 1, 1) + Estimates["AWS::Lightsail::StaticIp"] = NewResourceEstimate("AWS::Lightsail::StaticIp", 1, 1, 1) + Estimates["AWS::Location::GeofenceCollection"] = NewResourceEstimate("AWS::Location::GeofenceCollection", 1, 1, 1) + Estimates["AWS::Location::Map"] = NewResourceEstimate("AWS::Location::Map", 1, 1, 1) + Estimates["AWS::Location::PlaceIndex"] = NewResourceEstimate("AWS::Location::PlaceIndex", 1, 1, 1) + Estimates["AWS::Location::RouteCalculator"] = NewResourceEstimate("AWS::Location::RouteCalculator", 1, 1, 1) + Estimates["AWS::Location::Tracker"] = NewResourceEstimate("AWS::Location::Tracker", 1, 1, 1) + Estimates["AWS::Location::TrackerConsumer"] = NewResourceEstimate("AWS::Location::TrackerConsumer", 1, 1, 1) + Estimates["AWS::Logs::AccountPolicy"] = NewResourceEstimate("AWS::Logs::AccountPolicy", 1, 1, 1) + Estimates["AWS::Logs::Destination"] = NewResourceEstimate("AWS::Logs::Destination", 1, 1, 1) + Estimates["AWS::Logs::LogGroup"] = NewResourceEstimate("AWS::Logs::LogGroup", 1, 1, 1) + Estimates["AWS::Logs::LogStream"] = NewResourceEstimate("AWS::Logs::LogStream", 1, 1, 1) + Estimates["AWS::Logs::LogStream"] = NewResourceEstimate("AWS::Logs::LogStream", 1, 1, 1) + Estimates["AWS::Logs::MetricFilter"] = NewResourceEstimate("AWS::Logs::MetricFilter", 1, 1, 1) + Estimates["AWS::Logs::QueryDefinition"] = NewResourceEstimate("AWS::Logs::QueryDefinition", 1, 1, 1) + Estimates["AWS::Logs::ResourcePolicy"] = NewResourceEstimate("AWS::Logs::ResourcePolicy", 1, 1, 1) + Estimates["AWS::Logs::SubscriptionFilter"] = NewResourceEstimate("AWS::Logs::SubscriptionFilter", 1, 1, 1) + Estimates["AWS::LookoutEquipment::InferenceScheduler"] = NewResourceEstimate("AWS::LookoutEquipment::InferenceScheduler", 1, 1, 1) + Estimates["AWS::LookoutMetrics::Alert"] = NewResourceEstimate("AWS::LookoutMetrics::Alert", 1, 1, 1) + Estimates["AWS::LookoutMetrics::AnomalyDetector"] = NewResourceEstimate("AWS::LookoutMetrics::AnomalyDetector", 1, 1, 1) + Estimates["AWS::LookoutVision::Project"] = NewResourceEstimate("AWS::LookoutVision::Project", 1, 1, 1) + Estimates["AWS::M2::Application"] = NewResourceEstimate("AWS::M2::Application", 1, 1, 1) + Estimates["AWS::M2::Environment"] = NewResourceEstimate("AWS::M2::Environment", 1, 1, 1) + Estimates["AWS::MSK::BatchScramSecret"] = NewResourceEstimate("AWS::MSK::BatchScramSecret", 1, 1, 1) + Estimates["AWS::MSK::Cluster"] = NewResourceEstimate("AWS::MSK::Cluster", 1, 1, 1) + Estimates["AWS::MSK::ClusterPolicy"] = NewResourceEstimate("AWS::MSK::ClusterPolicy", 1, 1, 1) + Estimates["AWS::MSK::Configuration"] = NewResourceEstimate("AWS::MSK::Configuration", 1, 1, 1) + Estimates["AWS::MSK::ServerlessCluster"] = NewResourceEstimate("AWS::MSK::ServerlessCluster", 1, 1, 1) + Estimates["AWS::MSK::VpcConnection"] = NewResourceEstimate("AWS::MSK::VpcConnection", 1, 1, 1) + Estimates["AWS::MWAA::Environment"] = NewResourceEstimate("AWS::MWAA::Environment", 1, 1, 1) + Estimates["AWS::Macie::AllowList"] = NewResourceEstimate("AWS::Macie::AllowList", 1, 1, 1) + Estimates["AWS::Macie::CustomDataIdentifier"] = NewResourceEstimate("AWS::Macie::CustomDataIdentifier", 1, 1, 1) + Estimates["AWS::Macie::FindingsFilter"] = NewResourceEstimate("AWS::Macie::FindingsFilter", 1, 1, 1) + Estimates["AWS::Macie::Session"] = NewResourceEstimate("AWS::Macie::Session", 1, 1, 1) + Estimates["AWS::ManagedBlockchain::Accessor"] = NewResourceEstimate("AWS::ManagedBlockchain::Accessor", 1, 1, 1) + Estimates["AWS::ManagedBlockchain::Member"] = NewResourceEstimate("AWS::ManagedBlockchain::Member", 1, 1, 1) + Estimates["AWS::ManagedBlockchain::Node"] = NewResourceEstimate("AWS::ManagedBlockchain::Node", 1, 1, 1) + Estimates["AWS::MediaConnect::Bridge"] = NewResourceEstimate("AWS::MediaConnect::Bridge", 1, 1, 1) + Estimates["AWS::MediaConnect::BridgeOutput"] = NewResourceEstimate("AWS::MediaConnect::BridgeOutput", 1, 1, 1) + Estimates["AWS::MediaConnect::BridgeSource"] = NewResourceEstimate("AWS::MediaConnect::BridgeSource", 1, 1, 1) + Estimates["AWS::MediaConnect::Flow"] = NewResourceEstimate("AWS::MediaConnect::Flow", 1, 1, 1) + Estimates["AWS::MediaConnect::FlowEntitlement"] = NewResourceEstimate("AWS::MediaConnect::FlowEntitlement", 1, 1, 1) + Estimates["AWS::MediaConnect::FlowOutput"] = NewResourceEstimate("AWS::MediaConnect::FlowOutput", 1, 1, 1) + Estimates["AWS::MediaConnect::FlowSource"] = NewResourceEstimate("AWS::MediaConnect::FlowSource", 1, 1, 1) + Estimates["AWS::MediaConnect::FlowVpcInterface"] = NewResourceEstimate("AWS::MediaConnect::FlowVpcInterface", 1, 1, 1) + Estimates["AWS::MediaConnect::Gateway"] = NewResourceEstimate("AWS::MediaConnect::Gateway", 1, 1, 1) + Estimates["AWS::MediaConvert::JobTemplate"] = NewResourceEstimate("AWS::MediaConvert::JobTemplate", 1, 1, 1) + Estimates["AWS::MediaConvert::Preset"] = NewResourceEstimate("AWS::MediaConvert::Preset", 1, 1, 1) + Estimates["AWS::MediaConvert::Queue"] = NewResourceEstimate("AWS::MediaConvert::Queue", 1, 1, 1) + Estimates["AWS::MediaLive::Channel"] = NewResourceEstimate("AWS::MediaLive::Channel", 1, 1, 1) + Estimates["AWS::MediaLive::Input"] = NewResourceEstimate("AWS::MediaLive::Input", 1, 1, 1) + Estimates["AWS::MediaLive::InputSecurityGroup"] = NewResourceEstimate("AWS::MediaLive::InputSecurityGroup", 1, 1, 1) + Estimates["AWS::MediaPackage::Asset"] = NewResourceEstimate("AWS::MediaPackage::Asset", 1, 1, 1) + Estimates["AWS::MediaPackage::Channel"] = NewResourceEstimate("AWS::MediaPackage::Channel", 1, 1, 1) + Estimates["AWS::MediaPackage::OriginEndpoint"] = NewResourceEstimate("AWS::MediaPackage::OriginEndpoint", 1, 1, 1) + Estimates["AWS::MediaPackage::PackagingConfiguration"] = NewResourceEstimate("AWS::MediaPackage::PackagingConfiguration", 1, 1, 1) + Estimates["AWS::MediaPackage::PackagingGroup"] = NewResourceEstimate("AWS::MediaPackage::PackagingGroup", 1, 1, 1) + Estimates["AWS::MediaStore::Container"] = NewResourceEstimate("AWS::MediaStore::Container", 1, 1, 1) + Estimates["AWS::MediaTailor::Channel"] = NewResourceEstimate("AWS::MediaTailor::Channel", 1, 1, 1) + Estimates["AWS::MediaTailor::ChannelPolicy"] = NewResourceEstimate("AWS::MediaTailor::ChannelPolicy", 1, 1, 1) + Estimates["AWS::MediaTailor::LiveSource"] = NewResourceEstimate("AWS::MediaTailor::LiveSource", 1, 1, 1) + Estimates["AWS::MediaTailor::PlaybackConfiguration"] = NewResourceEstimate("AWS::MediaTailor::PlaybackConfiguration", 1, 1, 1) + Estimates["AWS::MediaTailor::SourceLocation"] = NewResourceEstimate("AWS::MediaTailor::SourceLocation", 1, 1, 1) + Estimates["AWS::MediaTailor::VodSource"] = NewResourceEstimate("AWS::MediaTailor::VodSource", 1, 1, 1) + Estimates["AWS::MemoryDB::ACL"] = NewResourceEstimate("AWS::MemoryDB::ACL", 1, 1, 1) + Estimates["AWS::MemoryDB::Cluster"] = NewResourceEstimate("AWS::MemoryDB::Cluster", 1, 1, 1) + Estimates["AWS::MemoryDB::ParameterGroup"] = NewResourceEstimate("AWS::MemoryDB::ParameterGroup", 1, 1, 1) + Estimates["AWS::MemoryDB::SubnetGroup"] = NewResourceEstimate("AWS::MemoryDB::SubnetGroup", 1, 1, 1) + Estimates["AWS::MemoryDB::User"] = NewResourceEstimate("AWS::MemoryDB::User", 1, 1, 1) + Estimates["AWS::Neptune::DBCluster"] = NewResourceEstimate("AWS::Neptune::DBCluster", 1, 1, 1) + Estimates["AWS::Neptune::DBClusterParameterGroup"] = NewResourceEstimate("AWS::Neptune::DBClusterParameterGroup", 1, 1, 1) + Estimates["AWS::Neptune::DBInstance"] = NewResourceEstimate("AWS::Neptune::DBInstance", 1, 1, 1) + Estimates["AWS::Neptune::DBParameterGroup"] = NewResourceEstimate("AWS::Neptune::DBParameterGroup", 1, 1, 1) + Estimates["AWS::Neptune::DBSubnetGroup"] = NewResourceEstimate("AWS::Neptune::DBSubnetGroup", 1, 1, 1) + Estimates["AWS::NetworkFirewall::Firewall"] = NewResourceEstimate("AWS::NetworkFirewall::Firewall", 1, 1, 1) + Estimates["AWS::NetworkFirewall::FirewallPolicy"] = NewResourceEstimate("AWS::NetworkFirewall::FirewallPolicy", 1, 1, 1) + Estimates["AWS::NetworkFirewall::LoggingConfiguration"] = NewResourceEstimate("AWS::NetworkFirewall::LoggingConfiguration", 1, 1, 1) + Estimates["AWS::NetworkFirewall::RuleGroup"] = NewResourceEstimate("AWS::NetworkFirewall::RuleGroup", 1, 1, 1) + Estimates["AWS::NetworkManager::ConnectAttachment"] = NewResourceEstimate("AWS::NetworkManager::ConnectAttachment", 1, 1, 1) + Estimates["AWS::NetworkManager::ConnectPeer"] = NewResourceEstimate("AWS::NetworkManager::ConnectPeer", 1, 1, 1) + Estimates["AWS::NetworkManager::CoreNetwork"] = NewResourceEstimate("AWS::NetworkManager::CoreNetwork", 1, 1, 1) + Estimates["AWS::NetworkManager::CustomerGatewayAssociation"] = NewResourceEstimate("AWS::NetworkManager::CustomerGatewayAssociation", 1, 1, 1) + Estimates["AWS::NetworkManager::Device"] = NewResourceEstimate("AWS::NetworkManager::Device", 1, 1, 1) + Estimates["AWS::NetworkManager::GlobalNetwork"] = NewResourceEstimate("AWS::NetworkManager::GlobalNetwork", 1, 1, 1) + Estimates["AWS::NetworkManager::Link"] = NewResourceEstimate("AWS::NetworkManager::Link", 1, 1, 1) + Estimates["AWS::NetworkManager::LinkAssociation"] = NewResourceEstimate("AWS::NetworkManager::LinkAssociation", 1, 1, 1) + Estimates["AWS::NetworkManager::Site"] = NewResourceEstimate("AWS::NetworkManager::Site", 1, 1, 1) + Estimates["AWS::NetworkManager::SiteToSiteVpnAttachment"] = NewResourceEstimate("AWS::NetworkManager::SiteToSiteVpnAttachment", 1, 1, 1) + Estimates["AWS::NetworkManager::TransitGatewayPeering"] = NewResourceEstimate("AWS::NetworkManager::TransitGatewayPeering", 1, 1, 1) + Estimates["AWS::NetworkManager::TransitGatewayRegistration"] = NewResourceEstimate("AWS::NetworkManager::TransitGatewayRegistration", 1, 1, 1) + Estimates["AWS::NetworkManager::TransitGatewayRouteTableAttachment"] = NewResourceEstimate("AWS::NetworkManager::TransitGatewayRouteTableAttachment", 1, 1, 1) + Estimates["AWS::NetworkManager::VpcAttachment"] = NewResourceEstimate("AWS::NetworkManager::VpcAttachment", 1, 1, 1) + Estimates["AWS::NimbleStudio::LaunchProfile"] = NewResourceEstimate("AWS::NimbleStudio::LaunchProfile", 1, 1, 1) + Estimates["AWS::NimbleStudio::StreamingImage"] = NewResourceEstimate("AWS::NimbleStudio::StreamingImage", 1, 1, 1) + Estimates["AWS::NimbleStudio::Studio"] = NewResourceEstimate("AWS::NimbleStudio::Studio", 1, 1, 1) + Estimates["AWS::NimbleStudio::StudioComponent"] = NewResourceEstimate("AWS::NimbleStudio::StudioComponent", 1, 1, 1) + Estimates["AWS::OSIS::Pipeline"] = NewResourceEstimate("AWS::OSIS::Pipeline", 1, 1, 1) + Estimates["AWS::Oam::Link"] = NewResourceEstimate("AWS::Oam::Link", 1, 1, 1) + Estimates["AWS::Oam::Sink"] = NewResourceEstimate("AWS::Oam::Sink", 1, 1, 1) + Estimates["AWS::Omics::AnnotationStore"] = NewResourceEstimate("AWS::Omics::AnnotationStore", 1, 1, 1) + Estimates["AWS::Omics::ReferenceStore"] = NewResourceEstimate("AWS::Omics::ReferenceStore", 1, 1, 1) + Estimates["AWS::Omics::RunGroup"] = NewResourceEstimate("AWS::Omics::RunGroup", 1, 1, 1) + Estimates["AWS::Omics::SequenceStore"] = NewResourceEstimate("AWS::Omics::SequenceStore", 1, 1, 1) + Estimates["AWS::Omics::VariantStore"] = NewResourceEstimate("AWS::Omics::VariantStore", 1, 1, 1) + Estimates["AWS::Omics::Workflow"] = NewResourceEstimate("AWS::Omics::Workflow", 1, 1, 1) + Estimates["AWS::OpenSearchServerless::AccessPolicy"] = NewResourceEstimate("AWS::OpenSearchServerless::AccessPolicy", 1, 1, 1) + Estimates["AWS::OpenSearchServerless::Collection"] = NewResourceEstimate("AWS::OpenSearchServerless::Collection", 1, 1, 1) + Estimates["AWS::OpenSearchServerless::SecurityConfig"] = NewResourceEstimate("AWS::OpenSearchServerless::SecurityConfig", 1, 1, 1) + Estimates["AWS::OpenSearchServerless::SecurityPolicy"] = NewResourceEstimate("AWS::OpenSearchServerless::SecurityPolicy", 1, 1, 1) + Estimates["AWS::OpenSearchServerless::VpcEndpoint"] = NewResourceEstimate("AWS::OpenSearchServerless::VpcEndpoint", 1, 1, 1) + Estimates["AWS::OpenSearchService::Domain"] = NewResourceEstimate("AWS::OpenSearchService::Domain", 1, 1, 1) + Estimates["AWS::OpsWorks::App"] = NewResourceEstimate("AWS::OpsWorks::App", 1, 1, 1) + Estimates["AWS::OpsWorks::ElasticLoadBalancerAttachment"] = NewResourceEstimate("AWS::OpsWorks::ElasticLoadBalancerAttachment", 1, 1, 1) + Estimates["AWS::OpsWorks::Instance"] = NewResourceEstimate("AWS::OpsWorks::Instance", 1, 1, 1) + Estimates["AWS::OpsWorks::Layer"] = NewResourceEstimate("AWS::OpsWorks::Layer", 1, 1, 1) + Estimates["AWS::OpsWorks::Stack"] = NewResourceEstimate("AWS::OpsWorks::Stack", 1, 1, 1) + Estimates["AWS::OpsWorks::UserProfile"] = NewResourceEstimate("AWS::OpsWorks::UserProfile", 1, 1, 1) + Estimates["AWS::OpsWorks::Volume"] = NewResourceEstimate("AWS::OpsWorks::Volume", 1, 1, 1) + Estimates["AWS::OpsWorksCM::Server"] = NewResourceEstimate("AWS::OpsWorksCM::Server", 1, 1, 1) + Estimates["AWS::Organizations::Account"] = NewResourceEstimate("AWS::Organizations::Account", 1, 1, 1) + Estimates["AWS::Organizations::Organization"] = NewResourceEstimate("AWS::Organizations::Organization", 1, 1, 1) + Estimates["AWS::Organizations::OrganizationalUnit"] = NewResourceEstimate("AWS::Organizations::OrganizationalUnit", 1, 1, 1) + Estimates["AWS::Organizations::Policy"] = NewResourceEstimate("AWS::Organizations::Policy", 1, 1, 1) + Estimates["AWS::Organizations::ResourcePolicy"] = NewResourceEstimate("AWS::Organizations::ResourcePolicy", 1, 1, 1) + Estimates["AWS::PCAConnectorAD::Connector"] = NewResourceEstimate("AWS::PCAConnectorAD::Connector", 1, 1, 1) + Estimates["AWS::PCAConnectorAD::DirectoryRegistration"] = NewResourceEstimate("AWS::PCAConnectorAD::DirectoryRegistration", 1, 1, 1) + Estimates["AWS::PCAConnectorAD::ServicePrincipalName"] = NewResourceEstimate("AWS::PCAConnectorAD::ServicePrincipalName", 1, 1, 1) + Estimates["AWS::PCAConnectorAD::Template"] = NewResourceEstimate("AWS::PCAConnectorAD::Template", 1, 1, 1) + Estimates["AWS::PCAConnectorAD::TemplateGroupAccessControlEntry"] = NewResourceEstimate("AWS::PCAConnectorAD::TemplateGroupAccessControlEntry", 1, 1, 1) + Estimates["AWS::Panorama::ApplicationInstance"] = NewResourceEstimate("AWS::Panorama::ApplicationInstance", 1, 1, 1) + Estimates["AWS::Panorama::Package"] = NewResourceEstimate("AWS::Panorama::Package", 1, 1, 1) + Estimates["AWS::Panorama::PackageVersion"] = NewResourceEstimate("AWS::Panorama::PackageVersion", 1, 1, 1) + Estimates["AWS::Personalize::Dataset"] = NewResourceEstimate("AWS::Personalize::Dataset", 1, 1, 1) + Estimates["AWS::Personalize::DatasetGroup"] = NewResourceEstimate("AWS::Personalize::DatasetGroup", 1, 1, 1) + Estimates["AWS::Personalize::Schema"] = NewResourceEstimate("AWS::Personalize::Schema", 1, 1, 1) + Estimates["AWS::Personalize::Solution"] = NewResourceEstimate("AWS::Personalize::Solution", 1, 1, 1) + Estimates["AWS::Pinpoint::ADMChannel"] = NewResourceEstimate("AWS::Pinpoint::ADMChannel", 1, 1, 1) + Estimates["AWS::Pinpoint::APNSChannel"] = NewResourceEstimate("AWS::Pinpoint::APNSChannel", 1, 1, 1) + Estimates["AWS::Pinpoint::APNSSandboxChannel"] = NewResourceEstimate("AWS::Pinpoint::APNSSandboxChannel", 1, 1, 1) + Estimates["AWS::Pinpoint::APNSVoipChannel"] = NewResourceEstimate("AWS::Pinpoint::APNSVoipChannel", 1, 1, 1) + Estimates["AWS::Pinpoint::APNSVoipSandboxChannel"] = NewResourceEstimate("AWS::Pinpoint::APNSVoipSandboxChannel", 1, 1, 1) + Estimates["AWS::Pinpoint::App"] = NewResourceEstimate("AWS::Pinpoint::App", 1, 1, 1) + Estimates["AWS::Pinpoint::ApplicationSettings"] = NewResourceEstimate("AWS::Pinpoint::ApplicationSettings", 1, 1, 1) + Estimates["AWS::Pinpoint::BaiduChannel"] = NewResourceEstimate("AWS::Pinpoint::BaiduChannel", 1, 1, 1) + Estimates["AWS::Pinpoint::Campaign"] = NewResourceEstimate("AWS::Pinpoint::Campaign", 1, 1, 1) + Estimates["AWS::Pinpoint::EmailChannel"] = NewResourceEstimate("AWS::Pinpoint::EmailChannel", 1, 1, 1) + Estimates["AWS::Pinpoint::EmailTemplate"] = NewResourceEstimate("AWS::Pinpoint::EmailTemplate", 1, 1, 1) + Estimates["AWS::Pinpoint::EventStream"] = NewResourceEstimate("AWS::Pinpoint::EventStream", 1, 1, 1) + Estimates["AWS::Pinpoint::GCMChannel"] = NewResourceEstimate("AWS::Pinpoint::GCMChannel", 1, 1, 1) + Estimates["AWS::Pinpoint::InAppTemplate"] = NewResourceEstimate("AWS::Pinpoint::InAppTemplate", 1, 1, 1) + Estimates["AWS::Pinpoint::PushTemplate"] = NewResourceEstimate("AWS::Pinpoint::PushTemplate", 1, 1, 1) + Estimates["AWS::Pinpoint::SMSChannel"] = NewResourceEstimate("AWS::Pinpoint::SMSChannel", 1, 1, 1) + Estimates["AWS::Pinpoint::Segment"] = NewResourceEstimate("AWS::Pinpoint::Segment", 1, 1, 1) + Estimates["AWS::Pinpoint::SmsTemplate"] = NewResourceEstimate("AWS::Pinpoint::SmsTemplate", 1, 1, 1) + Estimates["AWS::Pinpoint::VoiceChannel"] = NewResourceEstimate("AWS::Pinpoint::VoiceChannel", 1, 1, 1) + Estimates["AWS::PinpointEmail::ConfigurationSet"] = NewResourceEstimate("AWS::PinpointEmail::ConfigurationSet", 1, 1, 1) + Estimates["AWS::PinpointEmail::ConfigurationSetEventDestination"] = NewResourceEstimate("AWS::PinpointEmail::ConfigurationSetEventDestination", 1, 1, 1) + Estimates["AWS::PinpointEmail::DedicatedIpPool"] = NewResourceEstimate("AWS::PinpointEmail::DedicatedIpPool", 1, 1, 1) + Estimates["AWS::PinpointEmail::Identity"] = NewResourceEstimate("AWS::PinpointEmail::Identity", 1, 1, 1) + Estimates["AWS::Pipes::Pipe"] = NewResourceEstimate("AWS::Pipes::Pipe", 1, 1, 1) + Estimates["AWS::Proton::EnvironmentAccountConnection"] = NewResourceEstimate("AWS::Proton::EnvironmentAccountConnection", 1, 1, 1) + Estimates["AWS::Proton::EnvironmentTemplate"] = NewResourceEstimate("AWS::Proton::EnvironmentTemplate", 1, 1, 1) + Estimates["AWS::Proton::ServiceTemplate"] = NewResourceEstimate("AWS::Proton::ServiceTemplate", 1, 1, 1) + Estimates["AWS::QLDB::Ledger"] = NewResourceEstimate("AWS::QLDB::Ledger", 1, 1, 1) + Estimates["AWS::QLDB::Stream"] = NewResourceEstimate("AWS::QLDB::Stream", 1, 1, 1) + Estimates["AWS::QuickSight::Analysis"] = NewResourceEstimate("AWS::QuickSight::Analysis", 1, 1, 1) + Estimates["AWS::QuickSight::Dashboard"] = NewResourceEstimate("AWS::QuickSight::Dashboard", 1, 1, 1) + Estimates["AWS::QuickSight::DataSet"] = NewResourceEstimate("AWS::QuickSight::DataSet", 1, 1, 1) + Estimates["AWS::QuickSight::DataSource"] = NewResourceEstimate("AWS::QuickSight::DataSource", 1, 1, 1) + Estimates["AWS::QuickSight::RefreshSchedule"] = NewResourceEstimate("AWS::QuickSight::RefreshSchedule", 1, 1, 1) + Estimates["AWS::QuickSight::Template"] = NewResourceEstimate("AWS::QuickSight::Template", 1, 1, 1) + Estimates["AWS::QuickSight::Theme"] = NewResourceEstimate("AWS::QuickSight::Theme", 1, 1, 1) + Estimates["AWS::QuickSight::Topic"] = NewResourceEstimate("AWS::QuickSight::Topic", 1, 1, 1) + Estimates["AWS::QuickSight::VPCConnection"] = NewResourceEstimate("AWS::QuickSight::VPCConnection", 1, 1, 1) + Estimates["AWS::RAM::Permission"] = NewResourceEstimate("AWS::RAM::Permission", 1, 1, 1) + Estimates["AWS::RAM::ResourceShare"] = NewResourceEstimate("AWS::RAM::ResourceShare", 1, 1, 1) + Estimates["AWS::RDS::CustomDBEngineVersion"] = NewResourceEstimate("AWS::RDS::CustomDBEngineVersion", 1, 1, 1) + Estimates["AWS::RDS::DBCluster"] = NewResourceEstimate("AWS::RDS::DBCluster", 1, 1, 1) + Estimates["AWS::RDS::DBClusterParameterGroup"] = NewResourceEstimate("AWS::RDS::DBClusterParameterGroup", 1, 1, 1) + Estimates["AWS::RDS::DBInstance"] = NewResourceEstimate("AWS::RDS::DBInstance", 1, 1, 1) + Estimates["AWS::RDS::DBParameterGroup"] = NewResourceEstimate("AWS::RDS::DBParameterGroup", 1, 1, 1) + Estimates["AWS::RDS::DBProxy"] = NewResourceEstimate("AWS::RDS::DBProxy", 1, 1, 1) + Estimates["AWS::RDS::DBProxyEndpoint"] = NewResourceEstimate("AWS::RDS::DBProxyEndpoint", 1, 1, 1) + Estimates["AWS::RDS::DBProxyTargetGroup"] = NewResourceEstimate("AWS::RDS::DBProxyTargetGroup", 1, 1, 1) + Estimates["AWS::RDS::DBSecurityGroup"] = NewResourceEstimate("AWS::RDS::DBSecurityGroup", 1, 1, 1) + Estimates["AWS::RDS::DBSecurityGroupIngress"] = NewResourceEstimate("AWS::RDS::DBSecurityGroupIngress", 1, 1, 1) + Estimates["AWS::RDS::DBSubnetGroup"] = NewResourceEstimate("AWS::RDS::DBSubnetGroup", 1, 1, 1) + Estimates["AWS::RDS::EventSubscription"] = NewResourceEstimate("AWS::RDS::EventSubscription", 1, 1, 1) + Estimates["AWS::RDS::GlobalCluster"] = NewResourceEstimate("AWS::RDS::GlobalCluster", 1, 1, 1) + Estimates["AWS::RDS::OptionGroup"] = NewResourceEstimate("AWS::RDS::OptionGroup", 1, 1, 1) + Estimates["AWS::RUM::AppMonitor"] = NewResourceEstimate("AWS::RUM::AppMonitor", 1, 1, 1) + Estimates["AWS::Redshift::Cluster"] = NewResourceEstimate("AWS::Redshift::Cluster", 1, 1, 1) + Estimates["AWS::Redshift::ClusterParameterGroup"] = NewResourceEstimate("AWS::Redshift::ClusterParameterGroup", 1, 1, 1) + Estimates["AWS::Redshift::ClusterSecurityGroup"] = NewResourceEstimate("AWS::Redshift::ClusterSecurityGroup", 1, 1, 1) + Estimates["AWS::Redshift::ClusterSecurityGroupIngress"] = NewResourceEstimate("AWS::Redshift::ClusterSecurityGroupIngress", 1, 1, 1) + Estimates["AWS::Redshift::ClusterSubnetGroup"] = NewResourceEstimate("AWS::Redshift::ClusterSubnetGroup", 1, 1, 1) + Estimates["AWS::Redshift::EndpointAccess"] = NewResourceEstimate("AWS::Redshift::EndpointAccess", 1, 1, 1) + Estimates["AWS::Redshift::EndpointAuthorization"] = NewResourceEstimate("AWS::Redshift::EndpointAuthorization", 1, 1, 1) + Estimates["AWS::Redshift::EventSubscription"] = NewResourceEstimate("AWS::Redshift::EventSubscription", 1, 1, 1) + Estimates["AWS::Redshift::ScheduledAction"] = NewResourceEstimate("AWS::Redshift::ScheduledAction", 1, 1, 1) + Estimates["AWS::RedshiftServerless::Namespace"] = NewResourceEstimate("AWS::RedshiftServerless::Namespace", 1, 1, 1) + Estimates["AWS::RedshiftServerless::Workgroup"] = NewResourceEstimate("AWS::RedshiftServerless::Workgroup", 1, 1, 1) + Estimates["AWS::RefactorSpaces::Application"] = NewResourceEstimate("AWS::RefactorSpaces::Application", 1, 1, 1) + Estimates["AWS::RefactorSpaces::Environment"] = NewResourceEstimate("AWS::RefactorSpaces::Environment", 1, 1, 1) + Estimates["AWS::RefactorSpaces::Route"] = NewResourceEstimate("AWS::RefactorSpaces::Route", 1, 1, 1) + Estimates["AWS::RefactorSpaces::Service"] = NewResourceEstimate("AWS::RefactorSpaces::Service", 1, 1, 1) + Estimates["AWS::Rekognition::Collection"] = NewResourceEstimate("AWS::Rekognition::Collection", 1, 1, 1) + Estimates["AWS::Rekognition::Project"] = NewResourceEstimate("AWS::Rekognition::Project", 1, 1, 1) + Estimates["AWS::Rekognition::StreamProcessor"] = NewResourceEstimate("AWS::Rekognition::StreamProcessor", 1, 1, 1) + Estimates["AWS::ResilienceHub::App"] = NewResourceEstimate("AWS::ResilienceHub::App", 1, 1, 1) + Estimates["AWS::ResilienceHub::ResiliencyPolicy"] = NewResourceEstimate("AWS::ResilienceHub::ResiliencyPolicy", 1, 1, 1) + Estimates["AWS::ResourceExplorer2::DefaultViewAssociation"] = NewResourceEstimate("AWS::ResourceExplorer2::DefaultViewAssociation", 1, 1, 1) + Estimates["AWS::ResourceExplorer2::Index"] = NewResourceEstimate("AWS::ResourceExplorer2::Index", 1, 1, 1) + Estimates["AWS::ResourceExplorer2::View"] = NewResourceEstimate("AWS::ResourceExplorer2::View", 1, 1, 1) + Estimates["AWS::ResourceGroups::Group"] = NewResourceEstimate("AWS::ResourceGroups::Group", 1, 1, 1) + Estimates["AWS::RoboMaker::Fleet"] = NewResourceEstimate("AWS::RoboMaker::Fleet", 1, 1, 1) + Estimates["AWS::RoboMaker::Robot"] = NewResourceEstimate("AWS::RoboMaker::Robot", 1, 1, 1) + Estimates["AWS::RoboMaker::RobotApplication"] = NewResourceEstimate("AWS::RoboMaker::RobotApplication", 1, 1, 1) + Estimates["AWS::RoboMaker::RobotApplicationVersion"] = NewResourceEstimate("AWS::RoboMaker::RobotApplicationVersion", 1, 1, 1) + Estimates["AWS::RoboMaker::SimulationApplication"] = NewResourceEstimate("AWS::RoboMaker::SimulationApplication", 1, 1, 1) + Estimates["AWS::RoboMaker::SimulationApplicationVersion"] = NewResourceEstimate("AWS::RoboMaker::SimulationApplicationVersion", 1, 1, 1) + Estimates["AWS::RolesAnywhere::CRL"] = NewResourceEstimate("AWS::RolesAnywhere::CRL", 1, 1, 1) + Estimates["AWS::RolesAnywhere::Profile"] = NewResourceEstimate("AWS::RolesAnywhere::Profile", 1, 1, 1) + Estimates["AWS::RolesAnywhere::TrustAnchor"] = NewResourceEstimate("AWS::RolesAnywhere::TrustAnchor", 1, 1, 1) + Estimates["AWS::Route53::CidrCollection"] = NewResourceEstimate("AWS::Route53::CidrCollection", 1, 1, 1) + Estimates["AWS::Route53::DNSSEC"] = NewResourceEstimate("AWS::Route53::DNSSEC", 1, 1, 1) + Estimates["AWS::Route53::HealthCheck"] = NewResourceEstimate("AWS::Route53::HealthCheck", 1, 1, 1) + Estimates["AWS::Route53::HostedZone"] = NewResourceEstimate("AWS::Route53::HostedZone", 1, 1, 1) + Estimates["AWS::Route53::KeySigningKey"] = NewResourceEstimate("AWS::Route53::KeySigningKey", 1, 1, 1) + Estimates["AWS::Route53::RecordSet"] = NewResourceEstimate("AWS::Route53::RecordSet", 1, 1, 1) + Estimates["AWS::Route53::RecordSetGroup"] = NewResourceEstimate("AWS::Route53::RecordSetGroup", 1, 1, 1) + Estimates["AWS::Route53RecoveryControl::Cluster"] = NewResourceEstimate("AWS::Route53RecoveryControl::Cluster", 1, 1, 1) + Estimates["AWS::Route53RecoveryControl::ControlPanel"] = NewResourceEstimate("AWS::Route53RecoveryControl::ControlPanel", 1, 1, 1) + Estimates["AWS::Route53RecoveryControl::RoutingControl"] = NewResourceEstimate("AWS::Route53RecoveryControl::RoutingControl", 1, 1, 1) + Estimates["AWS::Route53RecoveryControl::SafetyRule"] = NewResourceEstimate("AWS::Route53RecoveryControl::SafetyRule", 1, 1, 1) + Estimates["AWS::Route53RecoveryReadiness::Cell"] = NewResourceEstimate("AWS::Route53RecoveryReadiness::Cell", 1, 1, 1) + Estimates["AWS::Route53RecoveryReadiness::ReadinessCheck"] = NewResourceEstimate("AWS::Route53RecoveryReadiness::ReadinessCheck", 1, 1, 1) + Estimates["AWS::Route53RecoveryReadiness::RecoveryGroup"] = NewResourceEstimate("AWS::Route53RecoveryReadiness::RecoveryGroup", 1, 1, 1) + Estimates["AWS::Route53RecoveryReadiness::ResourceSet"] = NewResourceEstimate("AWS::Route53RecoveryReadiness::ResourceSet", 1, 1, 1) + Estimates["AWS::Route53Resolver::FirewallDomainList"] = NewResourceEstimate("AWS::Route53Resolver::FirewallDomainList", 1, 1, 1) + Estimates["AWS::Route53Resolver::FirewallRuleGroup"] = NewResourceEstimate("AWS::Route53Resolver::FirewallRuleGroup", 1, 1, 1) + Estimates["AWS::Route53Resolver::FirewallRuleGroupAssociation"] = NewResourceEstimate("AWS::Route53Resolver::FirewallRuleGroupAssociation", 1, 1, 1) + Estimates["AWS::Route53Resolver::OutpostResolver"] = NewResourceEstimate("AWS::Route53Resolver::OutpostResolver", 1, 1, 1) + Estimates["AWS::Route53Resolver::ResolverConfig"] = NewResourceEstimate("AWS::Route53Resolver::ResolverConfig", 1, 1, 1) + Estimates["AWS::Route53Resolver::ResolverDNSSECConfig"] = NewResourceEstimate("AWS::Route53Resolver::ResolverDNSSECConfig", 1, 1, 1) + Estimates["AWS::Route53Resolver::ResolverEndpoint"] = NewResourceEstimate("AWS::Route53Resolver::ResolverEndpoint", 1, 1, 1) + Estimates["AWS::Route53Resolver::ResolverQueryLoggingConfig"] = NewResourceEstimate("AWS::Route53Resolver::ResolverQueryLoggingConfig", 1, 1, 1) + Estimates["AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation"] = NewResourceEstimate("AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation", 1, 1, 1) + Estimates["AWS::Route53Resolver::ResolverRule"] = NewResourceEstimate("AWS::Route53Resolver::ResolverRule", 1, 1, 1) + Estimates["AWS::Route53Resolver::ResolverRuleAssociation"] = NewResourceEstimate("AWS::Route53Resolver::ResolverRuleAssociation", 1, 1, 1) + Estimates["AWS::S3::AccessPoint"] = NewResourceEstimate("AWS::S3::AccessPoint", 1, 1, 1) + Estimates["AWS::S3::Bucket"] = NewResourceEstimate("AWS::S3::Bucket", 1, 1, 1) + Estimates["AWS::S3::BucketPolicy"] = NewResourceEstimate("AWS::S3::BucketPolicy", 1, 1, 1) + Estimates["AWS::S3::MultiRegionAccessPoint"] = NewResourceEstimate("AWS::S3::MultiRegionAccessPoint", 1, 1, 1) + Estimates["AWS::S3::MultiRegionAccessPointPolicy"] = NewResourceEstimate("AWS::S3::MultiRegionAccessPointPolicy", 1, 1, 1) + Estimates["AWS::S3::StorageLens"] = NewResourceEstimate("AWS::S3::StorageLens", 1, 1, 1) + Estimates["AWS::S3ObjectLambda::AccessPoint"] = NewResourceEstimate("AWS::S3ObjectLambda::AccessPoint", 1, 1, 1) + Estimates["AWS::S3ObjectLambda::AccessPointPolicy"] = NewResourceEstimate("AWS::S3ObjectLambda::AccessPointPolicy", 1, 1, 1) + Estimates["AWS::S3Outposts::AccessPoint"] = NewResourceEstimate("AWS::S3Outposts::AccessPoint", 1, 1, 1) + Estimates["AWS::S3Outposts::Bucket"] = NewResourceEstimate("AWS::S3Outposts::Bucket", 1, 1, 1) + Estimates["AWS::S3Outposts::BucketPolicy"] = NewResourceEstimate("AWS::S3Outposts::BucketPolicy", 1, 1, 1) + Estimates["AWS::S3Outposts::Endpoint"] = NewResourceEstimate("AWS::S3Outposts::Endpoint", 1, 1, 1) + Estimates["AWS::SDB::Domain"] = NewResourceEstimate("AWS::SDB::Domain", 1, 1, 1) + Estimates["AWS::SES::ConfigurationSet"] = NewResourceEstimate("AWS::SES::ConfigurationSet", 1, 1, 1) + Estimates["AWS::SES::ConfigurationSetEventDestination"] = NewResourceEstimate("AWS::SES::ConfigurationSetEventDestination", 1, 1, 1) + Estimates["AWS::SES::ContactList"] = NewResourceEstimate("AWS::SES::ContactList", 1, 1, 1) + Estimates["AWS::SES::DedicatedIpPool"] = NewResourceEstimate("AWS::SES::DedicatedIpPool", 1, 1, 1) + Estimates["AWS::SES::EmailIdentity"] = NewResourceEstimate("AWS::SES::EmailIdentity", 1, 1, 1) + Estimates["AWS::SES::ReceiptFilter"] = NewResourceEstimate("AWS::SES::ReceiptFilter", 1, 1, 1) + Estimates["AWS::SES::ReceiptRule"] = NewResourceEstimate("AWS::SES::ReceiptRule", 1, 1, 1) + Estimates["AWS::SES::ReceiptRuleSet"] = NewResourceEstimate("AWS::SES::ReceiptRuleSet", 1, 1, 1) + Estimates["AWS::SES::Template"] = NewResourceEstimate("AWS::SES::Template", 1, 1, 1) + Estimates["AWS::SES::VdmAttributes"] = NewResourceEstimate("AWS::SES::VdmAttributes", 1, 1, 1) + Estimates["AWS::SNS::Subscription"] = NewResourceEstimate("AWS::SNS::Subscription", 1, 1, 1) + Estimates["AWS::SNS::Topic"] = NewResourceEstimate("AWS::SNS::Topic", 1, 1, 1) + Estimates["AWS::SNS::TopicInlinePolicy"] = NewResourceEstimate("AWS::SNS::TopicInlinePolicy", 1, 1, 1) + Estimates["AWS::SNS::TopicPolicy"] = NewResourceEstimate("AWS::SNS::TopicPolicy", 1, 1, 1) + Estimates["AWS::SQS::Queue"] = NewResourceEstimate("AWS::SQS::Queue", 1, 1, 1) + Estimates["AWS::SQS::QueueInlinePolicy"] = NewResourceEstimate("AWS::SQS::QueueInlinePolicy", 1, 1, 1) + Estimates["AWS::SQS::QueuePolicy"] = NewResourceEstimate("AWS::SQS::QueuePolicy", 1, 1, 1) + Estimates["AWS::SSM::Association"] = NewResourceEstimate("AWS::SSM::Association", 1, 1, 1) + Estimates["AWS::SSM::Document"] = NewResourceEstimate("AWS::SSM::Document", 1, 1, 1) + Estimates["AWS::SSM::MaintenanceWindow"] = NewResourceEstimate("AWS::SSM::MaintenanceWindow", 1, 1, 1) + Estimates["AWS::SSM::MaintenanceWindowTarget"] = NewResourceEstimate("AWS::SSM::MaintenanceWindowTarget", 1, 1, 1) + Estimates["AWS::SSM::MaintenanceWindowTask"] = NewResourceEstimate("AWS::SSM::MaintenanceWindowTask", 1, 1, 1) + Estimates["AWS::SSM::Parameter"] = NewResourceEstimate("AWS::SSM::Parameter", 1, 1, 1) + Estimates["AWS::SSM::PatchBaseline"] = NewResourceEstimate("AWS::SSM::PatchBaseline", 1, 1, 1) + Estimates["AWS::SSM::ResourceDataSync"] = NewResourceEstimate("AWS::SSM::ResourceDataSync", 1, 1, 1) + Estimates["AWS::SSM::ResourcePolicy"] = NewResourceEstimate("AWS::SSM::ResourcePolicy", 1, 1, 1) + Estimates["AWS::SSMContacts::Contact"] = NewResourceEstimate("AWS::SSMContacts::Contact", 1, 1, 1) + Estimates["AWS::SSMContacts::ContactChannel"] = NewResourceEstimate("AWS::SSMContacts::ContactChannel", 1, 1, 1) + Estimates["AWS::SSMContacts::Plan"] = NewResourceEstimate("AWS::SSMContacts::Plan", 1, 1, 1) + Estimates["AWS::SSMContacts::Rotation"] = NewResourceEstimate("AWS::SSMContacts::Rotation", 1, 1, 1) + Estimates["AWS::SSMIncidents::ReplicationSet"] = NewResourceEstimate("AWS::SSMIncidents::ReplicationSet", 1, 1, 1) + Estimates["AWS::SSMIncidents::ResponsePlan"] = NewResourceEstimate("AWS::SSMIncidents::ResponsePlan", 1, 1, 1) + Estimates["AWS::SSO::Assignment"] = NewResourceEstimate("AWS::SSO::Assignment", 1, 1, 1) + Estimates["AWS::SSO::InstanceAccessControlAttributeConfiguration"] = NewResourceEstimate("AWS::SSO::InstanceAccessControlAttributeConfiguration", 1, 1, 1) + Estimates["AWS::SSO::PermissionSet"] = NewResourceEstimate("AWS::SSO::PermissionSet", 1, 1, 1) + Estimates["AWS::SageMaker::App"] = NewResourceEstimate("AWS::SageMaker::App", 1, 1, 1) + Estimates["AWS::SageMaker::AppImageConfig"] = NewResourceEstimate("AWS::SageMaker::AppImageConfig", 1, 1, 1) + Estimates["AWS::SageMaker::CodeRepository"] = NewResourceEstimate("AWS::SageMaker::CodeRepository", 1, 1, 1) + Estimates["AWS::SageMaker::DataQualityJobDefinition"] = NewResourceEstimate("AWS::SageMaker::DataQualityJobDefinition", 1, 1, 1) + Estimates["AWS::SageMaker::Device"] = NewResourceEstimate("AWS::SageMaker::Device", 1, 1, 1) + Estimates["AWS::SageMaker::DeviceFleet"] = NewResourceEstimate("AWS::SageMaker::DeviceFleet", 1, 1, 1) + Estimates["AWS::SageMaker::Domain"] = NewResourceEstimate("AWS::SageMaker::Domain", 1, 1, 1) + Estimates["AWS::SageMaker::Endpoint"] = NewResourceEstimate("AWS::SageMaker::Endpoint", 1, 1, 1) + Estimates["AWS::SageMaker::EndpointConfig"] = NewResourceEstimate("AWS::SageMaker::EndpointConfig", 1, 1, 1) + Estimates["AWS::SageMaker::FeatureGroup"] = NewResourceEstimate("AWS::SageMaker::FeatureGroup", 1, 1, 1) + Estimates["AWS::SageMaker::Image"] = NewResourceEstimate("AWS::SageMaker::Image", 1, 1, 1) + Estimates["AWS::SageMaker::ImageVersion"] = NewResourceEstimate("AWS::SageMaker::ImageVersion", 1, 1, 1) + Estimates["AWS::SageMaker::InferenceExperiment"] = NewResourceEstimate("AWS::SageMaker::InferenceExperiment", 1, 1, 1) + Estimates["AWS::SageMaker::Model"] = NewResourceEstimate("AWS::SageMaker::Model", 1, 1, 1) + Estimates["AWS::SageMaker::ModelBiasJobDefinition"] = NewResourceEstimate("AWS::SageMaker::ModelBiasJobDefinition", 1, 1, 1) + Estimates["AWS::SageMaker::ModelCard"] = NewResourceEstimate("AWS::SageMaker::ModelCard", 1, 1, 1) + Estimates["AWS::SageMaker::ModelExplainabilityJobDefinition"] = NewResourceEstimate("AWS::SageMaker::ModelExplainabilityJobDefinition", 1, 1, 1) + Estimates["AWS::SageMaker::ModelPackage"] = NewResourceEstimate("AWS::SageMaker::ModelPackage", 1, 1, 1) + Estimates["AWS::SageMaker::ModelPackageGroup"] = NewResourceEstimate("AWS::SageMaker::ModelPackageGroup", 1, 1, 1) + Estimates["AWS::SageMaker::ModelQualityJobDefinition"] = NewResourceEstimate("AWS::SageMaker::ModelQualityJobDefinition", 1, 1, 1) + Estimates["AWS::SageMaker::MonitoringSchedule"] = NewResourceEstimate("AWS::SageMaker::MonitoringSchedule", 1, 1, 1) + Estimates["AWS::SageMaker::NotebookInstance"] = NewResourceEstimate("AWS::SageMaker::NotebookInstance", 1, 1, 1) + Estimates["AWS::SageMaker::NotebookInstanceLifecycleConfig"] = NewResourceEstimate("AWS::SageMaker::NotebookInstanceLifecycleConfig", 1, 1, 1) + Estimates["AWS::SageMaker::Pipeline"] = NewResourceEstimate("AWS::SageMaker::Pipeline", 1, 1, 1) + Estimates["AWS::SageMaker::Project"] = NewResourceEstimate("AWS::SageMaker::Project", 1, 1, 1) + Estimates["AWS::SageMaker::Space"] = NewResourceEstimate("AWS::SageMaker::Space", 1, 1, 1) + Estimates["AWS::SageMaker::UserProfile"] = NewResourceEstimate("AWS::SageMaker::UserProfile", 1, 1, 1) + Estimates["AWS::SageMaker::Workteam"] = NewResourceEstimate("AWS::SageMaker::Workteam", 1, 1, 1) + Estimates["AWS::Scheduler::Schedule"] = NewResourceEstimate("AWS::Scheduler::Schedule", 1, 1, 1) + Estimates["AWS::Scheduler::ScheduleGroup"] = NewResourceEstimate("AWS::Scheduler::ScheduleGroup", 1, 1, 1) + Estimates["AWS::SecretsManager::ResourcePolicy"] = NewResourceEstimate("AWS::SecretsManager::ResourcePolicy", 1, 1, 1) + Estimates["AWS::SecretsManager::RotationSchedule"] = NewResourceEstimate("AWS::SecretsManager::RotationSchedule", 1, 1, 1) + Estimates["AWS::SecretsManager::Secret"] = NewResourceEstimate("AWS::SecretsManager::Secret", 1, 1, 1) + Estimates["AWS::SecretsManager::SecretTargetAttachment"] = NewResourceEstimate("AWS::SecretsManager::SecretTargetAttachment", 1, 1, 1) + Estimates["AWS::SecurityHub::AutomationRule"] = NewResourceEstimate("AWS::SecurityHub::AutomationRule", 1, 1, 1) + Estimates["AWS::SecurityHub::Hub"] = NewResourceEstimate("AWS::SecurityHub::Hub", 1, 1, 1) + Estimates["AWS::SecurityHub::Standard"] = NewResourceEstimate("AWS::SecurityHub::Standard", 1, 1, 1) + Estimates["AWS::ServiceCatalog::AcceptedPortfolioShare"] = NewResourceEstimate("AWS::ServiceCatalog::AcceptedPortfolioShare", 1, 1, 1) + Estimates["AWS::ServiceCatalog::CloudFormationProduct"] = NewResourceEstimate("AWS::ServiceCatalog::CloudFormationProduct", 1, 1, 1) + Estimates["AWS::ServiceCatalog::CloudFormationProvisionedProduct"] = NewResourceEstimate("AWS::ServiceCatalog::CloudFormationProvisionedProduct", 1, 1, 1) + Estimates["AWS::ServiceCatalog::LaunchNotificationConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::LaunchNotificationConstraint", 1, 1, 1) + Estimates["AWS::ServiceCatalog::LaunchRoleConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::LaunchRoleConstraint", 1, 1, 1) + Estimates["AWS::ServiceCatalog::LaunchTemplateConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::LaunchTemplateConstraint", 1, 1, 1) + Estimates["AWS::ServiceCatalog::Portfolio"] = NewResourceEstimate("AWS::ServiceCatalog::Portfolio", 1, 1, 1) + Estimates["AWS::ServiceCatalog::PortfolioPrincipalAssociation"] = NewResourceEstimate("AWS::ServiceCatalog::PortfolioPrincipalAssociation", 1, 1, 1) + Estimates["AWS::ServiceCatalog::PortfolioProductAssociation"] = NewResourceEstimate("AWS::ServiceCatalog::PortfolioProductAssociation", 1, 1, 1) + Estimates["AWS::ServiceCatalog::PortfolioShare"] = NewResourceEstimate("AWS::ServiceCatalog::PortfolioShare", 1, 1, 1) + Estimates["AWS::ServiceCatalog::ResourceUpdateConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::ResourceUpdateConstraint", 1, 1, 1) + Estimates["AWS::ServiceCatalog::ServiceAction"] = NewResourceEstimate("AWS::ServiceCatalog::ServiceAction", 1, 1, 1) + Estimates["AWS::ServiceCatalog::ServiceActionAssociation"] = NewResourceEstimate("AWS::ServiceCatalog::ServiceActionAssociation", 1, 1, 1) + Estimates["AWS::ServiceCatalog::StackSetConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::StackSetConstraint", 1, 1, 1) + Estimates["AWS::ServiceCatalog::TagOption"] = NewResourceEstimate("AWS::ServiceCatalog::TagOption", 1, 1, 1) + Estimates["AWS::ServiceCatalog::TagOptionAssociation"] = NewResourceEstimate("AWS::ServiceCatalog::TagOptionAssociation", 1, 1, 1) + Estimates["AWS::ServiceCatalogAppRegistry::Application"] = NewResourceEstimate("AWS::ServiceCatalogAppRegistry::Application", 1, 1, 1) + Estimates["AWS::ServiceCatalogAppRegistry::AttributeGroup"] = NewResourceEstimate("AWS::ServiceCatalogAppRegistry::AttributeGroup", 1, 1, 1) + Estimates["AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation"] = NewResourceEstimate("AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation", 1, 1, 1) + Estimates["AWS::ServiceCatalogAppRegistry::ResourceAssociation"] = NewResourceEstimate("AWS::ServiceCatalogAppRegistry::ResourceAssociation", 1, 1, 1) + Estimates["AWS::ServiceDiscovery::HttpNamespace"] = NewResourceEstimate("AWS::ServiceDiscovery::HttpNamespace", 1, 1, 1) + Estimates["AWS::ServiceDiscovery::Instance"] = NewResourceEstimate("AWS::ServiceDiscovery::Instance", 1, 1, 1) + Estimates["AWS::ServiceDiscovery::PrivateDnsNamespace"] = NewResourceEstimate("AWS::ServiceDiscovery::PrivateDnsNamespace", 1, 1, 1) + Estimates["AWS::ServiceDiscovery::PublicDnsNamespace"] = NewResourceEstimate("AWS::ServiceDiscovery::PublicDnsNamespace", 1, 1, 1) + Estimates["AWS::ServiceDiscovery::Service"] = NewResourceEstimate("AWS::ServiceDiscovery::Service", 1, 1, 1) + Estimates["AWS::Shield::DRTAccess"] = NewResourceEstimate("AWS::Shield::DRTAccess", 1, 1, 1) + Estimates["AWS::Shield::ProactiveEngagement"] = NewResourceEstimate("AWS::Shield::ProactiveEngagement", 1, 1, 1) + Estimates["AWS::Shield::Protection"] = NewResourceEstimate("AWS::Shield::Protection", 1, 1, 1) + Estimates["AWS::Shield::ProtectionGroup"] = NewResourceEstimate("AWS::Shield::ProtectionGroup", 1, 1, 1) + Estimates["AWS::Signer::ProfilePermission"] = NewResourceEstimate("AWS::Signer::ProfilePermission", 1, 1, 1) + Estimates["AWS::Signer::SigningProfile"] = NewResourceEstimate("AWS::Signer::SigningProfile", 1, 1, 1) + Estimates["AWS::SimSpaceWeaver::Simulation"] = NewResourceEstimate("AWS::SimSpaceWeaver::Simulation", 1, 1, 1) + Estimates["AWS::StepFunctions::Activity"] = NewResourceEstimate("AWS::StepFunctions::Activity", 1, 1, 1) + Estimates["AWS::StepFunctions::StateMachine"] = NewResourceEstimate("AWS::StepFunctions::StateMachine", 1, 1, 1) + Estimates["AWS::StepFunctions::StateMachineAlias"] = NewResourceEstimate("AWS::StepFunctions::StateMachineAlias", 1, 1, 1) + Estimates["AWS::StepFunctions::StateMachineVersion"] = NewResourceEstimate("AWS::StepFunctions::StateMachineVersion", 1, 1, 1) + Estimates["AWS::SupportApp::AccountAlias"] = NewResourceEstimate("AWS::SupportApp::AccountAlias", 1, 1, 1) + Estimates["AWS::SupportApp::SlackChannelConfiguration"] = NewResourceEstimate("AWS::SupportApp::SlackChannelConfiguration", 1, 1, 1) + Estimates["AWS::SupportApp::SlackWorkspaceConfiguration"] = NewResourceEstimate("AWS::SupportApp::SlackWorkspaceConfiguration", 1, 1, 1) + Estimates["AWS::Synthetics::Canary"] = NewResourceEstimate("AWS::Synthetics::Canary", 1, 1, 1) + Estimates["AWS::Synthetics::Group"] = NewResourceEstimate("AWS::Synthetics::Group", 1, 1, 1) + Estimates["AWS::SystemsManagerSAP::Application"] = NewResourceEstimate("AWS::SystemsManagerSAP::Application", 1, 1, 1) + Estimates["AWS::Timestream::Database"] = NewResourceEstimate("AWS::Timestream::Database", 1, 1, 1) + Estimates["AWS::Timestream::ScheduledQuery"] = NewResourceEstimate("AWS::Timestream::ScheduledQuery", 1, 1, 1) + Estimates["AWS::Timestream::Table"] = NewResourceEstimate("AWS::Timestream::Table", 1, 1, 1) + Estimates["AWS::Transfer::Agreement"] = NewResourceEstimate("AWS::Transfer::Agreement", 1, 1, 1) + Estimates["AWS::Transfer::Certificate"] = NewResourceEstimate("AWS::Transfer::Certificate", 1, 1, 1) + Estimates["AWS::Transfer::Connector"] = NewResourceEstimate("AWS::Transfer::Connector", 1, 1, 1) + Estimates["AWS::Transfer::Profile"] = NewResourceEstimate("AWS::Transfer::Profile", 1, 1, 1) + Estimates["AWS::Transfer::Server"] = NewResourceEstimate("AWS::Transfer::Server", 1, 1, 1) + Estimates["AWS::Transfer::User"] = NewResourceEstimate("AWS::Transfer::User", 1, 1, 1) + Estimates["AWS::Transfer::Workflow"] = NewResourceEstimate("AWS::Transfer::Workflow", 1, 1, 1) + Estimates["AWS::VerifiedPermissions::IdentitySource"] = NewResourceEstimate("AWS::VerifiedPermissions::IdentitySource", 1, 1, 1) + Estimates["AWS::VerifiedPermissions::Policy"] = NewResourceEstimate("AWS::VerifiedPermissions::Policy", 1, 1, 1) + Estimates["AWS::VerifiedPermissions::PolicyStore"] = NewResourceEstimate("AWS::VerifiedPermissions::PolicyStore", 1, 1, 1) + Estimates["AWS::VerifiedPermissions::PolicyTemplate"] = NewResourceEstimate("AWS::VerifiedPermissions::PolicyTemplate", 1, 1, 1) + Estimates["AWS::VoiceID::Domain"] = NewResourceEstimate("AWS::VoiceID::Domain", 1, 1, 1) + Estimates["AWS::VpcLattice::AccessLogSubscription"] = NewResourceEstimate("AWS::VpcLattice::AccessLogSubscription", 1, 1, 1) + Estimates["AWS::VpcLattice::AuthPolicy"] = NewResourceEstimate("AWS::VpcLattice::AuthPolicy", 1, 1, 1) + Estimates["AWS::VpcLattice::Listener"] = NewResourceEstimate("AWS::VpcLattice::Listener", 1, 1, 1) + Estimates["AWS::VpcLattice::ResourcePolicy"] = NewResourceEstimate("AWS::VpcLattice::ResourcePolicy", 1, 1, 1) + Estimates["AWS::VpcLattice::Rule"] = NewResourceEstimate("AWS::VpcLattice::Rule", 1, 1, 1) + Estimates["AWS::VpcLattice::Service"] = NewResourceEstimate("AWS::VpcLattice::Service", 1, 1, 1) + Estimates["AWS::VpcLattice::ServiceNetwork"] = NewResourceEstimate("AWS::VpcLattice::ServiceNetwork", 1, 1, 1) + Estimates["AWS::VpcLattice::ServiceNetworkServiceAssociation"] = NewResourceEstimate("AWS::VpcLattice::ServiceNetworkServiceAssociation", 1, 1, 1) + Estimates["AWS::VpcLattice::ServiceNetworkVpcAssociation"] = NewResourceEstimate("AWS::VpcLattice::ServiceNetworkVpcAssociation", 1, 1, 1) + Estimates["AWS::VpcLattice::TargetGroup"] = NewResourceEstimate("AWS::VpcLattice::TargetGroup", 1, 1, 1) + Estimates["AWS::WAF::ByteMatchSet"] = NewResourceEstimate("AWS::WAF::ByteMatchSet", 1, 1, 1) + Estimates["AWS::WAF::IPSet"] = NewResourceEstimate("AWS::WAF::IPSet", 1, 1, 1) + Estimates["AWS::WAF::Rule"] = NewResourceEstimate("AWS::WAF::Rule", 1, 1, 1) + Estimates["AWS::WAF::SizeConstraintSet"] = NewResourceEstimate("AWS::WAF::SizeConstraintSet", 1, 1, 1) + Estimates["AWS::WAF::SqlInjectionMatchSet"] = NewResourceEstimate("AWS::WAF::SqlInjectionMatchSet", 1, 1, 1) + Estimates["AWS::WAF::WebACL"] = NewResourceEstimate("AWS::WAF::WebACL", 1, 1, 1) + Estimates["AWS::WAF::XssMatchSet"] = NewResourceEstimate("AWS::WAF::XssMatchSet", 1, 1, 1) + Estimates["AWS::WAFRegional::ByteMatchSet"] = NewResourceEstimate("AWS::WAFRegional::ByteMatchSet", 1, 1, 1) + Estimates["AWS::WAFRegional::GeoMatchSet"] = NewResourceEstimate("AWS::WAFRegional::GeoMatchSet", 1, 1, 1) + Estimates["AWS::WAFRegional::IPSet"] = NewResourceEstimate("AWS::WAFRegional::IPSet", 1, 1, 1) + Estimates["AWS::WAFRegional::RateBasedRule"] = NewResourceEstimate("AWS::WAFRegional::RateBasedRule", 1, 1, 1) + Estimates["AWS::WAFRegional::RegexPatternSet"] = NewResourceEstimate("AWS::WAFRegional::RegexPatternSet", 1, 1, 1) + Estimates["AWS::WAFRegional::Rule"] = NewResourceEstimate("AWS::WAFRegional::Rule", 1, 1, 1) + Estimates["AWS::WAFRegional::SizeConstraintSet"] = NewResourceEstimate("AWS::WAFRegional::SizeConstraintSet", 1, 1, 1) + Estimates["AWS::WAFRegional::SqlInjectionMatchSet"] = NewResourceEstimate("AWS::WAFRegional::SqlInjectionMatchSet", 1, 1, 1) + Estimates["AWS::WAFRegional::WebACL"] = NewResourceEstimate("AWS::WAFRegional::WebACL", 1, 1, 1) + Estimates["AWS::WAFRegional::WebACLAssociation"] = NewResourceEstimate("AWS::WAFRegional::WebACLAssociation", 1, 1, 1) + Estimates["AWS::WAFRegional::XssMatchSet"] = NewResourceEstimate("AWS::WAFRegional::XssMatchSet", 1, 1, 1) + Estimates["AWS::WAFv2::IPSet"] = NewResourceEstimate("AWS::WAFv2::IPSet", 1, 1, 1) + Estimates["AWS::WAFv2::LoggingConfiguration"] = NewResourceEstimate("AWS::WAFv2::LoggingConfiguration", 1, 1, 1) + Estimates["AWS::WAFv2::RegexPatternSet"] = NewResourceEstimate("AWS::WAFv2::RegexPatternSet", 1, 1, 1) + Estimates["AWS::WAFv2::RuleGroup"] = NewResourceEstimate("AWS::WAFv2::RuleGroup", 1, 1, 1) + Estimates["AWS::WAFv2::WebACL"] = NewResourceEstimate("AWS::WAFv2::WebACL", 1, 1, 1) + Estimates["AWS::WAFv2::WebACLAssociation"] = NewResourceEstimate("AWS::WAFv2::WebACLAssociation", 1, 1, 1) + Estimates["AWS::Wisdom::Assistant"] = NewResourceEstimate("AWS::Wisdom::Assistant", 1, 1, 1) + Estimates["AWS::Wisdom::AssistantAssociation"] = NewResourceEstimate("AWS::Wisdom::AssistantAssociation", 1, 1, 1) + Estimates["AWS::Wisdom::KnowledgeBase"] = NewResourceEstimate("AWS::Wisdom::KnowledgeBase", 1, 1, 1) + Estimates["AWS::WorkSpaces::ConnectionAlias"] = NewResourceEstimate("AWS::WorkSpaces::ConnectionAlias", 1, 1, 1) + Estimates["AWS::WorkSpaces::Workspace"] = NewResourceEstimate("AWS::WorkSpaces::Workspace", 1, 1, 1) + Estimates["AWS::WorkSpacesWeb::BrowserSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::BrowserSettings", 1, 1, 1) + Estimates["AWS::WorkSpacesWeb::IdentityProvider"] = NewResourceEstimate("AWS::WorkSpacesWeb::IdentityProvider", 1, 1, 1) + Estimates["AWS::WorkSpacesWeb::IpAccessSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::IpAccessSettings", 1, 1, 1) + Estimates["AWS::WorkSpacesWeb::NetworkSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::NetworkSettings", 1, 1, 1) + Estimates["AWS::WorkSpacesWeb::Portal"] = NewResourceEstimate("AWS::WorkSpacesWeb::Portal", 1, 1, 1) + Estimates["AWS::WorkSpacesWeb::TrustStore"] = NewResourceEstimate("AWS::WorkSpacesWeb::TrustStore", 1, 1, 1) + Estimates["AWS::WorkSpacesWeb::UserAccessLoggingSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::UserAccessLoggingSettings", 1, 1, 1) + Estimates["AWS::WorkSpacesWeb::UserSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::UserSettings", 1, 1, 1) + Estimates["AWS::XRay::Group"] = NewResourceEstimate("AWS::XRay::Group", 1, 1, 1) + Estimates["AWS::XRay::ResourcePolicy"] = NewResourceEstimate("AWS::XRay::ResourcePolicy", 1, 1, 1) + Estimates["AWS::XRay::SamplingRule"] = NewResourceEstimate("AWS::XRay::SamplingRule", 1, 1, 1) + +} diff --git a/internal/cmd/forecast/estimate_test.go b/internal/cmd/forecast/estimate_test.go new file mode 100644 index 00000000..da612946 --- /dev/null +++ b/internal/cmd/forecast/estimate_test.go @@ -0,0 +1,16 @@ +package forecast + +import "testing" + +func TestResourceEstimate(t *testing.T) { + resourceName := "AWS::ACMPCA::Certificate" + action := Create + est, err := GetResourceEstimate(resourceName, action) + if err != nil { + t.Error(err) + return + } + if est != 1 { + t.Errorf("expected AWS::ACMPCA::Certificate create to return 1") + } +} diff --git a/internal/cmd/forecast/forecast.go b/internal/cmd/forecast/forecast.go index ffede7be..7ad088e7 100644 --- a/internal/cmd/forecast/forecast.go +++ b/internal/cmd/forecast/forecast.go @@ -384,4 +384,7 @@ func init() { forecasters["AWS::EC2::Instance"] = checkEC2Instance forecasters["AWS::EC2::SecurityGroup"] = checkEC2SecurityGroup + // Initialize estimates map + InitEstimates() + } From 9ecbcffd6108c4c65b0a85202c662b63b5d672a2 Mon Sep 17 00:00:00 2001 From: Eric Beard Date: Mon, 11 Sep 2023 16:07:18 -0700 Subject: [PATCH 2/7] Working on estimates --- cft/graph/graph.go | 2 ++ cft/graph/graph_test.go | 3 ++ internal/cmd/forecast/estimate.go | 51 ++++++++++++++++++++++++++++--- internal/cmd/forecast/forecast.go | 23 +++++++++++++- test/templates/graph.yaml | 27 ++++++++++++++++ 5 files changed, 101 insertions(+), 5 deletions(-) create mode 100644 test/templates/graph.yaml diff --git a/cft/graph/graph.go b/cft/graph/graph.go index 48cf9da1..24f58464 100644 --- a/cft/graph/graph.go +++ b/cft/graph/graph.go @@ -56,6 +56,8 @@ func New(t cft.Template) Graph { order: make([]Node, 0), } + // TODO - Also consider DependsOn + for typeName, entity := range t.Map() { if typeName != "Resources" && typeName != "Outputs" { continue diff --git a/cft/graph/graph_test.go b/cft/graph/graph_test.go index a8831cae..b2a57a87 100644 --- a/cft/graph/graph_test.go +++ b/cft/graph/graph_test.go @@ -17,11 +17,14 @@ Parameters: Resources: Bucket: Type: AWS::S3::Bucket + DependsOn: LogBucket Properties: BucketName: !Ref Name Tags: - Key: Account - Value: !Ref AWS::AccountId + LogBucket: + Type: AWS::S3::Bucket Outputs: BucketName: Value: !Ref Bucket diff --git a/internal/cmd/forecast/estimate.go b/internal/cmd/forecast/estimate.go index 88e01b3d..58e81ee6 100644 --- a/internal/cmd/forecast/estimate.go +++ b/internal/cmd/forecast/estimate.go @@ -1,12 +1,19 @@ package forecast import ( - "errors" "fmt" + + "github.com/aws-cloudformation/rain/cft" + "github.com/aws-cloudformation/rain/cft/graph" + "github.com/aws-cloudformation/rain/internal/config" ) +// Estimates is a map of resource type name to ResourceEstimates, which are based on historical averages var Estimates map[string]ResourceEstimate +// EstimatesById is a map of logical ids in the stack to the estimated seconds to complete the action +var EstimatesById map[string]int + // ResourceEstimate stores the estimated time, in seconds, to create, // update, or delete a specific resource type. // The Name is something like "AWS::S3::Bucket" @@ -31,8 +38,8 @@ type StackAction string const ( Create StackAction = "create" - Update = "update" - Delete = "delete" + Update StackAction = "update" + Delete StackAction = "delete" ) // GetResourceEstimate returns the estimated time an action will take for the given resource type @@ -50,14 +57,50 @@ func GetResourceEstimate(resourceType string, action StackAction) (int, error) { } return 0, nil } else { - return 0, errors.New(fmt.Sprintf("no estimate available for %v", resourceType)) + return 0, fmt.Errorf("no estimate available for %v", resourceType) } } +// PredictTotalEstimate returns the total number of seconds expected to deploy the stack. +// This function takes into account resources that will be deployed in parallel. +func PredictTotalEstimate(source cft.Template, stackExists bool) int { + total := 0 + + // Naive estimate. Doesn't take into account parallelism + //for _, v := range EstimatesById { + // total += v + //} + + // TODO - Try to predict what resources will be deployed in parallel + // Build a graph of dependencies + g := graph.New(source) + + config.Debugf("g: %v", g.String()) + + // Evaluate each independent branch of the tree, starting from the top + // Whichever branch takes the longest is the total duration, since + // operations happen in parallel. + // + // We can't group resources by depth, since execution starts from the + // bottom up on each branch. + // + // Maybe just a DFS on each top level node, and the longest duration wins? + + return total +} + +// FormatEstimate returns a string in human readable format to represent the number of seconds. +// For example, 61 would return "1 minute, 1 second" +func FormatEstimate(total int) string { + // TODO + return fmt.Sprintf("%v seconds", total) +} + // init initializes the Estimates map for all AWS resource types func InitEstimates() { Estimates = make(map[string]ResourceEstimate, 0) + EstimatesById = make(map[string]int, 0) // TODO - Fill in the values with historically average create, update, delete times diff --git a/internal/cmd/forecast/forecast.go b/internal/cmd/forecast/forecast.go index 7ad088e7..01d9b2dd 100644 --- a/internal/cmd/forecast/forecast.go +++ b/internal/cmd/forecast/forecast.go @@ -135,6 +135,23 @@ func forecastForType(input PredictionInput) Forecast { return forecast } + // Estimate how long the action will take + // TODO - We need to figure out which resources will be created in parallel + var action StackAction + if input.stackExists { + action = Update + } else { + action = Create + } + est, esterr := GetResourceEstimate(input.typeName, action) + if esterr != nil { + config.Debugf("could not get estimate: %v", esterr) + est = 1 + } + config.Debugf("Got resource estimate for %v: %v", input.logicalId, est) + spin(input.typeName, input.logicalId, fmt.Sprintf("estimate: %v seconds", est)) + EstimatesById[input.logicalId] = est + // Call generic prediction functions that we can run against // all resources, even if there is not a predictor. @@ -250,6 +267,9 @@ func predict(source cft.Template, stackName string, stack types.Stack, stackExis spinner.Stop() + // Figure out how long we thing the stack will take to execute + totalSeconds := PredictTotalEstimate(source, stackExists) + if forecast.GetNumFailed() > 0 { fmt.Println("Stormy weather ahead! 🌪") // 🌩️⛈ fmt.Println(forecast.GetNumFailed(), "checks failed out of", forecast.GetNumChecked(), "total checks") @@ -259,7 +279,8 @@ func predict(source cft.Template, stackName string, stack types.Stack, stackExis } return false } else { - fmt.Println("Clear skies! 🌞 All", forecast.GetNumChecked(), "checks passed.") + fmt.Println("Clear skies! 🌞 All", forecast.GetNumChecked(), "checks passed. Estimated time:", + FormatEstimate(totalSeconds)) return true } diff --git a/test/templates/graph.yaml b/test/templates/graph.yaml new file mode 100644 index 00000000..970d18a7 --- /dev/null +++ b/test/templates/graph.yaml @@ -0,0 +1,27 @@ +Parameters: + + N: + Type: String + Default: "A" + +Resources: + + A: + Type: AWS::S3::Bucket + DependsOn: B + Properties: + BucketName: !Ref N + + B: + Type: AWS::S3::Bucket + + C: + Type: AWS::S3::Bucket + DependsOn: [B, D] + + D: + Type: AWS::S3::Bucket + DependsOn: E + + E: + Type: AWS::S3::Bucket From 59884e2f7ff4c63230571ac4a02526459034929a Mon Sep 17 00:00:00 2001 From: Eric Beard Date: Wed, 13 Sep 2023 16:28:35 -0700 Subject: [PATCH 3/7] Estimate total time, taking parallelism into account --- cft/graph/graph.go | 4 +- cft/graph/graph_test.go | 7 +- cft/graph/util.go | 13 ++ internal/cmd/forecast/estimate.go | 177 +++++++++++++++++++++---- internal/cmd/forecast/estimate_test.go | 54 +++++++- internal/cmd/forecast/permissions.go | 1 + 6 files changed, 225 insertions(+), 31 deletions(-) diff --git a/cft/graph/graph.go b/cft/graph/graph.go index 24f58464..fb2f587a 100644 --- a/cft/graph/graph.go +++ b/cft/graph/graph.go @@ -56,8 +56,6 @@ func New(t cft.Template) Graph { order: make([]Node, 0), } - // TODO - Also consider DependsOn - for typeName, entity := range t.Map() { if typeName != "Resources" && typeName != "Outputs" { continue @@ -96,8 +94,8 @@ func (g *Graph) String() string { out := strings.Builder{} for _, left := range g.order { + out.WriteString(fmt.Sprintf("%s:\n", left)) if len(g.nodes[left]) > 0 { - out.WriteString(fmt.Sprintf("%s:\n", left)) for right := range g.nodes[left] { out.WriteString(fmt.Sprintf("- %s\n", right)) } diff --git a/cft/graph/graph_test.go b/cft/graph/graph_test.go index b2a57a87..e21d9534 100644 --- a/cft/graph/graph_test.go +++ b/cft/graph/graph_test.go @@ -17,14 +17,14 @@ Parameters: Resources: Bucket: Type: AWS::S3::Bucket - DependsOn: LogBucket + DependsOn: LogBucket Properties: BucketName: !Ref Name Tags: - Key: Account - Value: !Ref AWS::AccountId LogBucket: - Type: AWS::S3::Bucket + Type: AWS::S3::Bucket Outputs: BucketName: Value: !Ref Bucket @@ -55,6 +55,7 @@ func Example_nodes() { // Output: // Parameters/AWS::AccountId // Parameters/Name + // Resources/LogBucket // Resources/Bucket // Outputs/BucketArn // Outputs/BucketName @@ -66,7 +67,7 @@ func Example_get() { fmt.Println(g.Get(graph.Node{"Outputs", "BucketName"})) // Output: // [] - // [Parameters/AWS::AccountId Parameters/Name] + // [Parameters/AWS::AccountId Parameters/Name Resources/LogBucket] // [Resources/Bucket] } diff --git a/cft/graph/util.go b/cft/graph/util.go index b346748f..5efdafa9 100644 --- a/cft/graph/util.go +++ b/cft/graph/util.go @@ -4,6 +4,8 @@ import ( "fmt" "regexp" "strings" + + "github.com/aws-cloudformation/rain/internal/config" ) var subRe = regexp.MustCompile(`\$\{([^!].+?)\}`) @@ -17,6 +19,17 @@ func findRefs(t map[string]interface{}) []string { for key, value := range t { switch key { + case "DependsOn": + switch v := value.(type) { + case string: + refs = append(refs, v) + case []interface{}: + for _, d := range v { + refs = append(refs, d.(string)) + } + default: + config.Debugf("invalid DependsOn: %v, %v", key, value) + } case "Ref": refs = append(refs, value.(string)) case "Fn::GetAtt": diff --git a/internal/cmd/forecast/estimate.go b/internal/cmd/forecast/estimate.go index 58e81ee6..83445797 100644 --- a/internal/cmd/forecast/estimate.go +++ b/internal/cmd/forecast/estimate.go @@ -6,6 +6,7 @@ import ( "github.com/aws-cloudformation/rain/cft" "github.com/aws-cloudformation/rain/cft/graph" "github.com/aws-cloudformation/rain/internal/config" + "github.com/aws-cloudformation/rain/internal/s11n" ) // Estimates is a map of resource type name to ResourceEstimates, which are based on historical averages @@ -61,30 +62,158 @@ func GetResourceEstimate(resourceType string, action StackAction) (int, error) { } } +// getResourceType returns the resource type for the logical id +// For example, "MyBucket" would return "AWS::S3::Bucket" if it is present, +// otherwise "" is returned +func getResourceType(t cft.Template, logicalId string) string { + rootMap := t.Node.Content[0] + _, resources := s11n.GetMapValue(rootMap, "Resources") + if resources == nil { + panic("Expected to find a Resources section in the template") + } + for i, r := range resources.Content { + if i%2 != 0 { + continue + } + if logicalId == r.Value { + resource := resources.Content[i+1] + _, typeNode := s11n.GetMapValue(resource, "Type") + if typeNode == nil { + panic(fmt.Sprintf("Expected %v to have a Type", logicalId)) + } + return typeNode.Value + } + } + return "" +} + +type Visited struct { + nodes []graph.Node +} + +func (v *Visited) AddVisited(n graph.Node) { + v.nodes = append(v.nodes, n) +} + +func (v *Visited) AlreadySaw(n graph.Node) bool { + for _, saw := range v.nodes { + if saw.Name == n.Name { + return true + } + } + return false +} + +func NewVisited() Visited { + return Visited{nodes: make([]graph.Node, 0)} +} + +// addDurations is a recursive function that dives down dependencies to add +// the total duration estimated for stack actions +func addDurations( + g graph.Graph, + t cft.Template, + action StackAction, + dependencies []graph.Node, + duration *int, + indent string, + v *Visited) { + + if len(dependencies) == 0 { + return + } + + for _, d := range dependencies { + if d.Type != "Resources" { + continue + } + if v.AlreadySaw(d) { + config.Debugf("%v- already saw %v", indent, d.Name) + continue + } + drt := getResourceType(t, d.Name) + if drt == "" { + panic(fmt.Sprintf("unexpected: no Type for %v", d.Name)) + } + dd, err := GetResourceEstimate(drt, action) + if err != nil { + config.Debugf("no estimate for %v", drt) + continue + } + config.Debugf("%v- depends on %v (%vs)", indent, d, dd) + *duration += dd + + v.AddVisited(d) + addDurations(g, t, action, g.Get(d), duration, indent+" ", v) + } +} + // PredictTotalEstimate returns the total number of seconds expected to deploy the stack. // This function takes into account resources that will be deployed in parallel. -func PredictTotalEstimate(source cft.Template, stackExists bool) int { +func PredictTotalEstimate(t cft.Template, stackExists bool) int { total := 0 - // Naive estimate. Doesn't take into account parallelism - //for _, v := range EstimatesById { - // total += v - //} + var action StackAction + action = "create" + if stackExists { + action = "update" + } - // TODO - Try to predict what resources will be deployed in parallel // Build a graph of dependencies - g := graph.New(source) + g := graph.New(t) - config.Debugf("g: %v", g.String()) + config.Debugf("g:\n%v", g.String()) - // Evaluate each independent branch of the tree, starting from the top - // Whichever branch takes the longest is the total duration, since - // operations happen in parallel. + // DFS down each path, add up durations. Longest duration from the top wins.. ? + // + // (Downward is "depends on") + // + // A E F A: 2s + // / \ / \ B: 4s + // B C G C: 1s + // \ D: 6s + // D E: 8s + // F: 2s + // G: 1s // - // We can't group resources by depth, since execution starts from the - // bottom up on each branch. + // Deployment order: // - // Maybe just a DFS on each top level node, and the longest duration wins? + // B-A = 6s + // D-C-A = 9s + // D-C-E = 15s + // G-F = 3s + // + // Expected deployment time is 15s + + nodes := g.Nodes() + for _, n := range nodes { + if n.Type != "Resources" { + continue + } + // For every node in the graph, walk down its dependencies and + // add up the total duration. + + resourceType := getResourceType(t, n.Name) + if resourceType == "" { + panic(fmt.Sprintf("unexpected: no Type for %v", n.Name)) + } + duration, err := GetResourceEstimate(resourceType, action) + if err != nil { + config.Debugf("no estimate for %v", resourceType) + continue + } + config.Debugf("%v duration: %v", n.Name, duration) + + dependencies := g.Get(n) + visited := NewVisited() + visited.AddVisited(n) + addDurations(g, t, action, dependencies, &duration, " ", &visited) + + config.Debugf("total duration for %v is %vs", n.Name, duration) + if total < duration { + total = duration + } + } return total } @@ -120,7 +249,7 @@ func InitEstimates() { Estimates["AWS::AmplifyUIBuilder::Component"] = NewResourceEstimate("AWS::AmplifyUIBuilder::Component", 1, 1, 1) Estimates["AWS::AmplifyUIBuilder::Form"] = NewResourceEstimate("AWS::AmplifyUIBuilder::Form", 1, 1, 1) Estimates["AWS::AmplifyUIBuilder::Theme"] = NewResourceEstimate("AWS::AmplifyUIBuilder::Theme", 1, 1, 1) - Estimates["AWS::ApiGateway::Account"] = NewResourceEstimate("AWS::ApiGateway::Account", 1, 1, 1) + Estimates["AWS::ApiGateway::Account"] = NewResourceEstimate("AWS::ApiGateway::Account", 2, 2, 2) Estimates["AWS::ApiGateway::ApiKey"] = NewResourceEstimate("AWS::ApiGateway::ApiKey", 1, 1, 1) Estimates["AWS::ApiGateway::Authorizer"] = NewResourceEstimate("AWS::ApiGateway::Authorizer", 1, 1, 1) Estimates["AWS::ApiGateway::BasePathMapping"] = NewResourceEstimate("AWS::ApiGateway::BasePathMapping", 1, 1, 1) @@ -134,8 +263,8 @@ func InitEstimates() { Estimates["AWS::ApiGateway::Model"] = NewResourceEstimate("AWS::ApiGateway::Model", 1, 1, 1) Estimates["AWS::ApiGateway::RequestValidator"] = NewResourceEstimate("AWS::ApiGateway::RequestValidator", 1, 1, 1) Estimates["AWS::ApiGateway::Resource"] = NewResourceEstimate("AWS::ApiGateway::Resource", 1, 1, 1) - Estimates["AWS::ApiGateway::RestApi"] = NewResourceEstimate("AWS::ApiGateway::RestApi", 1, 1, 1) - Estimates["AWS::ApiGateway::Stage"] = NewResourceEstimate("AWS::ApiGateway::Stage", 1, 1, 1) + Estimates["AWS::ApiGateway::RestApi"] = NewResourceEstimate("AWS::ApiGateway::RestApi", 2, 2, 2) + Estimates["AWS::ApiGateway::Stage"] = NewResourceEstimate("AWS::ApiGateway::Stage", 2, 2, 2) Estimates["AWS::ApiGateway::UsagePlan"] = NewResourceEstimate("AWS::ApiGateway::UsagePlan", 1, 1, 1) Estimates["AWS::ApiGateway::UsagePlanKey"] = NewResourceEstimate("AWS::ApiGateway::UsagePlanKey", 1, 1, 1) Estimates["AWS::ApiGateway::VpcLink"] = NewResourceEstimate("AWS::ApiGateway::VpcLink", 1, 1, 1) @@ -428,11 +557,11 @@ func InitEstimates() { Estimates["AWS::EC2::IPAMResourceDiscovery"] = NewResourceEstimate("AWS::EC2::IPAMResourceDiscovery", 1, 1, 1) Estimates["AWS::EC2::IPAMResourceDiscoveryAssociation"] = NewResourceEstimate("AWS::EC2::IPAMResourceDiscoveryAssociation", 1, 1, 1) Estimates["AWS::EC2::IPAMScope"] = NewResourceEstimate("AWS::EC2::IPAMScope", 1, 1, 1) - Estimates["AWS::EC2::Instance"] = NewResourceEstimate("AWS::EC2::Instance", 1, 1, 1) + Estimates["AWS::EC2::Instance"] = NewResourceEstimate("AWS::EC2::Instance", 30, 15, 10) Estimates["AWS::EC2::InstanceConnectEndpoint"] = NewResourceEstimate("AWS::EC2::InstanceConnectEndpoint", 1, 1, 1) Estimates["AWS::EC2::InternetGateway"] = NewResourceEstimate("AWS::EC2::InternetGateway", 1, 1, 1) Estimates["AWS::EC2::KeyPair"] = NewResourceEstimate("AWS::EC2::KeyPair", 1, 1, 1) - Estimates["AWS::EC2::LaunchTemplate"] = NewResourceEstimate("AWS::EC2::LaunchTemplate", 1, 1, 1) + Estimates["AWS::EC2::LaunchTemplate"] = NewResourceEstimate("AWS::EC2::LaunchTemplate", 7, 6, 5) Estimates["AWS::EC2::LocalGatewayRoute"] = NewResourceEstimate("AWS::EC2::LocalGatewayRoute", 1, 1, 1) Estimates["AWS::EC2::LocalGatewayRouteTable"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTable", 1, 1, 1) Estimates["AWS::EC2::LocalGatewayRouteTableVPCAssociation"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTableVPCAssociation", 1, 1, 1) @@ -648,8 +777,8 @@ func InitEstimates() { Estimates["AWS::IAM::InstanceProfile"] = NewResourceEstimate("AWS::IAM::InstanceProfile", 1, 1, 1) Estimates["AWS::IAM::ManagedPolicy"] = NewResourceEstimate("AWS::IAM::ManagedPolicy", 1, 1, 1) Estimates["AWS::IAM::OIDCProvider"] = NewResourceEstimate("AWS::IAM::OIDCProvider", 1, 1, 1) - Estimates["AWS::IAM::Policy"] = NewResourceEstimate("AWS::IAM::Policy", 1, 1, 1) - Estimates["AWS::IAM::Role"] = NewResourceEstimate("AWS::IAM::Role", 1, 1, 1) + Estimates["AWS::IAM::Policy"] = NewResourceEstimate("AWS::IAM::Policy", 17, 17, 17) + Estimates["AWS::IAM::Role"] = NewResourceEstimate("AWS::IAM::Role", 16, 16, 16) Estimates["AWS::IAM::RolePolicy"] = NewResourceEstimate("AWS::IAM::RolePolicy", 1, 1, 1) Estimates["AWS::IAM::SAMLProvider"] = NewResourceEstimate("AWS::IAM::SAMLProvider", 1, 1, 1) Estimates["AWS::IAM::ServerCertificate"] = NewResourceEstimate("AWS::IAM::ServerCertificate", 1, 1, 1) @@ -776,7 +905,7 @@ func InitEstimates() { Estimates["AWS::Lambda::CodeSigningConfig"] = NewResourceEstimate("AWS::Lambda::CodeSigningConfig", 1, 1, 1) Estimates["AWS::Lambda::EventInvokeConfig"] = NewResourceEstimate("AWS::Lambda::EventInvokeConfig", 1, 1, 1) Estimates["AWS::Lambda::EventSourceMapping"] = NewResourceEstimate("AWS::Lambda::EventSourceMapping", 1, 1, 1) - Estimates["AWS::Lambda::Function"] = NewResourceEstimate("AWS::Lambda::Function", 1, 1, 1) + Estimates["AWS::Lambda::Function"] = NewResourceEstimate("AWS::Lambda::Function", 9, 9, 9) Estimates["AWS::Lambda::LayerVersion"] = NewResourceEstimate("AWS::Lambda::LayerVersion", 1, 1, 1) Estimates["AWS::Lambda::LayerVersionPermission"] = NewResourceEstimate("AWS::Lambda::LayerVersionPermission", 1, 1, 1) Estimates["AWS::Lambda::Permission"] = NewResourceEstimate("AWS::Lambda::Permission", 1, 1, 1) @@ -1048,8 +1177,8 @@ func InitEstimates() { Estimates["AWS::Route53Resolver::ResolverRule"] = NewResourceEstimate("AWS::Route53Resolver::ResolverRule", 1, 1, 1) Estimates["AWS::Route53Resolver::ResolverRuleAssociation"] = NewResourceEstimate("AWS::Route53Resolver::ResolverRuleAssociation", 1, 1, 1) Estimates["AWS::S3::AccessPoint"] = NewResourceEstimate("AWS::S3::AccessPoint", 1, 1, 1) - Estimates["AWS::S3::Bucket"] = NewResourceEstimate("AWS::S3::Bucket", 1, 1, 1) - Estimates["AWS::S3::BucketPolicy"] = NewResourceEstimate("AWS::S3::BucketPolicy", 1, 1, 1) + Estimates["AWS::S3::Bucket"] = NewResourceEstimate("AWS::S3::Bucket", 10, 5, 3) + Estimates["AWS::S3::BucketPolicy"] = NewResourceEstimate("AWS::S3::BucketPolicy", 5, 5, 5) Estimates["AWS::S3::MultiRegionAccessPoint"] = NewResourceEstimate("AWS::S3::MultiRegionAccessPoint", 1, 1, 1) Estimates["AWS::S3::MultiRegionAccessPointPolicy"] = NewResourceEstimate("AWS::S3::MultiRegionAccessPointPolicy", 1, 1, 1) Estimates["AWS::S3::StorageLens"] = NewResourceEstimate("AWS::S3::StorageLens", 1, 1, 1) diff --git a/internal/cmd/forecast/estimate_test.go b/internal/cmd/forecast/estimate_test.go index da612946..bde0d3ae 100644 --- a/internal/cmd/forecast/estimate_test.go +++ b/internal/cmd/forecast/estimate_test.go @@ -1,6 +1,11 @@ package forecast -import "testing" +import ( + "testing" + + "github.com/aws-cloudformation/rain/cft/parse" + "github.com/aws-cloudformation/rain/internal/config" +) func TestResourceEstimate(t *testing.T) { resourceName := "AWS::ACMPCA::Certificate" @@ -14,3 +19,50 @@ func TestResourceEstimate(t *testing.T) { t.Errorf("expected AWS::ACMPCA::Certificate create to return 1") } } + +func TestDependencyEstimate(t *testing.T) { + template := ` +Parameters: + + N: + Type: String + Default: "A" + +Resources: + + A: + Type: AWS::S3::Bucket + DependsOn: B + Properties: + BucketName: !Ref N + + B: + Type: AWS::S3::BucketPolicy + DependsOn: E + + C: + Type: AWS::EC2::Instance + DependsOn: [B, D] + + D: + Type: AWS::EC2::LaunchTemplate + DependsOn: E + + E: + Type: AWS::S3::Bucket + +` + // Parse the template + tt, err := parse.String(string(template)) + if err != nil { + t.Error(err) + return + } + config.Debug = true + total := PredictTotalEstimate(tt, false) + expected := 52 // will need to adjust this when we modify the database of estimates + if total != expected { + t.Errorf("expected total to be %v, got %v", expected, total) + } + +} diff --git a/internal/cmd/forecast/permissions.go b/internal/cmd/forecast/permissions.go index b4a74109..3c7b9ece 100644 --- a/internal/cmd/forecast/permissions.go +++ b/internal/cmd/forecast/permissions.go @@ -46,6 +46,7 @@ func checkTypePermissions(input PredictionInput, resourceArn string, verb string // other circumstances, and it's not easy to know when they are relevant. if svcLower == "lambda" { actionsToRemove = append(actionsToRemove, "lambda:GetCodeSigningConfig") + actionsToRemove = append(actionsToRemove, "lambda:GetLayerVersion") } if input.typeName == "AWS::IAM::Policy" { actionsToRemove = append(actionsToRemove, "iam:PutUserPolicy") From 5d0ea56c4fff3936a5bddcd09eed576f9557b00c Mon Sep 17 00:00:00 2001 From: Eric Beard Date: Thu, 14 Sep 2023 14:48:12 -0700 Subject: [PATCH 4/7] Fixed estimated duration to correctly account for parallelism --- internal/cmd/deploy/deploy.go | 4 ++ internal/cmd/forecast/estimate.go | 64 +++++++++++++------------- internal/cmd/forecast/estimate_test.go | 29 ++++++++++-- internal/cmd/forecast/forecast.go | 3 +- internal/cmd/logs/chart-template.html | 23 +++++++-- 5 files changed, 81 insertions(+), 42 deletions(-) diff --git a/internal/cmd/deploy/deploy.go b/internal/cmd/deploy/deploy.go index 3687be6c..7d9c1c56 100644 --- a/internal/cmd/deploy/deploy.go +++ b/internal/cmd/deploy/deploy.go @@ -92,6 +92,10 @@ YAML: panic(err) } + // Figure out how long we thing the stack will take to execute + //totalSeconds := forecast.PredictTotalEstimate(template, stackExists) + // TODO - Wait until the forecast command is GA and add this to output + // Create change set spinner.Push("Creating change set") changeSetName, createErr := cfn.CreateChangeSet(template, dc.Params, dc.Tags, stackName, roleArn) diff --git a/internal/cmd/forecast/estimate.go b/internal/cmd/forecast/estimate.go index 83445797..158099ed 100644 --- a/internal/cmd/forecast/estimate.go +++ b/internal/cmd/forecast/estimate.go @@ -12,9 +12,6 @@ import ( // Estimates is a map of resource type name to ResourceEstimates, which are based on historical averages var Estimates map[string]ResourceEstimate -// EstimatesById is a map of logical ids in the stack to the estimated seconds to complete the action -var EstimatesById map[string]int - // ResourceEstimate stores the estimated time, in seconds, to create, // update, or delete a specific resource type. // The Name is something like "AWS::S3::Bucket" @@ -115,7 +112,7 @@ func addDurations( t cft.Template, action StackAction, dependencies []graph.Node, - duration *int, + parentDuration *int, indent string, v *Visited) { @@ -123,14 +120,16 @@ func addDurations( return } + maxDuration := 0 + for _, d := range dependencies { if d.Type != "Resources" { continue } - if v.AlreadySaw(d) { - config.Debugf("%v- already saw %v", indent, d.Name) - continue - } + //if v.AlreadySaw(d) { + // config.Debugf("%v- already saw %v", indent, d.Name) + // continue + //} drt := getResourceType(t, d.Name) if drt == "" { panic(fmt.Sprintf("unexpected: no Type for %v", d.Name)) @@ -140,12 +139,17 @@ func addDurations( config.Debugf("no estimate for %v", drt) continue } - config.Debugf("%v- depends on %v (%vs)", indent, d, dd) - *duration += dd + config.Debugf("%v- depends on %v (%vs)", indent, d.Name, dd) - v.AddVisited(d) - addDurations(g, t, action, g.Get(d), duration, indent+" ", v) + //v.AddVisited(d) + childDuration := dd + addDurations(g, t, action, g.Get(d), &childDuration, indent+" ", v) + if maxDuration < childDuration { + maxDuration = childDuration + } } + + *parentDuration += maxDuration } // PredictTotalEstimate returns the total number of seconds expected to deploy the stack. @@ -219,17 +223,15 @@ func PredictTotalEstimate(t cft.Template, stackExists bool) int { } // FormatEstimate returns a string in human readable format to represent the number of seconds. -// For example, 61 would return "1 minute, 1 second" +// For example, 61 would return "0h, 1m, 1s" func FormatEstimate(total int) string { - // TODO - return fmt.Sprintf("%v seconds", total) + return fmt.Sprintf("%vh, %vm, %vs", total/360, total/60, total%60) } // init initializes the Estimates map for all AWS resource types func InitEstimates() { Estimates = make(map[string]ResourceEstimate, 0) - EstimatesById = make(map[string]int, 0) // TODO - Fill in the values with historically average create, update, delete times @@ -543,7 +545,7 @@ func InitEstimates() { Estimates["AWS::EC2::CustomerGateway"] = NewResourceEstimate("AWS::EC2::CustomerGateway", 1, 1, 1) Estimates["AWS::EC2::DHCPOptions"] = NewResourceEstimate("AWS::EC2::DHCPOptions", 1, 1, 1) Estimates["AWS::EC2::EC2Fleet"] = NewResourceEstimate("AWS::EC2::EC2Fleet", 1, 1, 1) - Estimates["AWS::EC2::EIP"] = NewResourceEstimate("AWS::EC2::EIP", 1, 1, 1) + Estimates["AWS::EC2::EIP"] = NewResourceEstimate("AWS::EC2::EIP", 17, 17, 17) Estimates["AWS::EC2::EIPAssociation"] = NewResourceEstimate("AWS::EC2::EIPAssociation", 1, 1, 1) Estimates["AWS::EC2::EgressOnlyInternetGateway"] = NewResourceEstimate("AWS::EC2::EgressOnlyInternetGateway", 1, 1, 1) Estimates["AWS::EC2::EnclaveCertificateIamRoleAssociation"] = NewResourceEstimate("AWS::EC2::EnclaveCertificateIamRoleAssociation", 1, 1, 1) @@ -559,14 +561,14 @@ func InitEstimates() { Estimates["AWS::EC2::IPAMScope"] = NewResourceEstimate("AWS::EC2::IPAMScope", 1, 1, 1) Estimates["AWS::EC2::Instance"] = NewResourceEstimate("AWS::EC2::Instance", 30, 15, 10) Estimates["AWS::EC2::InstanceConnectEndpoint"] = NewResourceEstimate("AWS::EC2::InstanceConnectEndpoint", 1, 1, 1) - Estimates["AWS::EC2::InternetGateway"] = NewResourceEstimate("AWS::EC2::InternetGateway", 1, 1, 1) + Estimates["AWS::EC2::InternetGateway"] = NewResourceEstimate("AWS::EC2::InternetGateway", 16, 16, 16) Estimates["AWS::EC2::KeyPair"] = NewResourceEstimate("AWS::EC2::KeyPair", 1, 1, 1) Estimates["AWS::EC2::LaunchTemplate"] = NewResourceEstimate("AWS::EC2::LaunchTemplate", 7, 6, 5) Estimates["AWS::EC2::LocalGatewayRoute"] = NewResourceEstimate("AWS::EC2::LocalGatewayRoute", 1, 1, 1) Estimates["AWS::EC2::LocalGatewayRouteTable"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTable", 1, 1, 1) Estimates["AWS::EC2::LocalGatewayRouteTableVPCAssociation"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTableVPCAssociation", 1, 1, 1) Estimates["AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation", 1, 1, 1) - Estimates["AWS::EC2::NatGateway"] = NewResourceEstimate("AWS::EC2::NatGateway", 1, 1, 1) + Estimates["AWS::EC2::NatGateway"] = NewResourceEstimate("AWS::EC2::NatGateway", 107, 107, 107) Estimates["AWS::EC2::NetworkAcl"] = NewResourceEstimate("AWS::EC2::NetworkAcl", 1, 1, 1) Estimates["AWS::EC2::NetworkAclEntry"] = NewResourceEstimate("AWS::EC2::NetworkAclEntry", 1, 1, 1) Estimates["AWS::EC2::NetworkInsightsAccessScope"] = NewResourceEstimate("AWS::EC2::NetworkInsightsAccessScope", 1, 1, 1) @@ -580,15 +582,15 @@ func InitEstimates() { Estimates["AWS::EC2::PlacementGroup"] = NewResourceEstimate("AWS::EC2::PlacementGroup", 1, 1, 1) Estimates["AWS::EC2::PrefixList"] = NewResourceEstimate("AWS::EC2::PrefixList", 1, 1, 1) Estimates["AWS::EC2::Route"] = NewResourceEstimate("AWS::EC2::Route", 1, 1, 1) - Estimates["AWS::EC2::RouteTable"] = NewResourceEstimate("AWS::EC2::RouteTable", 1, 1, 1) - Estimates["AWS::EC2::SecurityGroup"] = NewResourceEstimate("AWS::EC2::SecurityGroup", 1, 1, 1) + Estimates["AWS::EC2::RouteTable"] = NewResourceEstimate("AWS::EC2::RouteTable", 14, 14, 14) + Estimates["AWS::EC2::SecurityGroup"] = NewResourceEstimate("AWS::EC2::SecurityGroup", 6, 6, 6) Estimates["AWS::EC2::SecurityGroupEgress"] = NewResourceEstimate("AWS::EC2::SecurityGroupEgress", 1, 1, 1) Estimates["AWS::EC2::SecurityGroupIngress"] = NewResourceEstimate("AWS::EC2::SecurityGroupIngress", 1, 1, 1) Estimates["AWS::EC2::SpotFleet"] = NewResourceEstimate("AWS::EC2::SpotFleet", 1, 1, 1) - Estimates["AWS::EC2::Subnet"] = NewResourceEstimate("AWS::EC2::Subnet", 1, 1, 1) + Estimates["AWS::EC2::Subnet"] = NewResourceEstimate("AWS::EC2::Subnet", 5, 5, 5) Estimates["AWS::EC2::SubnetCidrBlock"] = NewResourceEstimate("AWS::EC2::SubnetCidrBlock", 1, 1, 1) Estimates["AWS::EC2::SubnetNetworkAclAssociation"] = NewResourceEstimate("AWS::EC2::SubnetNetworkAclAssociation", 1, 1, 1) - Estimates["AWS::EC2::SubnetRouteTableAssociation"] = NewResourceEstimate("AWS::EC2::SubnetRouteTableAssociation", 1, 1, 1) + Estimates["AWS::EC2::SubnetRouteTableAssociation"] = NewResourceEstimate("AWS::EC2::SubnetRouteTableAssociation", 2, 2, 2) Estimates["AWS::EC2::TrafficMirrorFilter"] = NewResourceEstimate("AWS::EC2::TrafficMirrorFilter", 1, 1, 1) Estimates["AWS::EC2::TrafficMirrorFilterRule"] = NewResourceEstimate("AWS::EC2::TrafficMirrorFilterRule", 1, 1, 1) Estimates["AWS::EC2::TrafficMirrorSession"] = NewResourceEstimate("AWS::EC2::TrafficMirrorSession", 1, 1, 1) @@ -606,7 +608,7 @@ func InitEstimates() { Estimates["AWS::EC2::TransitGatewayRouteTableAssociation"] = NewResourceEstimate("AWS::EC2::TransitGatewayRouteTableAssociation", 1, 1, 1) Estimates["AWS::EC2::TransitGatewayRouteTablePropagation"] = NewResourceEstimate("AWS::EC2::TransitGatewayRouteTablePropagation", 1, 1, 1) Estimates["AWS::EC2::TransitGatewayVpcAttachment"] = NewResourceEstimate("AWS::EC2::TransitGatewayVpcAttachment", 1, 1, 1) - Estimates["AWS::EC2::VPC"] = NewResourceEstimate("AWS::EC2::VPC", 1, 1, 1) + Estimates["AWS::EC2::VPC"] = NewResourceEstimate("AWS::EC2::VPC", 12, 12, 12) Estimates["AWS::EC2::VPCCidrBlock"] = NewResourceEstimate("AWS::EC2::VPCCidrBlock", 1, 1, 1) Estimates["AWS::EC2::VPCDHCPOptionsAssociation"] = NewResourceEstimate("AWS::EC2::VPCDHCPOptionsAssociation", 1, 1, 1) Estimates["AWS::EC2::VPCEndpoint"] = NewResourceEstimate("AWS::EC2::VPCEndpoint", 1, 1, 1) @@ -631,11 +633,11 @@ func InitEstimates() { Estimates["AWS::ECR::ReplicationConfiguration"] = NewResourceEstimate("AWS::ECR::ReplicationConfiguration", 1, 1, 1) Estimates["AWS::ECR::Repository"] = NewResourceEstimate("AWS::ECR::Repository", 1, 1, 1) Estimates["AWS::ECS::CapacityProvider"] = NewResourceEstimate("AWS::ECS::CapacityProvider", 1, 1, 1) - Estimates["AWS::ECS::Cluster"] = NewResourceEstimate("AWS::ECS::Cluster", 1, 1, 1) + Estimates["AWS::ECS::Cluster"] = NewResourceEstimate("AWS::ECS::Cluster", 4, 4, 4) Estimates["AWS::ECS::ClusterCapacityProviderAssociations"] = NewResourceEstimate("AWS::ECS::ClusterCapacityProviderAssociations", 1, 1, 1) Estimates["AWS::ECS::PrimaryTaskSet"] = NewResourceEstimate("AWS::ECS::PrimaryTaskSet", 1, 1, 1) - Estimates["AWS::ECS::Service"] = NewResourceEstimate("AWS::ECS::Service", 1, 1, 1) - Estimates["AWS::ECS::TaskDefinition"] = NewResourceEstimate("AWS::ECS::TaskDefinition", 1, 1, 1) + Estimates["AWS::ECS::Service"] = NewResourceEstimate("AWS::ECS::Service", 92, 92, 92) + Estimates["AWS::ECS::TaskDefinition"] = NewResourceEstimate("AWS::ECS::TaskDefinition", 2, 2, 2) Estimates["AWS::ECS::TaskSet"] = NewResourceEstimate("AWS::ECS::TaskSet", 1, 1, 1) Estimates["AWS::EFS::AccessPoint"] = NewResourceEstimate("AWS::EFS::AccessPoint", 1, 1, 1) Estimates["AWS::EFS::FileSystem"] = NewResourceEstimate("AWS::EFS::FileSystem", 1, 1, 1) @@ -668,12 +670,12 @@ func InitEstimates() { Estimates["AWS::ElasticBeanstalk::ApplicationVersion"] = NewResourceEstimate("AWS::ElasticBeanstalk::ApplicationVersion", 1, 1, 1) Estimates["AWS::ElasticBeanstalk::ConfigurationTemplate"] = NewResourceEstimate("AWS::ElasticBeanstalk::ConfigurationTemplate", 1, 1, 1) Estimates["AWS::ElasticBeanstalk::Environment"] = NewResourceEstimate("AWS::ElasticBeanstalk::Environment", 1, 1, 1) - Estimates["AWS::ElasticLoadBalancing::LoadBalancer"] = NewResourceEstimate("AWS::ElasticLoadBalancing::LoadBalancer", 1, 1, 1) - Estimates["AWS::ElasticLoadBalancingV2::Listener"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::Listener", 1, 1, 1) + Estimates["AWS::ElasticLoadBalancing::LoadBalancer"] = NewResourceEstimate("AWS::ElasticLoadBalancing::LoadBalancer", 122, 122, 122) + Estimates["AWS::ElasticLoadBalancingV2::Listener"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::Listener", 2, 2, 2) Estimates["AWS::ElasticLoadBalancingV2::ListenerCertificate"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::ListenerCertificate", 1, 1, 1) Estimates["AWS::ElasticLoadBalancingV2::ListenerRule"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::ListenerRule", 1, 1, 1) - Estimates["AWS::ElasticLoadBalancingV2::LoadBalancer"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::LoadBalancer", 1, 1, 1) - Estimates["AWS::ElasticLoadBalancingV2::TargetGroup"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::TargetGroup", 1, 1, 1) + Estimates["AWS::ElasticLoadBalancingV2::LoadBalancer"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::LoadBalancer", 122, 122, 122) + Estimates["AWS::ElasticLoadBalancingV2::TargetGroup"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::TargetGroup", 17, 17, 17) Estimates["AWS::Elasticsearch::Domain"] = NewResourceEstimate("AWS::Elasticsearch::Domain", 1, 1, 1) Estimates["AWS::EntityResolution::MatchingWorkflow"] = NewResourceEstimate("AWS::EntityResolution::MatchingWorkflow", 1, 1, 1) Estimates["AWS::EntityResolution::SchemaMapping"] = NewResourceEstimate("AWS::EntityResolution::SchemaMapping", 1, 1, 1) diff --git a/internal/cmd/forecast/estimate_test.go b/internal/cmd/forecast/estimate_test.go index bde0d3ae..a3a95e89 100644 --- a/internal/cmd/forecast/estimate_test.go +++ b/internal/cmd/forecast/estimate_test.go @@ -4,7 +4,6 @@ import ( "testing" "github.com/aws-cloudformation/rain/cft/parse" - "github.com/aws-cloudformation/rain/internal/config" ) func TestResourceEstimate(t *testing.T) { @@ -30,37 +29,59 @@ Parameters: Resources: + # 10s A: Type: AWS::S3::Bucket DependsOn: B Properties: BucketName: !Ref N + # 5s B: Type: AWS::S3::BucketPolicy DependsOn: E + # 30s C: Type: AWS::EC2::Instance - DependsOn: [B, D] + DependsOn: [B, D, F, G] + # 7s D: Type: AWS::EC2::LaunchTemplate DependsOn: E + # 10s E: Type: AWS::S3::Bucket + # 10s + F: + Type: AWS::S3::Bucket + + # 10s + G: + Type: AWS::S3::Bucket + ` + /* + A C + \ / \ \ \ + B D F G + \ / + E + + Longest is C-D-E = 47 + */ // Parse the template tt, err := parse.String(string(template)) if err != nil { t.Error(err) return } - config.Debug = true + // config.Debug = true total := PredictTotalEstimate(tt, false) - expected := 52 // will need to adjust this when we modify the database of estimates + expected := 47 // will need to adjust this when we modify the database of estimates if total != expected { t.Errorf("expected total to be %v, got %v", expected, total) } diff --git a/internal/cmd/forecast/forecast.go b/internal/cmd/forecast/forecast.go index 01d9b2dd..a6af43cc 100644 --- a/internal/cmd/forecast/forecast.go +++ b/internal/cmd/forecast/forecast.go @@ -136,7 +136,7 @@ func forecastForType(input PredictionInput) Forecast { } // Estimate how long the action will take - // TODO - We need to figure out which resources will be created in parallel + // (This is only for spinner output, we calculate total time separately) var action StackAction if input.stackExists { action = Update @@ -150,7 +150,6 @@ func forecastForType(input PredictionInput) Forecast { } config.Debugf("Got resource estimate for %v: %v", input.logicalId, est) spin(input.typeName, input.logicalId, fmt.Sprintf("estimate: %v seconds", est)) - EstimatesById[input.logicalId] = est // Call generic prediction functions that we can run against // all resources, even if there is not a predictor. diff --git a/internal/cmd/logs/chart-template.html b/internal/cmd/logs/chart-template.html index b88d2415..d12d5c84 100644 --- a/internal/cmd/logs/chart-template.html +++ b/internal/cmd/logs/chart-template.html @@ -7,7 +7,7 @@ border: 2px solid rgb(200,200,200); letter-spacing: 1px; font-size: 0.8rem; - width:90%; + width:95%; } td, th { @@ -24,15 +24,19 @@ } thead th:nth-child(1) { - width: 16%; + width: 15%; } thead th:nth-child(2) { - width: 7%; + width: 5%; } - thead th:nth-child(3) { - width: 77%; + thead th:nth-child(2) { + width: 5%; + } + + thead th:nth-child(4) { + width: 75%; } tr:nth-child(even) td { @@ -69,6 +73,11 @@ width: 8%; text-align: right; } + + .resource-type { + font-weight: normal; + font-size: small; + } @@ -82,6 +91,7 @@

Resource + Type Elapsed Time @@ -93,6 +103,7 @@

Total +  
@@ -184,6 +195,7 @@

const template = ` RESOURCE + RESOURCE_TYPE ELAPSED
@@ -200,6 +212,7 @@

r.post = ((latest - r.endts)/total)*100 let rendered = template.replace("RESOURCE", r.id) + rendered = rendered.replace("RESOURCE_TYPE", r.type) rendered = rendered.replace("PRE", r.pre) rendered = rendered.replace("ACTIVE", r.active) rendered = rendered.replace("POST", r.post) From 640e384afc7404ba9dfbcb6a934c68341385f50b Mon Sep 17 00:00:00 2001 From: Eric Beard Date: Thu, 14 Sep 2023 15:53:05 -0700 Subject: [PATCH 5/7] Adding more estimates --- internal/cmd/forecast/estimate.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/cmd/forecast/estimate.go b/internal/cmd/forecast/estimate.go index 158099ed..b5a5ad8e 100644 --- a/internal/cmd/forecast/estimate.go +++ b/internal/cmd/forecast/estimate.go @@ -340,8 +340,8 @@ func InitEstimates() { Estimates["AWS::Athena::PreparedStatement"] = NewResourceEstimate("AWS::Athena::PreparedStatement", 1, 1, 1) Estimates["AWS::Athena::WorkGroup"] = NewResourceEstimate("AWS::Athena::WorkGroup", 1, 1, 1) Estimates["AWS::AuditManager::Assessment"] = NewResourceEstimate("AWS::AuditManager::Assessment", 1, 1, 1) - Estimates["AWS::AutoScaling::AutoScalingGroup"] = NewResourceEstimate("AWS::AutoScaling::AutoScalingGroup", 1, 1, 1) - Estimates["AWS::AutoScaling::LaunchConfiguration"] = NewResourceEstimate("AWS::AutoScaling::LaunchConfiguration", 1, 1, 1) + Estimates["AWS::AutoScaling::AutoScalingGroup"] = NewResourceEstimate("AWS::AutoScaling::AutoScalingGroup", 146, 146, 10) + Estimates["AWS::AutoScaling::LaunchConfiguration"] = NewResourceEstimate("AWS::AutoScaling::LaunchConfiguration", 2, 2, 2) Estimates["AWS::AutoScaling::LifecycleHook"] = NewResourceEstimate("AWS::AutoScaling::LifecycleHook", 1, 1, 1) Estimates["AWS::AutoScaling::ScalingPolicy"] = NewResourceEstimate("AWS::AutoScaling::ScalingPolicy", 1, 1, 1) Estimates["AWS::AutoScaling::ScheduledAction"] = NewResourceEstimate("AWS::AutoScaling::ScheduledAction", 1, 1, 1) @@ -533,8 +533,8 @@ func InitEstimates() { Estimates["AWS::DocDB::DBInstance"] = NewResourceEstimate("AWS::DocDB::DBInstance", 1, 1, 1) Estimates["AWS::DocDB::DBSubnetGroup"] = NewResourceEstimate("AWS::DocDB::DBSubnetGroup", 1, 1, 1) Estimates["AWS::DocDBElastic::Cluster"] = NewResourceEstimate("AWS::DocDBElastic::Cluster", 1, 1, 1) - Estimates["AWS::DynamoDB::GlobalTable"] = NewResourceEstimate("AWS::DynamoDB::GlobalTable", 1, 1, 1) - Estimates["AWS::DynamoDB::Table"] = NewResourceEstimate("AWS::DynamoDB::Table", 1, 1, 1) + Estimates["AWS::DynamoDB::GlobalTable"] = NewResourceEstimate("AWS::DynamoDB::GlobalTable", 30, 30, 30) + Estimates["AWS::DynamoDB::Table"] = NewResourceEstimate("AWS::DynamoDB::Table", 12, 12, 12) Estimates["AWS::EC2::CapacityReservation"] = NewResourceEstimate("AWS::EC2::CapacityReservation", 1, 1, 1) Estimates["AWS::EC2::CapacityReservationFleet"] = NewResourceEstimate("AWS::EC2::CapacityReservationFleet", 1, 1, 1) Estimates["AWS::EC2::CarrierGateway"] = NewResourceEstimate("AWS::EC2::CarrierGateway", 1, 1, 1) @@ -776,7 +776,7 @@ func InitEstimates() { Estimates["AWS::IAM::AccessKey"] = NewResourceEstimate("AWS::IAM::AccessKey", 1, 1, 1) Estimates["AWS::IAM::Group"] = NewResourceEstimate("AWS::IAM::Group", 1, 1, 1) Estimates["AWS::IAM::GroupPolicy"] = NewResourceEstimate("AWS::IAM::GroupPolicy", 1, 1, 1) - Estimates["AWS::IAM::InstanceProfile"] = NewResourceEstimate("AWS::IAM::InstanceProfile", 1, 1, 1) + Estimates["AWS::IAM::InstanceProfile"] = NewResourceEstimate("AWS::IAM::InstanceProfile", 132, 132, 132) Estimates["AWS::IAM::ManagedPolicy"] = NewResourceEstimate("AWS::IAM::ManagedPolicy", 1, 1, 1) Estimates["AWS::IAM::OIDCProvider"] = NewResourceEstimate("AWS::IAM::OIDCProvider", 1, 1, 1) Estimates["AWS::IAM::Policy"] = NewResourceEstimate("AWS::IAM::Policy", 17, 17, 17) @@ -800,10 +800,10 @@ func InitEstimates() { Estimates["AWS::ImageBuilder::Component"] = NewResourceEstimate("AWS::ImageBuilder::Component", 1, 1, 1) Estimates["AWS::ImageBuilder::ContainerRecipe"] = NewResourceEstimate("AWS::ImageBuilder::ContainerRecipe", 1, 1, 1) Estimates["AWS::ImageBuilder::DistributionConfiguration"] = NewResourceEstimate("AWS::ImageBuilder::DistributionConfiguration", 1, 1, 1) - Estimates["AWS::ImageBuilder::Image"] = NewResourceEstimate("AWS::ImageBuilder::Image", 1, 1, 1) + Estimates["AWS::ImageBuilder::Image"] = NewResourceEstimate("AWS::ImageBuilder::Image", 1386, 1386, 1386) Estimates["AWS::ImageBuilder::ImagePipeline"] = NewResourceEstimate("AWS::ImageBuilder::ImagePipeline", 1, 1, 1) - Estimates["AWS::ImageBuilder::ImageRecipe"] = NewResourceEstimate("AWS::ImageBuilder::ImageRecipe", 1, 1, 1) - Estimates["AWS::ImageBuilder::InfrastructureConfiguration"] = NewResourceEstimate("AWS::ImageBuilder::InfrastructureConfiguration", 1, 1, 1) + Estimates["AWS::ImageBuilder::ImageRecipe"] = NewResourceEstimate("AWS::ImageBuilder::ImageRecipe", 2, 2, 2) + Estimates["AWS::ImageBuilder::InfrastructureConfiguration"] = NewResourceEstimate("AWS::ImageBuilder::InfrastructureConfiguration", 2, 2, 2) Estimates["AWS::Inspector::AssessmentTarget"] = NewResourceEstimate("AWS::Inspector::AssessmentTarget", 1, 1, 1) Estimates["AWS::Inspector::AssessmentTemplate"] = NewResourceEstimate("AWS::Inspector::AssessmentTemplate", 1, 1, 1) Estimates["AWS::Inspector::ResourceGroup"] = NewResourceEstimate("AWS::Inspector::ResourceGroup", 1, 1, 1) @@ -1213,7 +1213,7 @@ func InitEstimates() { Estimates["AWS::SSM::MaintenanceWindow"] = NewResourceEstimate("AWS::SSM::MaintenanceWindow", 1, 1, 1) Estimates["AWS::SSM::MaintenanceWindowTarget"] = NewResourceEstimate("AWS::SSM::MaintenanceWindowTarget", 1, 1, 1) Estimates["AWS::SSM::MaintenanceWindowTask"] = NewResourceEstimate("AWS::SSM::MaintenanceWindowTask", 1, 1, 1) - Estimates["AWS::SSM::Parameter"] = NewResourceEstimate("AWS::SSM::Parameter", 1, 1, 1) + Estimates["AWS::SSM::Parameter"] = NewResourceEstimate("AWS::SSM::Parameter", 2, 2, 2) Estimates["AWS::SSM::PatchBaseline"] = NewResourceEstimate("AWS::SSM::PatchBaseline", 1, 1, 1) Estimates["AWS::SSM::ResourceDataSync"] = NewResourceEstimate("AWS::SSM::ResourceDataSync", 1, 1, 1) Estimates["AWS::SSM::ResourcePolicy"] = NewResourceEstimate("AWS::SSM::ResourcePolicy", 1, 1, 1) From 9fd102641fa2450a5580f087ab85d552f35f63ba Mon Sep 17 00:00:00 2001 From: Eric Beard Date: Tue, 19 Sep 2023 15:18:46 -0700 Subject: [PATCH 6/7] Parse perf data and create estimate map --- .gitignore | 1 + internal/cmd/forecast/estimate.go | 1956 ++++++++++++++--------------- 2 files changed, 976 insertions(+), 981 deletions(-) diff --git a/.gitignore b/.gitignore index c7da66d9..33584e20 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ go.work .vscode/ main rain +parse-perf local/ .idea diff --git a/internal/cmd/forecast/estimate.go b/internal/cmd/forecast/estimate.go index b5a5ad8e..a8077fb4 100644 --- a/internal/cmd/forecast/estimate.go +++ b/internal/cmd/forecast/estimate.go @@ -84,27 +84,6 @@ func getResourceType(t cft.Template, logicalId string) string { return "" } -type Visited struct { - nodes []graph.Node -} - -func (v *Visited) AddVisited(n graph.Node) { - v.nodes = append(v.nodes, n) -} - -func (v *Visited) AlreadySaw(n graph.Node) bool { - for _, saw := range v.nodes { - if saw.Name == n.Name { - return true - } - } - return false -} - -func NewVisited() Visited { - return Visited{nodes: make([]graph.Node, 0)} -} - // addDurations is a recursive function that dives down dependencies to add // the total duration estimated for stack actions func addDurations( @@ -113,8 +92,7 @@ func addDurations( action StackAction, dependencies []graph.Node, parentDuration *int, - indent string, - v *Visited) { + indent string) { if len(dependencies) == 0 { return @@ -126,10 +104,6 @@ func addDurations( if d.Type != "Resources" { continue } - //if v.AlreadySaw(d) { - // config.Debugf("%v- already saw %v", indent, d.Name) - // continue - //} drt := getResourceType(t, d.Name) if drt == "" { panic(fmt.Sprintf("unexpected: no Type for %v", d.Name)) @@ -141,9 +115,8 @@ func addDurations( } config.Debugf("%v- depends on %v (%vs)", indent, d.Name, dd) - //v.AddVisited(d) childDuration := dd - addDurations(g, t, action, g.Get(d), &childDuration, indent+" ", v) + addDurations(g, t, action, g.Get(d), &childDuration, indent+" ") if maxDuration < childDuration { maxDuration = childDuration } @@ -168,7 +141,7 @@ func PredictTotalEstimate(t cft.Template, stackExists bool) int { config.Debugf("g:\n%v", g.String()) - // DFS down each path, add up durations. Longest duration from the top wins.. ? + // Dive down each path, add up durations. Longest duration from the top wins. // // (Downward is "depends on") // @@ -209,9 +182,7 @@ func PredictTotalEstimate(t cft.Template, stackExists bool) int { config.Debugf("%v duration: %v", n.Name, duration) dependencies := g.Get(n) - visited := NewVisited() - visited.AddVisited(n) - addDurations(g, t, action, dependencies, &duration, " ", &visited) + addDurations(g, t, action, dependencies, &duration, " ") config.Debugf("total duration for %v is %vs", n.Name, duration) if total < duration { @@ -233,703 +204,715 @@ func InitEstimates() { Estimates = make(map[string]ResourceEstimate, 0) - // TODO - Fill in the values with historically average create, update, delete times - - Estimates["AWS::ACMPCA::Certificate"] = NewResourceEstimate("AWS::ACMPCA::Certificate", 1, 1, 1) - Estimates["AWS::ACMPCA::CertificateAuthority"] = NewResourceEstimate("AWS::ACMPCA::CertificateAuthority", 1, 1, 1) - Estimates["AWS::ACMPCA::CertificateAuthorityActivation"] = NewResourceEstimate("AWS::ACMPCA::CertificateAuthorityActivation", 1, 1, 1) - Estimates["AWS::ACMPCA::Permission"] = NewResourceEstimate("AWS::ACMPCA::Permission", 1, 1, 1) - Estimates["AWS::APS::RuleGroupsNamespace"] = NewResourceEstimate("AWS::APS::RuleGroupsNamespace", 1, 1, 1) - Estimates["AWS::APS::Workspace"] = NewResourceEstimate("AWS::APS::Workspace", 1, 1, 1) + Estimates["AWS::ACMPCA::Certificate"] = NewResourceEstimate("AWS::ACMPCA::Certificate", 3, 0, 1) + Estimates["AWS::ACMPCA::CertificateAuthority"] = NewResourceEstimate("AWS::ACMPCA::CertificateAuthority", 3, 2, 1) + Estimates["AWS::ACMPCA::CertificateAuthorityActivation"] = NewResourceEstimate("AWS::ACMPCA::CertificateAuthorityActivation", 2, 2, 1) + Estimates["AWS::ACMPCA::Permission"] = NewResourceEstimate("AWS::ACMPCA::Permission", 1, 0, 1) + Estimates["AWS::APS::RuleGroupsNamespace"] = NewResourceEstimate("AWS::APS::RuleGroupsNamespace", 47, 44, 1) + Estimates["AWS::APS::Workspace"] = NewResourceEstimate("AWS::APS::Workspace", 30, 66, 1) Estimates["AWS::AccessAnalyzer::Analyzer"] = NewResourceEstimate("AWS::AccessAnalyzer::Analyzer", 1, 1, 1) - Estimates["AWS::AmazonMQ::Broker"] = NewResourceEstimate("AWS::AmazonMQ::Broker", 1, 1, 1) - Estimates["AWS::AmazonMQ::Configuration"] = NewResourceEstimate("AWS::AmazonMQ::Configuration", 1, 1, 1) - Estimates["AWS::AmazonMQ::ConfigurationAssociation"] = NewResourceEstimate("AWS::AmazonMQ::ConfigurationAssociation", 1, 1, 1) - Estimates["AWS::Amplify::App"] = NewResourceEstimate("AWS::Amplify::App", 1, 1, 1) - Estimates["AWS::Amplify::Branch"] = NewResourceEstimate("AWS::Amplify::Branch", 1, 1, 1) - Estimates["AWS::Amplify::Domain"] = NewResourceEstimate("AWS::Amplify::Domain", 1, 1, 1) - Estimates["AWS::AmplifyUIBuilder::Component"] = NewResourceEstimate("AWS::AmplifyUIBuilder::Component", 1, 1, 1) - Estimates["AWS::AmplifyUIBuilder::Form"] = NewResourceEstimate("AWS::AmplifyUIBuilder::Form", 1, 1, 1) - Estimates["AWS::AmplifyUIBuilder::Theme"] = NewResourceEstimate("AWS::AmplifyUIBuilder::Theme", 1, 1, 1) - Estimates["AWS::ApiGateway::Account"] = NewResourceEstimate("AWS::ApiGateway::Account", 2, 2, 2) - Estimates["AWS::ApiGateway::ApiKey"] = NewResourceEstimate("AWS::ApiGateway::ApiKey", 1, 1, 1) - Estimates["AWS::ApiGateway::Authorizer"] = NewResourceEstimate("AWS::ApiGateway::Authorizer", 1, 1, 1) - Estimates["AWS::ApiGateway::BasePathMapping"] = NewResourceEstimate("AWS::ApiGateway::BasePathMapping", 1, 1, 1) - Estimates["AWS::ApiGateway::ClientCertificate"] = NewResourceEstimate("AWS::ApiGateway::ClientCertificate", 1, 1, 1) - Estimates["AWS::ApiGateway::Deployment"] = NewResourceEstimate("AWS::ApiGateway::Deployment", 1, 1, 1) - Estimates["AWS::ApiGateway::DocumentationPart"] = NewResourceEstimate("AWS::ApiGateway::DocumentationPart", 1, 1, 1) - Estimates["AWS::ApiGateway::DocumentationVersion"] = NewResourceEstimate("AWS::ApiGateway::DocumentationVersion", 1, 1, 1) - Estimates["AWS::ApiGateway::DomainName"] = NewResourceEstimate("AWS::ApiGateway::DomainName", 1, 1, 1) + Estimates["AWS::AmazonMQ::Broker"] = NewResourceEstimate("AWS::AmazonMQ::Broker", 604, 3, 1) + Estimates["AWS::AmazonMQ::Configuration"] = NewResourceEstimate("AWS::AmazonMQ::Configuration", 2, 1, 1) + Estimates["AWS::AmazonMQ::ConfigurationAssociation"] = NewResourceEstimate("AWS::AmazonMQ::ConfigurationAssociation", 177, 1, 1) + Estimates["AWS::Amplify::App"] = NewResourceEstimate("AWS::Amplify::App", 2, 3, 1) + Estimates["AWS::Amplify::Branch"] = NewResourceEstimate("AWS::Amplify::Branch", 2, 3, 1) + Estimates["AWS::Amplify::Domain"] = NewResourceEstimate("AWS::Amplify::Domain", 46, 1, 1) + Estimates["AWS::AmplifyUIBuilder::Component"] = NewResourceEstimate("AWS::AmplifyUIBuilder::Component", 2, 2, 1) + Estimates["AWS::AmplifyUIBuilder::Form"] = NewResourceEstimate("AWS::AmplifyUIBuilder::Form", 2, 2, 1) + Estimates["AWS::AmplifyUIBuilder::Theme"] = NewResourceEstimate("AWS::AmplifyUIBuilder::Theme", 1, 2, 1) + Estimates["AWS::AmplifyUIBuilder::View"] = NewResourceEstimate("AWS::AmplifyUIBuilder::View", 2, 2, 1) + Estimates["AWS::ApiGateway::Account"] = NewResourceEstimate("AWS::ApiGateway::Account", 2, 1, 1) + Estimates["AWS::ApiGateway::ApiKey"] = NewResourceEstimate("AWS::ApiGateway::ApiKey", 2, 1, 1) + Estimates["AWS::ApiGateway::Authorizer"] = NewResourceEstimate("AWS::ApiGateway::Authorizer", 1, 0, 1) + Estimates["AWS::ApiGateway::BasePathMapping"] = NewResourceEstimate("AWS::ApiGateway::BasePathMapping", 12, 0, 1) + Estimates["AWS::ApiGateway::ClientCertificate"] = NewResourceEstimate("AWS::ApiGateway::ClientCertificate", 2, 2, 1) + Estimates["AWS::ApiGateway::Deployment"] = NewResourceEstimate("AWS::ApiGateway::Deployment", 3, 2, 1) + Estimates["AWS::ApiGateway::DocumentationPart"] = NewResourceEstimate("AWS::ApiGateway::DocumentationPart", 1, 3, 1) + Estimates["AWS::ApiGateway::DocumentationVersion"] = NewResourceEstimate("AWS::ApiGateway::DocumentationVersion", 2, 1, 1) + Estimates["AWS::ApiGateway::DomainName"] = NewResourceEstimate("AWS::ApiGateway::DomainName", 14, 3, 1) Estimates["AWS::ApiGateway::GatewayResponse"] = NewResourceEstimate("AWS::ApiGateway::GatewayResponse", 1, 1, 1) - Estimates["AWS::ApiGateway::Method"] = NewResourceEstimate("AWS::ApiGateway::Method", 1, 1, 1) - Estimates["AWS::ApiGateway::Model"] = NewResourceEstimate("AWS::ApiGateway::Model", 1, 1, 1) - Estimates["AWS::ApiGateway::RequestValidator"] = NewResourceEstimate("AWS::ApiGateway::RequestValidator", 1, 1, 1) - Estimates["AWS::ApiGateway::Resource"] = NewResourceEstimate("AWS::ApiGateway::Resource", 1, 1, 1) - Estimates["AWS::ApiGateway::RestApi"] = NewResourceEstimate("AWS::ApiGateway::RestApi", 2, 2, 2) - Estimates["AWS::ApiGateway::Stage"] = NewResourceEstimate("AWS::ApiGateway::Stage", 2, 2, 2) - Estimates["AWS::ApiGateway::UsagePlan"] = NewResourceEstimate("AWS::ApiGateway::UsagePlan", 1, 1, 1) - Estimates["AWS::ApiGateway::UsagePlanKey"] = NewResourceEstimate("AWS::ApiGateway::UsagePlanKey", 1, 1, 1) - Estimates["AWS::ApiGateway::VpcLink"] = NewResourceEstimate("AWS::ApiGateway::VpcLink", 1, 1, 1) - Estimates["AWS::ApiGatewayV2::Api"] = NewResourceEstimate("AWS::ApiGatewayV2::Api", 1, 1, 1) - Estimates["AWS::ApiGatewayV2::ApiGatewayManagedOverrides"] = NewResourceEstimate("AWS::ApiGatewayV2::ApiGatewayManagedOverrides", 1, 1, 1) + Estimates["AWS::ApiGateway::Method"] = NewResourceEstimate("AWS::ApiGateway::Method", 2, 2, 1) + Estimates["AWS::ApiGateway::Model"] = NewResourceEstimate("AWS::ApiGateway::Model", 2, 2, 1) + Estimates["AWS::ApiGateway::RequestValidator"] = NewResourceEstimate("AWS::ApiGateway::RequestValidator", 2, 4, 1) + Estimates["AWS::ApiGateway::Resource"] = NewResourceEstimate("AWS::ApiGateway::Resource", 2, 0, 1) + Estimates["AWS::ApiGateway::RestApi"] = NewResourceEstimate("AWS::ApiGateway::RestApi", 2, 2, 1) + Estimates["AWS::ApiGateway::Stage"] = NewResourceEstimate("AWS::ApiGateway::Stage", 2, 2, 1) + Estimates["AWS::ApiGateway::UsagePlan"] = NewResourceEstimate("AWS::ApiGateway::UsagePlan", 2, 1, 1) + Estimates["AWS::ApiGateway::UsagePlanKey"] = NewResourceEstimate("AWS::ApiGateway::UsagePlanKey", 2, 0, 1) + Estimates["AWS::ApiGateway::VpcLink"] = NewResourceEstimate("AWS::ApiGateway::VpcLink", 429, 2, 1) + Estimates["AWS::ApiGatewayV2::AccessPolicy"] = NewResourceEstimate("AWS::ApiGatewayV2::AccessPolicy", 2, 3, 1) + Estimates["AWS::ApiGatewayV2::Api"] = NewResourceEstimate("AWS::ApiGatewayV2::Api", 2, 1, 1) Estimates["AWS::ApiGatewayV2::ApiMapping"] = NewResourceEstimate("AWS::ApiGatewayV2::ApiMapping", 1, 1, 1) - Estimates["AWS::ApiGatewayV2::Authorizer"] = NewResourceEstimate("AWS::ApiGatewayV2::Authorizer", 1, 1, 1) - Estimates["AWS::ApiGatewayV2::Deployment"] = NewResourceEstimate("AWS::ApiGatewayV2::Deployment", 1, 1, 1) - Estimates["AWS::ApiGatewayV2::DomainName"] = NewResourceEstimate("AWS::ApiGatewayV2::DomainName", 1, 1, 1) - Estimates["AWS::ApiGatewayV2::Integration"] = NewResourceEstimate("AWS::ApiGatewayV2::Integration", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::Authorizer"] = NewResourceEstimate("AWS::ApiGatewayV2::Authorizer", 1, 0, 1) + Estimates["AWS::ApiGatewayV2::Deployment"] = NewResourceEstimate("AWS::ApiGatewayV2::Deployment", 2, 0, 1) + Estimates["AWS::ApiGatewayV2::DomainName"] = NewResourceEstimate("AWS::ApiGatewayV2::DomainName", 6, 1, 1) + Estimates["AWS::ApiGatewayV2::Integration"] = NewResourceEstimate("AWS::ApiGatewayV2::Integration", 1, 0, 1) Estimates["AWS::ApiGatewayV2::IntegrationResponse"] = NewResourceEstimate("AWS::ApiGatewayV2::IntegrationResponse", 1, 1, 1) Estimates["AWS::ApiGatewayV2::Model"] = NewResourceEstimate("AWS::ApiGatewayV2::Model", 1, 1, 1) - Estimates["AWS::ApiGatewayV2::Route"] = NewResourceEstimate("AWS::ApiGatewayV2::Route", 1, 1, 1) - Estimates["AWS::ApiGatewayV2::RouteResponse"] = NewResourceEstimate("AWS::ApiGatewayV2::RouteResponse", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::Route"] = NewResourceEstimate("AWS::ApiGatewayV2::Route", 1, 3, 1) + Estimates["AWS::ApiGatewayV2::RouteResponse"] = NewResourceEstimate("AWS::ApiGatewayV2::RouteResponse", 1, 0, 1) Estimates["AWS::ApiGatewayV2::Stage"] = NewResourceEstimate("AWS::ApiGatewayV2::Stage", 1, 1, 1) - Estimates["AWS::ApiGatewayV2::VpcLink"] = NewResourceEstimate("AWS::ApiGatewayV2::VpcLink", 1, 1, 1) + Estimates["AWS::ApiGatewayV2::VpcLink"] = NewResourceEstimate("AWS::ApiGatewayV2::VpcLink", 124, 0, 1) Estimates["AWS::AppConfig::Application"] = NewResourceEstimate("AWS::AppConfig::Application", 1, 1, 1) - Estimates["AWS::AppConfig::ConfigurationProfile"] = NewResourceEstimate("AWS::AppConfig::ConfigurationProfile", 1, 1, 1) - Estimates["AWS::AppConfig::Deployment"] = NewResourceEstimate("AWS::AppConfig::Deployment", 1, 1, 1) + Estimates["AWS::AppConfig::ConfigurationProfile"] = NewResourceEstimate("AWS::AppConfig::ConfigurationProfile", 1, 0, 1) + Estimates["AWS::AppConfig::Deployment"] = NewResourceEstimate("AWS::AppConfig::Deployment", 133, 0, 1) Estimates["AWS::AppConfig::DeploymentStrategy"] = NewResourceEstimate("AWS::AppConfig::DeploymentStrategy", 1, 1, 1) Estimates["AWS::AppConfig::Environment"] = NewResourceEstimate("AWS::AppConfig::Environment", 1, 1, 1) - Estimates["AWS::AppConfig::Extension"] = NewResourceEstimate("AWS::AppConfig::Extension", 1, 1, 1) + Estimates["AWS::AppConfig::Extension"] = NewResourceEstimate("AWS::AppConfig::Extension", 1, 0, 1) Estimates["AWS::AppConfig::ExtensionAssociation"] = NewResourceEstimate("AWS::AppConfig::ExtensionAssociation", 1, 1, 1) - Estimates["AWS::AppConfig::HostedConfigurationVersion"] = NewResourceEstimate("AWS::AppConfig::HostedConfigurationVersion", 1, 1, 1) - Estimates["AWS::AppFlow::Connector"] = NewResourceEstimate("AWS::AppFlow::Connector", 1, 1, 1) - Estimates["AWS::AppFlow::ConnectorProfile"] = NewResourceEstimate("AWS::AppFlow::ConnectorProfile", 1, 1, 1) - Estimates["AWS::AppFlow::Flow"] = NewResourceEstimate("AWS::AppFlow::Flow", 1, 1, 1) - Estimates["AWS::AppIntegrations::DataIntegration"] = NewResourceEstimate("AWS::AppIntegrations::DataIntegration", 1, 1, 1) - Estimates["AWS::AppIntegrations::EventIntegration"] = NewResourceEstimate("AWS::AppIntegrations::EventIntegration", 1, 1, 1) - Estimates["AWS::AppMesh::GatewayRoute"] = NewResourceEstimate("AWS::AppMesh::GatewayRoute", 1, 1, 1) + Estimates["AWS::AppConfig::HostedConfigurationVersion"] = NewResourceEstimate("AWS::AppConfig::HostedConfigurationVersion", 1, 0, 1) + Estimates["AWS::AppFlow::Connector"] = NewResourceEstimate("AWS::AppFlow::Connector", 2, 0, 1) + Estimates["AWS::AppFlow::ConnectorProfile"] = NewResourceEstimate("AWS::AppFlow::ConnectorProfile", 9, 10, 1) + Estimates["AWS::AppFlow::Flow"] = NewResourceEstimate("AWS::AppFlow::Flow", 10, 10, 1) + Estimates["AWS::AppIntegrations::Application"] = NewResourceEstimate("AWS::AppIntegrations::Application", 1, 1, 1) + Estimates["AWS::AppIntegrations::DataIntegration"] = NewResourceEstimate("AWS::AppIntegrations::DataIntegration", 2, 2, 1) + Estimates["AWS::AppIntegrations::EventIntegration"] = NewResourceEstimate("AWS::AppIntegrations::EventIntegration", 1, 2, 1) + Estimates["AWS::AppMesh::GatewayRoute"] = NewResourceEstimate("AWS::AppMesh::GatewayRoute", 2, 1, 1) Estimates["AWS::AppMesh::Mesh"] = NewResourceEstimate("AWS::AppMesh::Mesh", 1, 1, 1) - Estimates["AWS::AppMesh::Route"] = NewResourceEstimate("AWS::AppMesh::Route", 1, 1, 1) - Estimates["AWS::AppMesh::VirtualGateway"] = NewResourceEstimate("AWS::AppMesh::VirtualGateway", 1, 1, 1) - Estimates["AWS::AppMesh::VirtualNode"] = NewResourceEstimate("AWS::AppMesh::VirtualNode", 1, 1, 1) + Estimates["AWS::AppMesh::Route"] = NewResourceEstimate("AWS::AppMesh::Route", 2, 1, 1) + Estimates["AWS::AppMesh::VirtualGateway"] = NewResourceEstimate("AWS::AppMesh::VirtualGateway", 2, 1, 1) + Estimates["AWS::AppMesh::VirtualNode"] = NewResourceEstimate("AWS::AppMesh::VirtualNode", 6, 1, 1) Estimates["AWS::AppMesh::VirtualRouter"] = NewResourceEstimate("AWS::AppMesh::VirtualRouter", 1, 1, 1) Estimates["AWS::AppMesh::VirtualService"] = NewResourceEstimate("AWS::AppMesh::VirtualService", 1, 1, 1) Estimates["AWS::AppRunner::AutoScalingConfiguration"] = NewResourceEstimate("AWS::AppRunner::AutoScalingConfiguration", 1, 1, 1) Estimates["AWS::AppRunner::ObservabilityConfiguration"] = NewResourceEstimate("AWS::AppRunner::ObservabilityConfiguration", 1, 1, 1) - Estimates["AWS::AppRunner::Service"] = NewResourceEstimate("AWS::AppRunner::Service", 1, 1, 1) - Estimates["AWS::AppRunner::VpcConnector"] = NewResourceEstimate("AWS::AppRunner::VpcConnector", 1, 1, 1) - Estimates["AWS::AppRunner::VpcIngressConnection"] = NewResourceEstimate("AWS::AppRunner::VpcIngressConnection", 1, 1, 1) - Estimates["AWS::AppStream::AppBlock"] = NewResourceEstimate("AWS::AppStream::AppBlock", 1, 1, 1) - Estimates["AWS::AppStream::AppBlockBuilder"] = NewResourceEstimate("AWS::AppStream::AppBlockBuilder", 1, 1, 1) - Estimates["AWS::AppStream::Application"] = NewResourceEstimate("AWS::AppStream::Application", 1, 1, 1) + Estimates["AWS::AppRunner::Service"] = NewResourceEstimate("AWS::AppRunner::Service", 218, 143, 1) + Estimates["AWS::AppRunner::VpcConnector"] = NewResourceEstimate("AWS::AppRunner::VpcConnector", 2, 1, 1) + Estimates["AWS::AppRunner::VpcIngressConnection"] = NewResourceEstimate("AWS::AppRunner::VpcIngressConnection", 38, 0, 1) + Estimates["AWS::AppStream::AppBlock"] = NewResourceEstimate("AWS::AppStream::AppBlock", 2, 1, 1) + Estimates["AWS::AppStream::Application"] = NewResourceEstimate("AWS::AppStream::Application", 2, 2, 1) Estimates["AWS::AppStream::ApplicationEntitlementAssociation"] = NewResourceEstimate("AWS::AppStream::ApplicationEntitlementAssociation", 1, 1, 1) - Estimates["AWS::AppStream::ApplicationFleetAssociation"] = NewResourceEstimate("AWS::AppStream::ApplicationFleetAssociation", 1, 1, 1) - Estimates["AWS::AppStream::DirectoryConfig"] = NewResourceEstimate("AWS::AppStream::DirectoryConfig", 1, 1, 1) - Estimates["AWS::AppStream::Entitlement"] = NewResourceEstimate("AWS::AppStream::Entitlement", 1, 1, 1) - Estimates["AWS::AppStream::Fleet"] = NewResourceEstimate("AWS::AppStream::Fleet", 1, 1, 1) - Estimates["AWS::AppStream::ImageBuilder"] = NewResourceEstimate("AWS::AppStream::ImageBuilder", 1, 1, 1) - Estimates["AWS::AppStream::Stack"] = NewResourceEstimate("AWS::AppStream::Stack", 1, 1, 1) - Estimates["AWS::AppStream::StackFleetAssociation"] = NewResourceEstimate("AWS::AppStream::StackFleetAssociation", 1, 1, 1) - Estimates["AWS::AppStream::StackUserAssociation"] = NewResourceEstimate("AWS::AppStream::StackUserAssociation", 1, 1, 1) - Estimates["AWS::AppStream::User"] = NewResourceEstimate("AWS::AppStream::User", 1, 1, 1) - Estimates["AWS::AppSync::ApiCache"] = NewResourceEstimate("AWS::AppSync::ApiCache", 1, 1, 1) - Estimates["AWS::AppSync::ApiKey"] = NewResourceEstimate("AWS::AppSync::ApiKey", 1, 1, 1) - Estimates["AWS::AppSync::DataSource"] = NewResourceEstimate("AWS::AppSync::DataSource", 1, 1, 1) - Estimates["AWS::AppSync::DomainName"] = NewResourceEstimate("AWS::AppSync::DomainName", 1, 1, 1) - Estimates["AWS::AppSync::DomainNameApiAssociation"] = NewResourceEstimate("AWS::AppSync::DomainNameApiAssociation", 1, 1, 1) - Estimates["AWS::AppSync::FunctionConfiguration"] = NewResourceEstimate("AWS::AppSync::FunctionConfiguration", 1, 1, 1) - Estimates["AWS::AppSync::GraphQLApi"] = NewResourceEstimate("AWS::AppSync::GraphQLApi", 1, 1, 1) - Estimates["AWS::AppSync::GraphQLSchema"] = NewResourceEstimate("AWS::AppSync::GraphQLSchema", 1, 1, 1) - Estimates["AWS::AppSync::Resolver"] = NewResourceEstimate("AWS::AppSync::Resolver", 1, 1, 1) - Estimates["AWS::AppSync::SourceApiAssociation"] = NewResourceEstimate("AWS::AppSync::SourceApiAssociation", 1, 1, 1) - Estimates["AWS::ApplicationAutoScaling::ScalableTarget"] = NewResourceEstimate("AWS::ApplicationAutoScaling::ScalableTarget", 1, 1, 1) - Estimates["AWS::ApplicationAutoScaling::ScalingPolicy"] = NewResourceEstimate("AWS::ApplicationAutoScaling::ScalingPolicy", 1, 1, 1) - Estimates["AWS::ApplicationInsights::Application"] = NewResourceEstimate("AWS::ApplicationInsights::Application", 1, 1, 1) - Estimates["AWS::Athena::CapacityReservation"] = NewResourceEstimate("AWS::Athena::CapacityReservation", 1, 1, 1) + Estimates["AWS::AppStream::ApplicationFleetAssociation"] = NewResourceEstimate("AWS::AppStream::ApplicationFleetAssociation", 2, 1, 1) + Estimates["AWS::AppStream::DirectoryConfig"] = NewResourceEstimate("AWS::AppStream::DirectoryConfig", 2, 1, 1) + Estimates["AWS::AppStream::Entitlement"] = NewResourceEstimate("AWS::AppStream::Entitlement", 1, 0, 1) + Estimates["AWS::AppStream::Fleet"] = NewResourceEstimate("AWS::AppStream::Fleet", 20, 3, 1) + Estimates["AWS::AppStream::ImageBuilder"] = NewResourceEstimate("AWS::AppStream::ImageBuilder", 817, 1, 1) + Estimates["AWS::AppStream::Stack"] = NewResourceEstimate("AWS::AppStream::Stack", 1, 1, 0) + Estimates["AWS::AppStream::StackFleetAssociation"] = NewResourceEstimate("AWS::AppStream::StackFleetAssociation", 2, 0, 1) + Estimates["AWS::AppSync::ApiCache"] = NewResourceEstimate("AWS::AppSync::ApiCache", 437, 1, 1) + Estimates["AWS::AppSync::ApiKey"] = NewResourceEstimate("AWS::AppSync::ApiKey", 2, 2, 1) + Estimates["AWS::AppSync::DataSource"] = NewResourceEstimate("AWS::AppSync::DataSource", 2, 1, 1) + Estimates["AWS::AppSync::DomainName"] = NewResourceEstimate("AWS::AppSync::DomainName", 5, 1, 1) + Estimates["AWS::AppSync::DomainNameApiAssociation"] = NewResourceEstimate("AWS::AppSync::DomainNameApiAssociation", 313, 200, 1) + Estimates["AWS::AppSync::FunctionConfiguration"] = NewResourceEstimate("AWS::AppSync::FunctionConfiguration", 2, 2, 1) + Estimates["AWS::AppSync::GraphQLApi"] = NewResourceEstimate("AWS::AppSync::GraphQLApi", 2, 2, 1) + Estimates["AWS::AppSync::GraphQLSchema"] = NewResourceEstimate("AWS::AppSync::GraphQLSchema", 8, 8, 1) + Estimates["AWS::AppSync::Resolver"] = NewResourceEstimate("AWS::AppSync::Resolver", 7, 1, 1) + Estimates["AWS::AppSync::SourceApiAssociation"] = NewResourceEstimate("AWS::AppSync::SourceApiAssociation", 7, 2, 1) + Estimates["AWS::ApplicationAutoScaling::ScalableTarget"] = NewResourceEstimate("AWS::ApplicationAutoScaling::ScalableTarget", 2, 0, 1) + Estimates["AWS::ApplicationAutoScaling::ScalingPolicy"] = NewResourceEstimate("AWS::ApplicationAutoScaling::ScalingPolicy", 1, 0, 1) + Estimates["AWS::ApplicationInsights::Application"] = NewResourceEstimate("AWS::ApplicationInsights::Application", 45, 1, 1) + Estimates["AWS::Athena::CapacityReservation"] = NewResourceEstimate("AWS::Athena::CapacityReservation", 84, 2, 1) Estimates["AWS::Athena::DataCatalog"] = NewResourceEstimate("AWS::Athena::DataCatalog", 1, 1, 1) - Estimates["AWS::Athena::NamedQuery"] = NewResourceEstimate("AWS::Athena::NamedQuery", 1, 1, 1) - Estimates["AWS::Athena::PreparedStatement"] = NewResourceEstimate("AWS::Athena::PreparedStatement", 1, 1, 1) - Estimates["AWS::Athena::WorkGroup"] = NewResourceEstimate("AWS::Athena::WorkGroup", 1, 1, 1) - Estimates["AWS::AuditManager::Assessment"] = NewResourceEstimate("AWS::AuditManager::Assessment", 1, 1, 1) - Estimates["AWS::AutoScaling::AutoScalingGroup"] = NewResourceEstimate("AWS::AutoScaling::AutoScalingGroup", 146, 146, 10) - Estimates["AWS::AutoScaling::LaunchConfiguration"] = NewResourceEstimate("AWS::AutoScaling::LaunchConfiguration", 2, 2, 2) - Estimates["AWS::AutoScaling::LifecycleHook"] = NewResourceEstimate("AWS::AutoScaling::LifecycleHook", 1, 1, 1) - Estimates["AWS::AutoScaling::ScalingPolicy"] = NewResourceEstimate("AWS::AutoScaling::ScalingPolicy", 1, 1, 1) - Estimates["AWS::AutoScaling::ScheduledAction"] = NewResourceEstimate("AWS::AutoScaling::ScheduledAction", 1, 1, 1) - Estimates["AWS::AutoScaling::WarmPool"] = NewResourceEstimate("AWS::AutoScaling::WarmPool", 1, 1, 1) - Estimates["AWS::AutoScalingPlans::ScalingPlan"] = NewResourceEstimate("AWS::AutoScalingPlans::ScalingPlan", 1, 1, 1) - Estimates["AWS::Backup::BackupPlan"] = NewResourceEstimate("AWS::Backup::BackupPlan", 1, 1, 1) - Estimates["AWS::Backup::BackupSelection"] = NewResourceEstimate("AWS::Backup::BackupSelection", 1, 1, 1) - Estimates["AWS::Backup::BackupVault"] = NewResourceEstimate("AWS::Backup::BackupVault", 1, 1, 1) - Estimates["AWS::Backup::Framework"] = NewResourceEstimate("AWS::Backup::Framework", 1, 1, 1) - Estimates["AWS::Backup::ReportPlan"] = NewResourceEstimate("AWS::Backup::ReportPlan", 1, 1, 1) - Estimates["AWS::BackupGateway::Hypervisor"] = NewResourceEstimate("AWS::BackupGateway::Hypervisor", 1, 1, 1) - Estimates["AWS::Batch::ComputeEnvironment"] = NewResourceEstimate("AWS::Batch::ComputeEnvironment", 1, 1, 1) - Estimates["AWS::Batch::JobDefinition"] = NewResourceEstimate("AWS::Batch::JobDefinition", 1, 1, 1) - Estimates["AWS::Batch::JobQueue"] = NewResourceEstimate("AWS::Batch::JobQueue", 1, 1, 1) + Estimates["AWS::Athena::NamedQuery"] = NewResourceEstimate("AWS::Athena::NamedQuery", 5, 1, 1) + Estimates["AWS::Athena::PreparedStatement"] = NewResourceEstimate("AWS::Athena::PreparedStatement", 3, 2, 1) + Estimates["AWS::Athena::WorkGroup"] = NewResourceEstimate("AWS::Athena::WorkGroup", 2, 2, 1) + Estimates["AWS::AuditManager::Assessment"] = NewResourceEstimate("AWS::AuditManager::Assessment", 2, 2, 1) + Estimates["AWS::AutoScaling::AutoScalingGroup"] = NewResourceEstimate("AWS::AutoScaling::AutoScalingGroup", 3, 3, 1) + Estimates["AWS::AutoScaling::LaunchConfiguration"] = NewResourceEstimate("AWS::AutoScaling::LaunchConfiguration", 2, 0, 1) + Estimates["AWS::AutoScaling::LifecycleHook"] = NewResourceEstimate("AWS::AutoScaling::LifecycleHook", 2, 1, 1) + Estimates["AWS::AutoScaling::ScalingPolicy"] = NewResourceEstimate("AWS::AutoScaling::ScalingPolicy", 7, 0, 1) + Estimates["AWS::AutoScaling::ScheduledAction"] = NewResourceEstimate("AWS::AutoScaling::ScheduledAction", 12, 0, 1) + Estimates["AWS::AutoScaling::WarmPool"] = NewResourceEstimate("AWS::AutoScaling::WarmPool", 24, 12, 1) + Estimates["AWS::AutoScalingPlans::ScalingPlan"] = NewResourceEstimate("AWS::AutoScalingPlans::ScalingPlan", 61, 1, 1) + Estimates["AWS::Backup::BackupPlan"] = NewResourceEstimate("AWS::Backup::BackupPlan", 4, 1, 1) + Estimates["AWS::Backup::BackupSelection"] = NewResourceEstimate("AWS::Backup::BackupSelection", 2, 2, 1) + Estimates["AWS::Backup::BackupVault"] = NewResourceEstimate("AWS::Backup::BackupVault", 2, 1, 1) + Estimates["AWS::Backup::Framework"] = NewResourceEstimate("AWS::Backup::Framework", 22, 22, 1) + Estimates["AWS::Backup::ReportPlan"] = NewResourceEstimate("AWS::Backup::ReportPlan", 7, 7, 1) + Estimates["AWS::BackupGateway::Hypervisor"] = NewResourceEstimate("AWS::BackupGateway::Hypervisor", 2, 2, 1) + Estimates["AWS::Batch::ComputeEnvironment"] = NewResourceEstimate("AWS::Batch::ComputeEnvironment", 7, 8, 1) + Estimates["AWS::Batch::JobDefinition"] = NewResourceEstimate("AWS::Batch::JobDefinition", 6, 6, 1) + Estimates["AWS::Batch::JobQueue"] = NewResourceEstimate("AWS::Batch::JobQueue", 7, 6, 1) Estimates["AWS::Batch::SchedulingPolicy"] = NewResourceEstimate("AWS::Batch::SchedulingPolicy", 1, 1, 1) - Estimates["AWS::BillingConductor::BillingGroup"] = NewResourceEstimate("AWS::BillingConductor::BillingGroup", 1, 1, 1) - Estimates["AWS::BillingConductor::CustomLineItem"] = NewResourceEstimate("AWS::BillingConductor::CustomLineItem", 1, 1, 1) - Estimates["AWS::BillingConductor::PricingPlan"] = NewResourceEstimate("AWS::BillingConductor::PricingPlan", 1, 1, 1) - Estimates["AWS::BillingConductor::PricingRule"] = NewResourceEstimate("AWS::BillingConductor::PricingRule", 1, 1, 1) - Estimates["AWS::Budgets::Budget"] = NewResourceEstimate("AWS::Budgets::Budget", 1, 1, 1) - Estimates["AWS::Budgets::BudgetsAction"] = NewResourceEstimate("AWS::Budgets::BudgetsAction", 1, 1, 1) - Estimates["AWS::CE::AnomalyMonitor"] = NewResourceEstimate("AWS::CE::AnomalyMonitor", 1, 1, 1) - Estimates["AWS::CE::AnomalySubscription"] = NewResourceEstimate("AWS::CE::AnomalySubscription", 1, 1, 1) - Estimates["AWS::CE::CostCategory"] = NewResourceEstimate("AWS::CE::CostCategory", 1, 1, 1) - Estimates["AWS::CUR::ReportDefinition"] = NewResourceEstimate("AWS::CUR::ReportDefinition", 1, 1, 1) - Estimates["AWS::Cassandra::Keyspace"] = NewResourceEstimate("AWS::Cassandra::Keyspace", 1, 1, 1) - Estimates["AWS::Cassandra::Table"] = NewResourceEstimate("AWS::Cassandra::Table", 1, 1, 1) - Estimates["AWS::CertificateManager::Account"] = NewResourceEstimate("AWS::CertificateManager::Account", 1, 1, 1) - Estimates["AWS::CertificateManager::Certificate"] = NewResourceEstimate("AWS::CertificateManager::Certificate", 1, 1, 1) - Estimates["AWS::Chatbot::MicrosoftTeamsChannelConfiguration"] = NewResourceEstimate("AWS::Chatbot::MicrosoftTeamsChannelConfiguration", 1, 1, 1) - Estimates["AWS::Chatbot::SlackChannelConfiguration"] = NewResourceEstimate("AWS::Chatbot::SlackChannelConfiguration", 1, 1, 1) - Estimates["AWS::CleanRooms::AnalysisTemplate"] = NewResourceEstimate("AWS::CleanRooms::AnalysisTemplate", 1, 1, 1) - Estimates["AWS::CleanRooms::Collaboration"] = NewResourceEstimate("AWS::CleanRooms::Collaboration", 1, 1, 1) - Estimates["AWS::CleanRooms::ConfiguredTable"] = NewResourceEstimate("AWS::CleanRooms::ConfiguredTable", 1, 1, 1) - Estimates["AWS::CleanRooms::ConfiguredTableAssociation"] = NewResourceEstimate("AWS::CleanRooms::ConfiguredTableAssociation", 1, 1, 1) - Estimates["AWS::CleanRooms::Membership"] = NewResourceEstimate("AWS::CleanRooms::Membership", 1, 1, 1) - Estimates["AWS::Cloud9::EnvironmentEC2"] = NewResourceEstimate("AWS::Cloud9::EnvironmentEC2", 1, 1, 1) - Estimates["AWS::CloudFormation::CustomResource"] = NewResourceEstimate("AWS::CloudFormation::CustomResource", 1, 1, 1) - Estimates["AWS::CloudFormation::HookDefaultVersion"] = NewResourceEstimate("AWS::CloudFormation::HookDefaultVersion", 1, 1, 1) + Estimates["AWS::Budgets::Budget"] = NewResourceEstimate("AWS::Budgets::Budget", 1, 16, 1) + Estimates["AWS::Budgets::BudgetsAction"] = NewResourceEstimate("AWS::Budgets::BudgetsAction", 1, 2, 1) + Estimates["AWS::CDK::GammaMetadata"] = NewResourceEstimate("AWS::CDK::GammaMetadata", 2, 1, 1) + Estimates["AWS::CDK::Metadata"] = NewResourceEstimate("AWS::CDK::Metadata", 1, 1, 1) + Estimates["AWS::CE::CostCategory"] = NewResourceEstimate("AWS::CE::CostCategory", 1, 2, 1) + Estimates["AWS::CUR::ReportDefinition"] = NewResourceEstimate("AWS::CUR::ReportDefinition", 2, 1, 1) + Estimates["AWS::Canary::SubnetCidrBlockCleanUp"] = NewResourceEstimate("AWS::Canary::SubnetCidrBlockCleanUp", 12, 1, 1) + Estimates["AWS::Cassandra::Keyspace"] = NewResourceEstimate("AWS::Cassandra::Keyspace", 16, 4, 1) + Estimates["AWS::Cassandra::Table"] = NewResourceEstimate("AWS::Cassandra::Table", 27, 38, 1) + Estimates["AWS::CertificateManager::Account"] = NewResourceEstimate("AWS::CertificateManager::Account", 3, 1, 1) + Estimates["AWS::CertificateManager::Certificate"] = NewResourceEstimate("AWS::CertificateManager::Certificate", 239, 0, 1) + Estimates["AWS::Chatbot::MicrosoftTeamsChannelConfiguration"] = NewResourceEstimate("AWS::Chatbot::MicrosoftTeamsChannelConfiguration", 2, 2, 1) + Estimates["AWS::Chatbot::SlackChannelConfiguration"] = NewResourceEstimate("AWS::Chatbot::SlackChannelConfiguration", 2, 2, 1) + Estimates["AWS::CleanRooms::AnalysisTemplate"] = NewResourceEstimate("AWS::CleanRooms::AnalysisTemplate", 4, 1, 1) + Estimates["AWS::CleanRooms::Collaboration"] = NewResourceEstimate("AWS::CleanRooms::Collaboration", 3, 2, 1) + Estimates["AWS::CleanRooms::ConfiguredTable"] = NewResourceEstimate("AWS::CleanRooms::ConfiguredTable", 4, 3, 1) + Estimates["AWS::CleanRooms::ConfiguredTableAssociation"] = NewResourceEstimate("AWS::CleanRooms::ConfiguredTableAssociation", 4, 3, 1) + Estimates["AWS::CleanRooms::Membership"] = NewResourceEstimate("AWS::CleanRooms::Membership", 4, 2, 1) + Estimates["AWS::Cloud9::EnvironmentEC2"] = NewResourceEstimate("AWS::Cloud9::EnvironmentEC2", 48, 1, 1) + Estimates["AWS::CloudFormation::CustomResource"] = NewResourceEstimate("AWS::CloudFormation::CustomResource", 119, 19, 1) + Estimates["AWS::CloudFormation::HookDefaultVersion"] = NewResourceEstimate("AWS::CloudFormation::HookDefaultVersion", 3, 1, 1) Estimates["AWS::CloudFormation::HookTypeConfig"] = NewResourceEstimate("AWS::CloudFormation::HookTypeConfig", 1, 1, 1) - Estimates["AWS::CloudFormation::HookVersion"] = NewResourceEstimate("AWS::CloudFormation::HookVersion", 1, 1, 1) - Estimates["AWS::CloudFormation::Macro"] = NewResourceEstimate("AWS::CloudFormation::Macro", 1, 1, 1) + Estimates["AWS::CloudFormation::HookVersion"] = NewResourceEstimate("AWS::CloudFormation::HookVersion", 44, 1, 1) + Estimates["AWS::CloudFormation::Macro"] = NewResourceEstimate("AWS::CloudFormation::Macro", 1, 0, 1) Estimates["AWS::CloudFormation::ModuleDefaultVersion"] = NewResourceEstimate("AWS::CloudFormation::ModuleDefaultVersion", 1, 1, 1) - Estimates["AWS::CloudFormation::ModuleVersion"] = NewResourceEstimate("AWS::CloudFormation::ModuleVersion", 1, 1, 1) - Estimates["AWS::CloudFormation::PublicTypeVersion"] = NewResourceEstimate("AWS::CloudFormation::PublicTypeVersion", 1, 1, 1) + Estimates["AWS::CloudFormation::ModuleVersion"] = NewResourceEstimate("AWS::CloudFormation::ModuleVersion", 17, 1, 1) + Estimates["AWS::CloudFormation::PublicTypeVersion"] = NewResourceEstimate("AWS::CloudFormation::PublicTypeVersion", 167, 1, 1) Estimates["AWS::CloudFormation::Publisher"] = NewResourceEstimate("AWS::CloudFormation::Publisher", 1, 1, 1) - Estimates["AWS::CloudFormation::ResourceDefaultVersion"] = NewResourceEstimate("AWS::CloudFormation::ResourceDefaultVersion", 1, 1, 1) - Estimates["AWS::CloudFormation::ResourceVersion"] = NewResourceEstimate("AWS::CloudFormation::ResourceVersion", 1, 1, 1) - Estimates["AWS::CloudFormation::Stack"] = NewResourceEstimate("AWS::CloudFormation::Stack", 1, 1, 1) - Estimates["AWS::CloudFormation::StackSet"] = NewResourceEstimate("AWS::CloudFormation::StackSet", 1, 1, 1) + Estimates["AWS::CloudFormation::ResourceDefaultVersion"] = NewResourceEstimate("AWS::CloudFormation::ResourceDefaultVersion", 3, 1, 1) + Estimates["AWS::CloudFormation::ResourceTypeVersion"] = NewResourceEstimate("AWS::CloudFormation::ResourceTypeVersion", 1, 1, 1) + Estimates["AWS::CloudFormation::ResourceTypeVersionMapping"] = NewResourceEstimate("AWS::CloudFormation::ResourceTypeVersionMapping", 1, 0, 1) + Estimates["AWS::CloudFormation::ResourceVersion"] = NewResourceEstimate("AWS::CloudFormation::ResourceVersion", 108, 1, 1) + Estimates["AWS::CloudFormation::Stack"] = NewResourceEstimate("AWS::CloudFormation::Stack", 133, 37, 1) + Estimates["AWS::CloudFormation::StackSet"] = NewResourceEstimate("AWS::CloudFormation::StackSet", 17, 16, 1) + Estimates["AWS::CloudFormation::Transform"] = NewResourceEstimate("AWS::CloudFormation::Transform", 1, 0, 1) Estimates["AWS::CloudFormation::TypeActivation"] = NewResourceEstimate("AWS::CloudFormation::TypeActivation", 1, 1, 1) - Estimates["AWS::CloudFormation::WaitCondition"] = NewResourceEstimate("AWS::CloudFormation::WaitCondition", 1, 1, 1) - Estimates["AWS::CloudFormation::WaitConditionHandle"] = NewResourceEstimate("AWS::CloudFormation::WaitConditionHandle", 1, 1, 1) - Estimates["AWS::CloudFront::CachePolicy"] = NewResourceEstimate("AWS::CloudFront::CachePolicy", 1, 1, 1) - Estimates["AWS::CloudFront::CloudFrontOriginAccessIdentity"] = NewResourceEstimate("AWS::CloudFront::CloudFrontOriginAccessIdentity", 1, 1, 1) - Estimates["AWS::CloudFront::ContinuousDeploymentPolicy"] = NewResourceEstimate("AWS::CloudFront::ContinuousDeploymentPolicy", 1, 1, 1) - Estimates["AWS::CloudFront::Distribution"] = NewResourceEstimate("AWS::CloudFront::Distribution", 1, 1, 1) - Estimates["AWS::CloudFront::Function"] = NewResourceEstimate("AWS::CloudFront::Function", 1, 1, 1) - Estimates["AWS::CloudFront::KeyGroup"] = NewResourceEstimate("AWS::CloudFront::KeyGroup", 1, 1, 1) - Estimates["AWS::CloudFront::MonitoringSubscription"] = NewResourceEstimate("AWS::CloudFront::MonitoringSubscription", 1, 1, 1) - Estimates["AWS::CloudFront::OriginAccessControl"] = NewResourceEstimate("AWS::CloudFront::OriginAccessControl", 1, 1, 1) - Estimates["AWS::CloudFront::OriginRequestPolicy"] = NewResourceEstimate("AWS::CloudFront::OriginRequestPolicy", 1, 1, 1) - Estimates["AWS::CloudFront::PublicKey"] = NewResourceEstimate("AWS::CloudFront::PublicKey", 1, 1, 1) - Estimates["AWS::CloudFront::RealtimeLogConfig"] = NewResourceEstimate("AWS::CloudFront::RealtimeLogConfig", 1, 1, 1) - Estimates["AWS::CloudFront::ResponseHeadersPolicy"] = NewResourceEstimate("AWS::CloudFront::ResponseHeadersPolicy", 1, 1, 1) - Estimates["AWS::CloudFront::StreamingDistribution"] = NewResourceEstimate("AWS::CloudFront::StreamingDistribution", 1, 1, 1) + Estimates["AWS::CloudFormation::WaitCondition"] = NewResourceEstimate("AWS::CloudFormation::WaitCondition", 210, 0, 1) + Estimates["AWS::CloudFormation::WaitConditionHandle"] = NewResourceEstimate("AWS::CloudFormation::WaitConditionHandle", 0, 0, 1) + Estimates["AWS::CloudFront::CachePolicy"] = NewResourceEstimate("AWS::CloudFront::CachePolicy", 2, 4, 1) + Estimates["AWS::CloudFront::CloudFrontOriginAccessIdentity"] = NewResourceEstimate("AWS::CloudFront::CloudFrontOriginAccessIdentity", 2, 2, 1) + Estimates["AWS::CloudFront::ContinuousDeploymentPolicy"] = NewResourceEstimate("AWS::CloudFront::ContinuousDeploymentPolicy", 2, 2, 1) + Estimates["AWS::CloudFront::Distribution"] = NewResourceEstimate("AWS::CloudFront::Distribution", 266, 164, 1) + Estimates["AWS::CloudFront::Function"] = NewResourceEstimate("AWS::CloudFront::Function", 5, 41, 1) + Estimates["AWS::CloudFront::KeyGroup"] = NewResourceEstimate("AWS::CloudFront::KeyGroup", 2, 2, 1) + Estimates["AWS::CloudFront::OriginAccessControl"] = NewResourceEstimate("AWS::CloudFront::OriginAccessControl", 2, 0, 1) + Estimates["AWS::CloudFront::OriginRequestPolicy"] = NewResourceEstimate("AWS::CloudFront::OriginRequestPolicy", 2, 5, 1) + Estimates["AWS::CloudFront::PublicKey"] = NewResourceEstimate("AWS::CloudFront::PublicKey", 2, 2, 1) + Estimates["AWS::CloudFront::Random"] = NewResourceEstimate("AWS::CloudFront::Random", 1, 1, 1) + Estimates["AWS::CloudFront::RealtimeLogConfig"] = NewResourceEstimate("AWS::CloudFront::RealtimeLogConfig", 2, 1, 1) + Estimates["AWS::CloudFront::ResponseHeadersPolicy"] = NewResourceEstimate("AWS::CloudFront::ResponseHeadersPolicy", 2, 2, 1) Estimates["AWS::CloudTrail::Channel"] = NewResourceEstimate("AWS::CloudTrail::Channel", 1, 1, 1) - Estimates["AWS::CloudTrail::EventDataStore"] = NewResourceEstimate("AWS::CloudTrail::EventDataStore", 1, 1, 1) + Estimates["AWS::CloudTrail::EventDataStore"] = NewResourceEstimate("AWS::CloudTrail::EventDataStore", 4, 3, 1) Estimates["AWS::CloudTrail::ResourcePolicy"] = NewResourceEstimate("AWS::CloudTrail::ResourcePolicy", 1, 1, 1) - Estimates["AWS::CloudTrail::Trail"] = NewResourceEstimate("AWS::CloudTrail::Trail", 1, 1, 1) - Estimates["AWS::CloudWatch::Alarm"] = NewResourceEstimate("AWS::CloudWatch::Alarm", 1, 1, 1) - Estimates["AWS::CloudWatch::AnomalyDetector"] = NewResourceEstimate("AWS::CloudWatch::AnomalyDetector", 1, 1, 1) - Estimates["AWS::CloudWatch::CompositeAlarm"] = NewResourceEstimate("AWS::CloudWatch::CompositeAlarm", 1, 1, 1) - Estimates["AWS::CloudWatch::Dashboard"] = NewResourceEstimate("AWS::CloudWatch::Dashboard", 1, 1, 1) - Estimates["AWS::CloudWatch::InsightRule"] = NewResourceEstimate("AWS::CloudWatch::InsightRule", 1, 1, 1) + Estimates["AWS::CloudTrail::Trail"] = NewResourceEstimate("AWS::CloudTrail::Trail", 2, 2, 1) + Estimates["AWS::CloudWatch::Alarm"] = NewResourceEstimate("AWS::CloudWatch::Alarm", 2, 0, 1) + Estimates["AWS::CloudWatch::AnomalyDetector"] = NewResourceEstimate("AWS::CloudWatch::AnomalyDetector", 1, 0, 1) + Estimates["AWS::CloudWatch::CompositeAlarm"] = NewResourceEstimate("AWS::CloudWatch::CompositeAlarm", 1, 2, 1) + Estimates["AWS::CloudWatch::Dashboard"] = NewResourceEstimate("AWS::CloudWatch::Dashboard", 2, 1, 1) + Estimates["AWS::CloudWatch::InsightRule"] = NewResourceEstimate("AWS::CloudWatch::InsightRule", 3, 2, 1) Estimates["AWS::CloudWatch::MetricStream"] = NewResourceEstimate("AWS::CloudWatch::MetricStream", 1, 1, 1) - Estimates["AWS::CodeArtifact::Domain"] = NewResourceEstimate("AWS::CodeArtifact::Domain", 1, 1, 1) - Estimates["AWS::CodeArtifact::Repository"] = NewResourceEstimate("AWS::CodeArtifact::Repository", 1, 1, 1) - Estimates["AWS::CodeBuild::Project"] = NewResourceEstimate("AWS::CodeBuild::Project", 1, 1, 1) - Estimates["AWS::CodeBuild::ReportGroup"] = NewResourceEstimate("AWS::CodeBuild::ReportGroup", 1, 1, 1) + Estimates["AWS::CodeArtifact::Domain"] = NewResourceEstimate("AWS::CodeArtifact::Domain", 3, 1, 1) + Estimates["AWS::CodeArtifact::Repository"] = NewResourceEstimate("AWS::CodeArtifact::Repository", 12, 2, 1) + Estimates["AWS::CodeBuild::Project"] = NewResourceEstimate("AWS::CodeBuild::Project", 2, 3, 1) + Estimates["AWS::CodeBuild::ReportGroup"] = NewResourceEstimate("AWS::CodeBuild::ReportGroup", 2, 2, 1) Estimates["AWS::CodeBuild::SourceCredential"] = NewResourceEstimate("AWS::CodeBuild::SourceCredential", 1, 1, 1) - Estimates["AWS::CodeCommit::Repository"] = NewResourceEstimate("AWS::CodeCommit::Repository", 1, 1, 1) + Estimates["AWS::CodeCommit::Repository"] = NewResourceEstimate("AWS::CodeCommit::Repository", 2, 1, 1) Estimates["AWS::CodeDeploy::Application"] = NewResourceEstimate("AWS::CodeDeploy::Application", 1, 1, 1) - Estimates["AWS::CodeDeploy::DeploymentConfig"] = NewResourceEstimate("AWS::CodeDeploy::DeploymentConfig", 1, 1, 1) - Estimates["AWS::CodeDeploy::DeploymentGroup"] = NewResourceEstimate("AWS::CodeDeploy::DeploymentGroup", 1, 1, 1) - Estimates["AWS::CodeGuruProfiler::ProfilingGroup"] = NewResourceEstimate("AWS::CodeGuruProfiler::ProfilingGroup", 1, 1, 1) - Estimates["AWS::CodeGuruReviewer::RepositoryAssociation"] = NewResourceEstimate("AWS::CodeGuruReviewer::RepositoryAssociation", 1, 1, 1) - Estimates["AWS::CodePipeline::CustomActionType"] = NewResourceEstimate("AWS::CodePipeline::CustomActionType", 1, 1, 1) - Estimates["AWS::CodePipeline::Pipeline"] = NewResourceEstimate("AWS::CodePipeline::Pipeline", 1, 1, 1) - Estimates["AWS::CodePipeline::Webhook"] = NewResourceEstimate("AWS::CodePipeline::Webhook", 1, 1, 1) - Estimates["AWS::CodeStar::GitHubRepository"] = NewResourceEstimate("AWS::CodeStar::GitHubRepository", 1, 1, 1) - Estimates["AWS::CodeStarConnections::Connection"] = NewResourceEstimate("AWS::CodeStarConnections::Connection", 1, 1, 1) - Estimates["AWS::CodeStarNotifications::NotificationRule"] = NewResourceEstimate("AWS::CodeStarNotifications::NotificationRule", 1, 1, 1) + Estimates["AWS::CodeDeploy::DeploymentConfig"] = NewResourceEstimate("AWS::CodeDeploy::DeploymentConfig", 1, 0, 1) + Estimates["AWS::CodeDeploy::DeploymentGroup"] = NewResourceEstimate("AWS::CodeDeploy::DeploymentGroup", 20, 9, 1) + Estimates["AWS::CodeGuruProfiler::ProfilingGroup"] = NewResourceEstimate("AWS::CodeGuruProfiler::ProfilingGroup", 1, 2, 1) + Estimates["AWS::CodeGuruReviewer::RepositoryAssociation"] = NewResourceEstimate("AWS::CodeGuruReviewer::RepositoryAssociation", 34, 1, 1) + Estimates["AWS::CodePipeline::CustomActionType"] = NewResourceEstimate("AWS::CodePipeline::CustomActionType", 2, 1, 1) + Estimates["AWS::CodePipeline::Pipeline"] = NewResourceEstimate("AWS::CodePipeline::Pipeline", 71, 3, 1) + Estimates["AWS::CodePipeline::Webhook"] = NewResourceEstimate("AWS::CodePipeline::Webhook", 2, 3, 1) + Estimates["AWS::CodeStar::GitHubRepository"] = NewResourceEstimate("AWS::CodeStar::GitHubRepository", 7, 1, 1) + Estimates["AWS::CodeStar::Project"] = NewResourceEstimate("AWS::CodeStar::Project", 12, 1, 1) + Estimates["AWS::CodeStar::SyncResources"] = NewResourceEstimate("AWS::CodeStar::SyncResources", 12, 1, 1) + Estimates["AWS::CodeStarConnections::Connection"] = NewResourceEstimate("AWS::CodeStarConnections::Connection", 1, 2, 1) + Estimates["AWS::CodeStarNotifications::NotificationRule"] = NewResourceEstimate("AWS::CodeStarNotifications::NotificationRule", 2, 2, 1) + Estimates["AWS::CodeTest::PersistentConfiguration"] = NewResourceEstimate("AWS::CodeTest::PersistentConfiguration", 50, 5, 1) + Estimates["AWS::CodeTest::Series"] = NewResourceEstimate("AWS::CodeTest::Series", 9, 13, 1) Estimates["AWS::Cognito::IdentityPool"] = NewResourceEstimate("AWS::Cognito::IdentityPool", 1, 1, 1) Estimates["AWS::Cognito::IdentityPoolPrincipalTag"] = NewResourceEstimate("AWS::Cognito::IdentityPoolPrincipalTag", 1, 1, 1) Estimates["AWS::Cognito::IdentityPoolRoleAttachment"] = NewResourceEstimate("AWS::Cognito::IdentityPoolRoleAttachment", 1, 1, 1) - Estimates["AWS::Cognito::UserPool"] = NewResourceEstimate("AWS::Cognito::UserPool", 1, 1, 1) - Estimates["AWS::Cognito::UserPoolClient"] = NewResourceEstimate("AWS::Cognito::UserPoolClient", 1, 1, 1) - Estimates["AWS::Cognito::UserPoolDomain"] = NewResourceEstimate("AWS::Cognito::UserPoolDomain", 1, 1, 1) - Estimates["AWS::Cognito::UserPoolGroup"] = NewResourceEstimate("AWS::Cognito::UserPoolGroup", 1, 1, 1) - Estimates["AWS::Cognito::UserPoolIdentityProvider"] = NewResourceEstimate("AWS::Cognito::UserPoolIdentityProvider", 1, 1, 1) + Estimates["AWS::Cognito::UserPool"] = NewResourceEstimate("AWS::Cognito::UserPool", 3, 2, 1) + Estimates["AWS::Cognito::UserPoolClient"] = NewResourceEstimate("AWS::Cognito::UserPoolClient", 1, 2, 1) + Estimates["AWS::Cognito::UserPoolDomain"] = NewResourceEstimate("AWS::Cognito::UserPoolDomain", 2, 0, 2) + Estimates["AWS::Cognito::UserPoolGroup"] = NewResourceEstimate("AWS::Cognito::UserPoolGroup", 21, 1, 1) + Estimates["AWS::Cognito::UserPoolIdentityProvider"] = NewResourceEstimate("AWS::Cognito::UserPoolIdentityProvider", 1, 0, 1) Estimates["AWS::Cognito::UserPoolResourceServer"] = NewResourceEstimate("AWS::Cognito::UserPoolResourceServer", 1, 1, 1) Estimates["AWS::Cognito::UserPoolRiskConfigurationAttachment"] = NewResourceEstimate("AWS::Cognito::UserPoolRiskConfigurationAttachment", 1, 1, 1) Estimates["AWS::Cognito::UserPoolUICustomizationAttachment"] = NewResourceEstimate("AWS::Cognito::UserPoolUICustomizationAttachment", 1, 1, 1) Estimates["AWS::Cognito::UserPoolUser"] = NewResourceEstimate("AWS::Cognito::UserPoolUser", 1, 1, 1) Estimates["AWS::Cognito::UserPoolUserToGroupAttachment"] = NewResourceEstimate("AWS::Cognito::UserPoolUserToGroupAttachment", 1, 1, 1) - Estimates["AWS::Comprehend::DocumentClassifier"] = NewResourceEstimate("AWS::Comprehend::DocumentClassifier", 1, 1, 1) - Estimates["AWS::Comprehend::Flywheel"] = NewResourceEstimate("AWS::Comprehend::Flywheel", 1, 1, 1) - Estimates["AWS::Config::AggregationAuthorization"] = NewResourceEstimate("AWS::Config::AggregationAuthorization", 1, 1, 1) - Estimates["AWS::Config::ConfigRule"] = NewResourceEstimate("AWS::Config::ConfigRule", 1, 1, 1) - Estimates["AWS::Config::ConfigurationAggregator"] = NewResourceEstimate("AWS::Config::ConfigurationAggregator", 1, 1, 1) - Estimates["AWS::Config::ConfigurationRecorder"] = NewResourceEstimate("AWS::Config::ConfigurationRecorder", 1, 1, 1) - Estimates["AWS::Config::ConformancePack"] = NewResourceEstimate("AWS::Config::ConformancePack", 1, 1, 1) - Estimates["AWS::Config::DeliveryChannel"] = NewResourceEstimate("AWS::Config::DeliveryChannel", 1, 1, 1) - Estimates["AWS::Config::OrganizationConfigRule"] = NewResourceEstimate("AWS::Config::OrganizationConfigRule", 1, 1, 1) - Estimates["AWS::Config::OrganizationConformancePack"] = NewResourceEstimate("AWS::Config::OrganizationConformancePack", 1, 1, 1) + Estimates["AWS::Comprehend::DocumentClassifier"] = NewResourceEstimate("AWS::Comprehend::DocumentClassifier", 1846, 2, 1) + Estimates["AWS::Comprehend::Flywheel"] = NewResourceEstimate("AWS::Comprehend::Flywheel", 20, 2, 1) + Estimates["AWS::Config::AggregationAuthorization"] = NewResourceEstimate("AWS::Config::AggregationAuthorization", 4, 2, 1) + Estimates["AWS::Config::ConfigRule"] = NewResourceEstimate("AWS::Config::ConfigRule", 3, 0, 1) + Estimates["AWS::Config::ConfigurationAggregator"] = NewResourceEstimate("AWS::Config::ConfigurationAggregator", 4, 1, 1) + Estimates["AWS::Config::ConfigurationRecorder"] = NewResourceEstimate("AWS::Config::ConfigurationRecorder", 2, 1, 1) + Estimates["AWS::Config::ConformancePack"] = NewResourceEstimate("AWS::Config::ConformancePack", 34, 35, 1) + Estimates["AWS::Config::ConformancePackCompliance"] = NewResourceEstimate("AWS::Config::ConformancePackCompliance", 1, 1, 1) + Estimates["AWS::Config::DeliveryChannel"] = NewResourceEstimate("AWS::Config::DeliveryChannel", 1, 2, 1) + Estimates["AWS::Config::OrganizationConfigRule"] = NewResourceEstimate("AWS::Config::OrganizationConfigRule", 106, 1, 1) + Estimates["AWS::Config::OrganizationConformancePack"] = NewResourceEstimate("AWS::Config::OrganizationConformancePack", 227, 223, 1) Estimates["AWS::Config::RemediationConfiguration"] = NewResourceEstimate("AWS::Config::RemediationConfiguration", 1, 1, 1) - Estimates["AWS::Config::StoredQuery"] = NewResourceEstimate("AWS::Config::StoredQuery", 1, 1, 1) + Estimates["AWS::Config::StoredQuery"] = NewResourceEstimate("AWS::Config::StoredQuery", 4, 2, 1) Estimates["AWS::Connect::ApprovedOrigin"] = NewResourceEstimate("AWS::Connect::ApprovedOrigin", 1, 1, 1) - Estimates["AWS::Connect::ContactFlow"] = NewResourceEstimate("AWS::Connect::ContactFlow", 1, 1, 1) - Estimates["AWS::Connect::ContactFlowModule"] = NewResourceEstimate("AWS::Connect::ContactFlowModule", 1, 1, 1) - Estimates["AWS::Connect::EvaluationForm"] = NewResourceEstimate("AWS::Connect::EvaluationForm", 1, 1, 1) - Estimates["AWS::Connect::HoursOfOperation"] = NewResourceEstimate("AWS::Connect::HoursOfOperation", 1, 1, 1) - Estimates["AWS::Connect::Instance"] = NewResourceEstimate("AWS::Connect::Instance", 1, 1, 1) - Estimates["AWS::Connect::InstanceStorageConfig"] = NewResourceEstimate("AWS::Connect::InstanceStorageConfig", 1, 1, 1) - Estimates["AWS::Connect::IntegrationAssociation"] = NewResourceEstimate("AWS::Connect::IntegrationAssociation", 1, 1, 1) - Estimates["AWS::Connect::PhoneNumber"] = NewResourceEstimate("AWS::Connect::PhoneNumber", 1, 1, 1) - Estimates["AWS::Connect::Prompt"] = NewResourceEstimate("AWS::Connect::Prompt", 1, 1, 1) + Estimates["AWS::Connect::ContactFlow"] = NewResourceEstimate("AWS::Connect::ContactFlow", 2, 2, 1) + Estimates["AWS::Connect::ContactFlowModule"] = NewResourceEstimate("AWS::Connect::ContactFlowModule", 2, 2, 1) + Estimates["AWS::Connect::EvaluationForm"] = NewResourceEstimate("AWS::Connect::EvaluationForm", 2, 3, 1) + Estimates["AWS::Connect::HoursOfOperation"] = NewResourceEstimate("AWS::Connect::HoursOfOperation", 1, 2, 1) + Estimates["AWS::Connect::Instance"] = NewResourceEstimate("AWS::Connect::Instance", 71, 1, 1) + Estimates["AWS::Connect::InstanceStorageConfig"] = NewResourceEstimate("AWS::Connect::InstanceStorageConfig", 2, 0, 1) + Estimates["AWS::Connect::IntegrationAssociation"] = NewResourceEstimate("AWS::Connect::IntegrationAssociation", 2, 0, 1) + Estimates["AWS::Connect::PhoneNumber"] = NewResourceEstimate("AWS::Connect::PhoneNumber", 6, 33, 1) + Estimates["AWS::Connect::Prompt"] = NewResourceEstimate("AWS::Connect::Prompt", 3, 3, 1) Estimates["AWS::Connect::Queue"] = NewResourceEstimate("AWS::Connect::Queue", 1, 1, 1) - Estimates["AWS::Connect::QuickConnect"] = NewResourceEstimate("AWS::Connect::QuickConnect", 1, 1, 1) + Estimates["AWS::Connect::QuickConnect"] = NewResourceEstimate("AWS::Connect::QuickConnect", 1, 2, 1) Estimates["AWS::Connect::RoutingProfile"] = NewResourceEstimate("AWS::Connect::RoutingProfile", 1, 1, 1) - Estimates["AWS::Connect::Rule"] = NewResourceEstimate("AWS::Connect::Rule", 1, 1, 1) + Estimates["AWS::Connect::Rule"] = NewResourceEstimate("AWS::Connect::Rule", 2, 2, 1) Estimates["AWS::Connect::SecurityKey"] = NewResourceEstimate("AWS::Connect::SecurityKey", 1, 1, 1) - Estimates["AWS::Connect::TaskTemplate"] = NewResourceEstimate("AWS::Connect::TaskTemplate", 1, 1, 1) - Estimates["AWS::Connect::TrafficDistributionGroup"] = NewResourceEstimate("AWS::Connect::TrafficDistributionGroup", 1, 1, 1) - Estimates["AWS::Connect::User"] = NewResourceEstimate("AWS::Connect::User", 1, 1, 1) + Estimates["AWS::Connect::TaskTemplate"] = NewResourceEstimate("AWS::Connect::TaskTemplate", 1, 2, 1) + Estimates["AWS::Connect::TrafficDistributionGroup"] = NewResourceEstimate("AWS::Connect::TrafficDistributionGroup", 231, 2, 1) + Estimates["AWS::Connect::User"] = NewResourceEstimate("AWS::Connect::User", 3, 3, 1) Estimates["AWS::Connect::UserHierarchyGroup"] = NewResourceEstimate("AWS::Connect::UserHierarchyGroup", 1, 1, 1) - Estimates["AWS::Connect::View"] = NewResourceEstimate("AWS::Connect::View", 1, 1, 1) + Estimates["AWS::Connect::View"] = NewResourceEstimate("AWS::Connect::View", 2, 2, 1) Estimates["AWS::Connect::ViewVersion"] = NewResourceEstimate("AWS::Connect::ViewVersion", 1, 1, 1) - Estimates["AWS::ConnectCampaigns::Campaign"] = NewResourceEstimate("AWS::ConnectCampaigns::Campaign", 1, 1, 1) - Estimates["AWS::ControlTower::EnabledControl"] = NewResourceEstimate("AWS::ControlTower::EnabledControl", 1, 1, 1) + Estimates["AWS::ConnectCampaigns::Campaign"] = NewResourceEstimate("AWS::ConnectCampaigns::Campaign", 2, 9, 1) + Estimates["AWS::ConsoleConfiguration::Endpoint"] = NewResourceEstimate("AWS::ConsoleConfiguration::Endpoint", 1, 1, 1) + Estimates["AWS::ControlTower::CustomWaiter"] = NewResourceEstimate("AWS::ControlTower::CustomWaiter", 152, 1, 1) + Estimates["AWS::ControlTower::EnabledControl"] = NewResourceEstimate("AWS::ControlTower::EnabledControl", 107, 1, 1) Estimates["AWS::CustomerProfiles::CalculatedAttributeDefinition"] = NewResourceEstimate("AWS::CustomerProfiles::CalculatedAttributeDefinition", 1, 1, 1) Estimates["AWS::CustomerProfiles::Domain"] = NewResourceEstimate("AWS::CustomerProfiles::Domain", 1, 1, 1) - Estimates["AWS::CustomerProfiles::EventStream"] = NewResourceEstimate("AWS::CustomerProfiles::EventStream", 1, 1, 1) - Estimates["AWS::CustomerProfiles::Integration"] = NewResourceEstimate("AWS::CustomerProfiles::Integration", 1, 1, 1) + Estimates["AWS::CustomerProfiles::EventStream"] = NewResourceEstimate("AWS::CustomerProfiles::EventStream", 2, 2, 1) + Estimates["AWS::CustomerProfiles::Integration"] = NewResourceEstimate("AWS::CustomerProfiles::Integration", 2, 2, 1) Estimates["AWS::CustomerProfiles::ObjectType"] = NewResourceEstimate("AWS::CustomerProfiles::ObjectType", 1, 1, 1) - Estimates["AWS::DAX::Cluster"] = NewResourceEstimate("AWS::DAX::Cluster", 1, 1, 1) - Estimates["AWS::DAX::ParameterGroup"] = NewResourceEstimate("AWS::DAX::ParameterGroup", 1, 1, 1) - Estimates["AWS::DAX::SubnetGroup"] = NewResourceEstimate("AWS::DAX::SubnetGroup", 1, 1, 1) - Estimates["AWS::DLM::LifecyclePolicy"] = NewResourceEstimate("AWS::DLM::LifecyclePolicy", 1, 1, 1) + Estimates["AWS::DAX::Cluster"] = NewResourceEstimate("AWS::DAX::Cluster", 485, 0, 1) + Estimates["AWS::DAX::ParameterGroup"] = NewResourceEstimate("AWS::DAX::ParameterGroup", 2, 1, 1) + Estimates["AWS::DAX::SubnetGroup"] = NewResourceEstimate("AWS::DAX::SubnetGroup", 2, 0, 1) + Estimates["AWS::DLM::LifecyclePolicy"] = NewResourceEstimate("AWS::DLM::LifecyclePolicy", 1, 0, 1) Estimates["AWS::DMS::Certificate"] = NewResourceEstimate("AWS::DMS::Certificate", 1, 1, 1) - Estimates["AWS::DMS::Endpoint"] = NewResourceEstimate("AWS::DMS::Endpoint", 1, 1, 1) - Estimates["AWS::DMS::EventSubscription"] = NewResourceEstimate("AWS::DMS::EventSubscription", 1, 1, 1) + Estimates["AWS::DMS::DataProvider"] = NewResourceEstimate("AWS::DMS::DataProvider", 2, 1, 1) + Estimates["AWS::DMS::Endpoint"] = NewResourceEstimate("AWS::DMS::Endpoint", 7, 12, 1) + Estimates["AWS::DMS::EventSubscription"] = NewResourceEstimate("AWS::DMS::EventSubscription", 20, 0, 1) + Estimates["AWS::DMS::InstanceProfile"] = NewResourceEstimate("AWS::DMS::InstanceProfile", 2, 1, 1) + Estimates["AWS::DMS::MigrationProject"] = NewResourceEstimate("AWS::DMS::MigrationProject", 3, 1, 1) Estimates["AWS::DMS::ReplicationConfig"] = NewResourceEstimate("AWS::DMS::ReplicationConfig", 1, 1, 1) - Estimates["AWS::DMS::ReplicationInstance"] = NewResourceEstimate("AWS::DMS::ReplicationInstance", 1, 1, 1) - Estimates["AWS::DMS::ReplicationSubnetGroup"] = NewResourceEstimate("AWS::DMS::ReplicationSubnetGroup", 1, 1, 1) - Estimates["AWS::DMS::ReplicationTask"] = NewResourceEstimate("AWS::DMS::ReplicationTask", 1, 1, 1) + Estimates["AWS::DMS::ReplicationInstance"] = NewResourceEstimate("AWS::DMS::ReplicationInstance", 778, 0, 1) + Estimates["AWS::DMS::ReplicationSubnetGroup"] = NewResourceEstimate("AWS::DMS::ReplicationSubnetGroup", 2, 19, 1) + Estimates["AWS::DMS::ReplicationTask"] = NewResourceEstimate("AWS::DMS::ReplicationTask", 54, 23, 1) Estimates["AWS::DataBrew::Dataset"] = NewResourceEstimate("AWS::DataBrew::Dataset", 1, 1, 1) - Estimates["AWS::DataBrew::Job"] = NewResourceEstimate("AWS::DataBrew::Job", 1, 1, 1) - Estimates["AWS::DataBrew::Project"] = NewResourceEstimate("AWS::DataBrew::Project", 1, 1, 1) - Estimates["AWS::DataBrew::Recipe"] = NewResourceEstimate("AWS::DataBrew::Recipe", 1, 1, 1) + Estimates["AWS::DataBrew::Job"] = NewResourceEstimate("AWS::DataBrew::Job", 2, 1, 1) + Estimates["AWS::DataBrew::Project"] = NewResourceEstimate("AWS::DataBrew::Project", 2, 1, 1) + Estimates["AWS::DataBrew::Recipe"] = NewResourceEstimate("AWS::DataBrew::Recipe", 2, 1, 1) Estimates["AWS::DataBrew::Ruleset"] = NewResourceEstimate("AWS::DataBrew::Ruleset", 1, 1, 1) - Estimates["AWS::DataBrew::Schedule"] = NewResourceEstimate("AWS::DataBrew::Schedule", 1, 1, 1) - Estimates["AWS::DataPipeline::Pipeline"] = NewResourceEstimate("AWS::DataPipeline::Pipeline", 1, 1, 1) - Estimates["AWS::DataSync::Agent"] = NewResourceEstimate("AWS::DataSync::Agent", 1, 1, 1) - Estimates["AWS::DataSync::LocationAzureBlob"] = NewResourceEstimate("AWS::DataSync::LocationAzureBlob", 1, 1, 1) - Estimates["AWS::DataSync::LocationEFS"] = NewResourceEstimate("AWS::DataSync::LocationEFS", 1, 1, 1) - Estimates["AWS::DataSync::LocationFSxLustre"] = NewResourceEstimate("AWS::DataSync::LocationFSxLustre", 1, 1, 1) - Estimates["AWS::DataSync::LocationFSxONTAP"] = NewResourceEstimate("AWS::DataSync::LocationFSxONTAP", 1, 1, 1) - Estimates["AWS::DataSync::LocationFSxOpenZFS"] = NewResourceEstimate("AWS::DataSync::LocationFSxOpenZFS", 1, 1, 1) - Estimates["AWS::DataSync::LocationFSxWindows"] = NewResourceEstimate("AWS::DataSync::LocationFSxWindows", 1, 1, 1) - Estimates["AWS::DataSync::LocationHDFS"] = NewResourceEstimate("AWS::DataSync::LocationHDFS", 1, 1, 1) - Estimates["AWS::DataSync::LocationNFS"] = NewResourceEstimate("AWS::DataSync::LocationNFS", 1, 1, 1) - Estimates["AWS::DataSync::LocationObjectStorage"] = NewResourceEstimate("AWS::DataSync::LocationObjectStorage", 1, 1, 1) - Estimates["AWS::DataSync::LocationS3"] = NewResourceEstimate("AWS::DataSync::LocationS3", 1, 1, 1) - Estimates["AWS::DataSync::LocationSMB"] = NewResourceEstimate("AWS::DataSync::LocationSMB", 1, 1, 1) - Estimates["AWS::DataSync::StorageSystem"] = NewResourceEstimate("AWS::DataSync::StorageSystem", 1, 1, 1) - Estimates["AWS::DataSync::Task"] = NewResourceEstimate("AWS::DataSync::Task", 1, 1, 1) - Estimates["AWS::Detective::Graph"] = NewResourceEstimate("AWS::Detective::Graph", 1, 1, 1) - Estimates["AWS::Detective::MemberInvitation"] = NewResourceEstimate("AWS::Detective::MemberInvitation", 1, 1, 1) - Estimates["AWS::Detective::OrganizationAdmin"] = NewResourceEstimate("AWS::Detective::OrganizationAdmin", 1, 1, 1) - Estimates["AWS::DevOpsGuru::LogAnomalyDetectionIntegration"] = NewResourceEstimate("AWS::DevOpsGuru::LogAnomalyDetectionIntegration", 1, 1, 1) - Estimates["AWS::DevOpsGuru::NotificationChannel"] = NewResourceEstimate("AWS::DevOpsGuru::NotificationChannel", 1, 1, 1) - Estimates["AWS::DevOpsGuru::ResourceCollection"] = NewResourceEstimate("AWS::DevOpsGuru::ResourceCollection", 1, 1, 1) - Estimates["AWS::DirectoryService::MicrosoftAD"] = NewResourceEstimate("AWS::DirectoryService::MicrosoftAD", 1, 1, 1) - Estimates["AWS::DirectoryService::SimpleAD"] = NewResourceEstimate("AWS::DirectoryService::SimpleAD", 1, 1, 1) - Estimates["AWS::DocDB::DBCluster"] = NewResourceEstimate("AWS::DocDB::DBCluster", 1, 1, 1) - Estimates["AWS::DocDB::DBClusterParameterGroup"] = NewResourceEstimate("AWS::DocDB::DBClusterParameterGroup", 1, 1, 1) - Estimates["AWS::DocDB::DBInstance"] = NewResourceEstimate("AWS::DocDB::DBInstance", 1, 1, 1) - Estimates["AWS::DocDB::DBSubnetGroup"] = NewResourceEstimate("AWS::DocDB::DBSubnetGroup", 1, 1, 1) - Estimates["AWS::DocDBElastic::Cluster"] = NewResourceEstimate("AWS::DocDBElastic::Cluster", 1, 1, 1) - Estimates["AWS::DynamoDB::GlobalTable"] = NewResourceEstimate("AWS::DynamoDB::GlobalTable", 30, 30, 30) - Estimates["AWS::DynamoDB::Table"] = NewResourceEstimate("AWS::DynamoDB::Table", 12, 12, 12) - Estimates["AWS::EC2::CapacityReservation"] = NewResourceEstimate("AWS::EC2::CapacityReservation", 1, 1, 1) - Estimates["AWS::EC2::CapacityReservationFleet"] = NewResourceEstimate("AWS::EC2::CapacityReservationFleet", 1, 1, 1) - Estimates["AWS::EC2::CarrierGateway"] = NewResourceEstimate("AWS::EC2::CarrierGateway", 1, 1, 1) - Estimates["AWS::EC2::ClientVpnAuthorizationRule"] = NewResourceEstimate("AWS::EC2::ClientVpnAuthorizationRule", 1, 1, 1) - Estimates["AWS::EC2::ClientVpnEndpoint"] = NewResourceEstimate("AWS::EC2::ClientVpnEndpoint", 1, 1, 1) - Estimates["AWS::EC2::ClientVpnRoute"] = NewResourceEstimate("AWS::EC2::ClientVpnRoute", 1, 1, 1) - Estimates["AWS::EC2::ClientVpnTargetNetworkAssociation"] = NewResourceEstimate("AWS::EC2::ClientVpnTargetNetworkAssociation", 1, 1, 1) - Estimates["AWS::EC2::CustomerGateway"] = NewResourceEstimate("AWS::EC2::CustomerGateway", 1, 1, 1) - Estimates["AWS::EC2::DHCPOptions"] = NewResourceEstimate("AWS::EC2::DHCPOptions", 1, 1, 1) - Estimates["AWS::EC2::EC2Fleet"] = NewResourceEstimate("AWS::EC2::EC2Fleet", 1, 1, 1) - Estimates["AWS::EC2::EIP"] = NewResourceEstimate("AWS::EC2::EIP", 17, 17, 17) - Estimates["AWS::EC2::EIPAssociation"] = NewResourceEstimate("AWS::EC2::EIPAssociation", 1, 1, 1) - Estimates["AWS::EC2::EgressOnlyInternetGateway"] = NewResourceEstimate("AWS::EC2::EgressOnlyInternetGateway", 1, 1, 1) - Estimates["AWS::EC2::EnclaveCertificateIamRoleAssociation"] = NewResourceEstimate("AWS::EC2::EnclaveCertificateIamRoleAssociation", 1, 1, 1) - Estimates["AWS::EC2::FlowLog"] = NewResourceEstimate("AWS::EC2::FlowLog", 1, 1, 1) - Estimates["AWS::EC2::GatewayRouteTableAssociation"] = NewResourceEstimate("AWS::EC2::GatewayRouteTableAssociation", 1, 1, 1) - Estimates["AWS::EC2::Host"] = NewResourceEstimate("AWS::EC2::Host", 1, 1, 1) - Estimates["AWS::EC2::IPAM"] = NewResourceEstimate("AWS::EC2::IPAM", 1, 1, 1) + Estimates["AWS::DataBrew::Schedule"] = NewResourceEstimate("AWS::DataBrew::Schedule", 2, 1, 1) + Estimates["AWS::DataPipeline::Pipeline"] = NewResourceEstimate("AWS::DataPipeline::Pipeline", 3, 4, 1) + Estimates["AWS::DataSync::Agent"] = NewResourceEstimate("AWS::DataSync::Agent", 5, 2, 1) + Estimates["AWS::DataSync::LocationAzureBlob"] = NewResourceEstimate("AWS::DataSync::LocationAzureBlob", 6, 2, 1) + Estimates["AWS::DataSync::LocationEFS"] = NewResourceEstimate("AWS::DataSync::LocationEFS", 5, 2, 1) + Estimates["AWS::DataSync::LocationFSxLustre"] = NewResourceEstimate("AWS::DataSync::LocationFSxLustre", 6, 2, 1) + Estimates["AWS::DataSync::LocationFSxONTAP"] = NewResourceEstimate("AWS::DataSync::LocationFSxONTAP", 5, 2, 1) + Estimates["AWS::DataSync::LocationFSxOpenZFS"] = NewResourceEstimate("AWS::DataSync::LocationFSxOpenZFS", 6, 2, 1) + Estimates["AWS::DataSync::LocationFSxWindows"] = NewResourceEstimate("AWS::DataSync::LocationFSxWindows", 6, 2, 1) + Estimates["AWS::DataSync::LocationHDFS"] = NewResourceEstimate("AWS::DataSync::LocationHDFS", 5, 2, 1) + Estimates["AWS::DataSync::LocationNFS"] = NewResourceEstimate("AWS::DataSync::LocationNFS", 5, 2, 1) + Estimates["AWS::DataSync::LocationObjectStorage"] = NewResourceEstimate("AWS::DataSync::LocationObjectStorage", 5, 2, 1) + Estimates["AWS::DataSync::LocationS3"] = NewResourceEstimate("AWS::DataSync::LocationS3", 5, 2, 1) + Estimates["AWS::DataSync::LocationSMB"] = NewResourceEstimate("AWS::DataSync::LocationSMB", 6, 2, 1) + Estimates["AWS::DataSync::StorageSystem"] = NewResourceEstimate("AWS::DataSync::StorageSystem", 6, 2, 1) + Estimates["AWS::DataSync::Task"] = NewResourceEstimate("AWS::DataSync::Task", 4, 2, 1) + Estimates["AWS::DeadlineCloud::Fleet"] = NewResourceEstimate("AWS::DeadlineCloud::Fleet", 1, 71, 1) + Estimates["AWS::DeadlineCloud::Queue"] = NewResourceEstimate("AWS::DeadlineCloud::Queue", 3, 1, 1) + Estimates["AWS::Detective::Graph"] = NewResourceEstimate("AWS::Detective::Graph", 18, 2, 1) + Estimates["AWS::Detective::MemberInvitation"] = NewResourceEstimate("AWS::Detective::MemberInvitation", 32, 1, 1) + Estimates["AWS::Detective::OrganizationAdmin"] = NewResourceEstimate("AWS::Detective::OrganizationAdmin", 5, 1, 1) + Estimates["AWS::DevOpsGuru::LogAnomalyDetectionIntegration"] = NewResourceEstimate("AWS::DevOpsGuru::LogAnomalyDetectionIntegration", 2, 1, 1) + Estimates["AWS::DevOpsGuru::NotificationChannel"] = NewResourceEstimate("AWS::DevOpsGuru::NotificationChannel", 2, 1, 1) + Estimates["AWS::DevOpsGuru::ResourceCollection"] = NewResourceEstimate("AWS::DevOpsGuru::ResourceCollection", 2, 1, 1) + Estimates["AWS::DeviceFarm::DevicePool"] = NewResourceEstimate("AWS::DeviceFarm::DevicePool", 7, 3, 1) + Estimates["AWS::DeviceFarm::InstanceProfile"] = NewResourceEstimate("AWS::DeviceFarm::InstanceProfile", 6, 2, 1) + Estimates["AWS::DeviceFarm::NetworkProfile"] = NewResourceEstimate("AWS::DeviceFarm::NetworkProfile", 6, 2, 1) + Estimates["AWS::DeviceFarm::Project"] = NewResourceEstimate("AWS::DeviceFarm::Project", 5, 2, 1) + Estimates["AWS::DeviceFarm::TestGridProject"] = NewResourceEstimate("AWS::DeviceFarm::TestGridProject", 7, 2, 1) + Estimates["AWS::DeviceFarm::VPCEConfiguration"] = NewResourceEstimate("AWS::DeviceFarm::VPCEConfiguration", 6, 2, 1) + Estimates["AWS::DirectoryService::MicrosoftAD"] = NewResourceEstimate("AWS::DirectoryService::MicrosoftAD", 1698, 1, 1) + Estimates["AWS::DirectoryService::SimpleAD"] = NewResourceEstimate("AWS::DirectoryService::SimpleAD", 435, 2, 1) + Estimates["AWS::DocDB::DBCluster"] = NewResourceEstimate("AWS::DocDB::DBCluster", 68, 1, 1) + Estimates["AWS::DocDB::DBClusterParameterGroup"] = NewResourceEstimate("AWS::DocDB::DBClusterParameterGroup", 3, 2, 1) + Estimates["AWS::DocDB::DBInstance"] = NewResourceEstimate("AWS::DocDB::DBInstance", 298, 2, 1) + Estimates["AWS::DocDB::DBSubnetGroup"] = NewResourceEstimate("AWS::DocDB::DBSubnetGroup", 3, 2, 1) + Estimates["AWS::DocDB::EventSubscription"] = NewResourceEstimate("AWS::DocDB::EventSubscription", 2, 1, 1) + Estimates["AWS::DocDBElastic::Cluster"] = NewResourceEstimate("AWS::DocDBElastic::Cluster", 1299, 193, 1) + Estimates["AWS::DynamoDB::GlobalTable"] = NewResourceEstimate("AWS::DynamoDB::GlobalTable", 64, 13, 1) + Estimates["AWS::DynamoDB::Table"] = NewResourceEstimate("AWS::DynamoDB::Table", 15, 10, 1) + Estimates["AWS::EC2::CapacityReservation"] = NewResourceEstimate("AWS::EC2::CapacityReservation", 2, 2, 1) + Estimates["AWS::EC2::CapacityReservationFleet"] = NewResourceEstimate("AWS::EC2::CapacityReservationFleet", 33, 135, 1) + Estimates["AWS::EC2::CarrierGateway"] = NewResourceEstimate("AWS::EC2::CarrierGateway", 4, 4, 1) + Estimates["AWS::EC2::ClientVpnAuthorizationRule"] = NewResourceEstimate("AWS::EC2::ClientVpnAuthorizationRule", 240, 0, 1) + Estimates["AWS::EC2::ClientVpnEndpoint"] = NewResourceEstimate("AWS::EC2::ClientVpnEndpoint", 3, 2, 1) + Estimates["AWS::EC2::ClientVpnRoute"] = NewResourceEstimate("AWS::EC2::ClientVpnRoute", 37, 1, 1) + Estimates["AWS::EC2::ClientVpnTargetNetworkAssociation"] = NewResourceEstimate("AWS::EC2::ClientVpnTargetNetworkAssociation", 463, 0, 1) + Estimates["AWS::EC2::CoipCidr"] = NewResourceEstimate("AWS::EC2::CoipCidr", 4, 1, 1) + Estimates["AWS::EC2::CoipPool"] = NewResourceEstimate("AWS::EC2::CoipPool", 4, 4, 1) + Estimates["AWS::EC2::CustomerGateway"] = NewResourceEstimate("AWS::EC2::CustomerGateway", 17, 2, 1) + Estimates["AWS::EC2::DHCPOptions"] = NewResourceEstimate("AWS::EC2::DHCPOptions", 7, 7, 1) + Estimates["AWS::EC2::EC2Fleet"] = NewResourceEstimate("AWS::EC2::EC2Fleet", 3, 57, 1) + Estimates["AWS::EC2::EIP"] = NewResourceEstimate("AWS::EC2::EIP", 17, 2, 1) + Estimates["AWS::EC2::EIPAssociation"] = NewResourceEstimate("AWS::EC2::EIPAssociation", 5, 1, 1) + Estimates["AWS::EC2::EgressOnlyInternetGateway"] = NewResourceEstimate("AWS::EC2::EgressOnlyInternetGateway", 17, 1, 1) + Estimates["AWS::EC2::FlowLog"] = NewResourceEstimate("AWS::EC2::FlowLog", 2, 2, 1) + Estimates["AWS::EC2::GatewayRouteTableAssociation"] = NewResourceEstimate("AWS::EC2::GatewayRouteTableAssociation", 6, 6, 1) + Estimates["AWS::EC2::Host"] = NewResourceEstimate("AWS::EC2::Host", 17, 2, 1) + Estimates["AWS::EC2::IPAM"] = NewResourceEstimate("AWS::EC2::IPAM", 2, 2, 1) Estimates["AWS::EC2::IPAMAllocation"] = NewResourceEstimate("AWS::EC2::IPAMAllocation", 1, 1, 1) - Estimates["AWS::EC2::IPAMPool"] = NewResourceEstimate("AWS::EC2::IPAMPool", 1, 1, 1) - Estimates["AWS::EC2::IPAMPoolCidr"] = NewResourceEstimate("AWS::EC2::IPAMPoolCidr", 1, 1, 1) - Estimates["AWS::EC2::IPAMResourceDiscovery"] = NewResourceEstimate("AWS::EC2::IPAMResourceDiscovery", 1, 1, 1) - Estimates["AWS::EC2::IPAMResourceDiscoveryAssociation"] = NewResourceEstimate("AWS::EC2::IPAMResourceDiscoveryAssociation", 1, 1, 1) - Estimates["AWS::EC2::IPAMScope"] = NewResourceEstimate("AWS::EC2::IPAMScope", 1, 1, 1) - Estimates["AWS::EC2::Instance"] = NewResourceEstimate("AWS::EC2::Instance", 30, 15, 10) - Estimates["AWS::EC2::InstanceConnectEndpoint"] = NewResourceEstimate("AWS::EC2::InstanceConnectEndpoint", 1, 1, 1) - Estimates["AWS::EC2::InternetGateway"] = NewResourceEstimate("AWS::EC2::InternetGateway", 16, 16, 16) - Estimates["AWS::EC2::KeyPair"] = NewResourceEstimate("AWS::EC2::KeyPair", 1, 1, 1) - Estimates["AWS::EC2::LaunchTemplate"] = NewResourceEstimate("AWS::EC2::LaunchTemplate", 7, 6, 5) - Estimates["AWS::EC2::LocalGatewayRoute"] = NewResourceEstimate("AWS::EC2::LocalGatewayRoute", 1, 1, 1) - Estimates["AWS::EC2::LocalGatewayRouteTable"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTable", 1, 1, 1) - Estimates["AWS::EC2::LocalGatewayRouteTableVPCAssociation"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTableVPCAssociation", 1, 1, 1) - Estimates["AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation", 1, 1, 1) - Estimates["AWS::EC2::NatGateway"] = NewResourceEstimate("AWS::EC2::NatGateway", 107, 107, 107) - Estimates["AWS::EC2::NetworkAcl"] = NewResourceEstimate("AWS::EC2::NetworkAcl", 1, 1, 1) - Estimates["AWS::EC2::NetworkAclEntry"] = NewResourceEstimate("AWS::EC2::NetworkAclEntry", 1, 1, 1) - Estimates["AWS::EC2::NetworkInsightsAccessScope"] = NewResourceEstimate("AWS::EC2::NetworkInsightsAccessScope", 1, 1, 1) - Estimates["AWS::EC2::NetworkInsightsAccessScopeAnalysis"] = NewResourceEstimate("AWS::EC2::NetworkInsightsAccessScopeAnalysis", 1, 1, 1) - Estimates["AWS::EC2::NetworkInsightsAnalysis"] = NewResourceEstimate("AWS::EC2::NetworkInsightsAnalysis", 1, 1, 1) - Estimates["AWS::EC2::NetworkInsightsPath"] = NewResourceEstimate("AWS::EC2::NetworkInsightsPath", 1, 1, 1) - Estimates["AWS::EC2::NetworkInterface"] = NewResourceEstimate("AWS::EC2::NetworkInterface", 1, 1, 1) - Estimates["AWS::EC2::NetworkInterfaceAttachment"] = NewResourceEstimate("AWS::EC2::NetworkInterfaceAttachment", 1, 1, 1) - Estimates["AWS::EC2::NetworkInterfacePermission"] = NewResourceEstimate("AWS::EC2::NetworkInterfacePermission", 1, 1, 1) + Estimates["AWS::EC2::IPAMPool"] = NewResourceEstimate("AWS::EC2::IPAMPool", 18, 28, 1) + Estimates["AWS::EC2::IPAMPoolCidr"] = NewResourceEstimate("AWS::EC2::IPAMPoolCidr", 10, 1, 1) + Estimates["AWS::EC2::IPAMResourceDiscovery"] = NewResourceEstimate("AWS::EC2::IPAMResourceDiscovery", 2, 1, 1) + Estimates["AWS::EC2::IPAMResourceDiscoveryAssociation"] = NewResourceEstimate("AWS::EC2::IPAMResourceDiscoveryAssociation", 2, 1, 1) + Estimates["AWS::EC2::IPAMScope"] = NewResourceEstimate("AWS::EC2::IPAMScope", 2, 1, 1) + Estimates["AWS::EC2::Instance"] = NewResourceEstimate("AWS::EC2::Instance", 16, 16, 1) + Estimates["AWS::EC2::InstanceConnectEndpoint"] = NewResourceEstimate("AWS::EC2::InstanceConnectEndpoint", 316, 2, 1) + Estimates["AWS::EC2::InternetGateway"] = NewResourceEstimate("AWS::EC2::InternetGateway", 17, 16, 1) + Estimates["AWS::EC2::IpPoolRouteTableAssociation"] = NewResourceEstimate("AWS::EC2::IpPoolRouteTableAssociation", 6, 1, 1) + Estimates["AWS::EC2::KeyPair"] = NewResourceEstimate("AWS::EC2::KeyPair", 1, 0, 1) + Estimates["AWS::EC2::LaunchTemplate"] = NewResourceEstimate("AWS::EC2::LaunchTemplate", 6, 5, 1) + Estimates["AWS::EC2::LocalGatewayRoute"] = NewResourceEstimate("AWS::EC2::LocalGatewayRoute", 2, 2, 1) + Estimates["AWS::EC2::LocalGatewayRouteTable"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTable", 4, 4, 1) + Estimates["AWS::EC2::LocalGatewayRouteTableVPCAssociation"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTableVPCAssociation", 4, 4, 1) + Estimates["AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation"] = NewResourceEstimate("AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation", 4, 4, 1) + Estimates["AWS::EC2::NatGateway"] = NewResourceEstimate("AWS::EC2::NatGateway", 106, 5, 1) + Estimates["AWS::EC2::NetworkAcl"] = NewResourceEstimate("AWS::EC2::NetworkAcl", 17, 16, 1) + Estimates["AWS::EC2::NetworkAclEntry"] = NewResourceEstimate("AWS::EC2::NetworkAclEntry", 3, 1, 1) + Estimates["AWS::EC2::NetworkInsightsAccessScope"] = NewResourceEstimate("AWS::EC2::NetworkInsightsAccessScope", 2, 2, 1) + Estimates["AWS::EC2::NetworkInsightsAccessScopeAnalysis"] = NewResourceEstimate("AWS::EC2::NetworkInsightsAccessScopeAnalysis", 63, 2, 1) + Estimates["AWS::EC2::NetworkInsightsAnalysis"] = NewResourceEstimate("AWS::EC2::NetworkInsightsAnalysis", 23, 2, 1) + Estimates["AWS::EC2::NetworkInsightsPath"] = NewResourceEstimate("AWS::EC2::NetworkInsightsPath", 1, 2, 1) + Estimates["AWS::EC2::NetworkInterface"] = NewResourceEstimate("AWS::EC2::NetworkInterface", 12, 2, 1) + Estimates["AWS::EC2::NetworkInterfaceAttachment"] = NewResourceEstimate("AWS::EC2::NetworkInterfaceAttachment", 12, 11, 1) + Estimates["AWS::EC2::NetworkInterfacePermission"] = NewResourceEstimate("AWS::EC2::NetworkInterfacePermission", 16, 1, 1) Estimates["AWS::EC2::NetworkPerformanceMetricSubscription"] = NewResourceEstimate("AWS::EC2::NetworkPerformanceMetricSubscription", 1, 1, 1) - Estimates["AWS::EC2::PlacementGroup"] = NewResourceEstimate("AWS::EC2::PlacementGroup", 1, 1, 1) - Estimates["AWS::EC2::PrefixList"] = NewResourceEstimate("AWS::EC2::PrefixList", 1, 1, 1) - Estimates["AWS::EC2::Route"] = NewResourceEstimate("AWS::EC2::Route", 1, 1, 1) - Estimates["AWS::EC2::RouteTable"] = NewResourceEstimate("AWS::EC2::RouteTable", 14, 14, 14) - Estimates["AWS::EC2::SecurityGroup"] = NewResourceEstimate("AWS::EC2::SecurityGroup", 6, 6, 6) - Estimates["AWS::EC2::SecurityGroupEgress"] = NewResourceEstimate("AWS::EC2::SecurityGroupEgress", 1, 1, 1) - Estimates["AWS::EC2::SecurityGroupIngress"] = NewResourceEstimate("AWS::EC2::SecurityGroupIngress", 1, 1, 1) - Estimates["AWS::EC2::SpotFleet"] = NewResourceEstimate("AWS::EC2::SpotFleet", 1, 1, 1) - Estimates["AWS::EC2::Subnet"] = NewResourceEstimate("AWS::EC2::Subnet", 5, 5, 5) - Estimates["AWS::EC2::SubnetCidrBlock"] = NewResourceEstimate("AWS::EC2::SubnetCidrBlock", 1, 1, 1) - Estimates["AWS::EC2::SubnetNetworkAclAssociation"] = NewResourceEstimate("AWS::EC2::SubnetNetworkAclAssociation", 1, 1, 1) - Estimates["AWS::EC2::SubnetRouteTableAssociation"] = NewResourceEstimate("AWS::EC2::SubnetRouteTableAssociation", 2, 2, 2) - Estimates["AWS::EC2::TrafficMirrorFilter"] = NewResourceEstimate("AWS::EC2::TrafficMirrorFilter", 1, 1, 1) - Estimates["AWS::EC2::TrafficMirrorFilterRule"] = NewResourceEstimate("AWS::EC2::TrafficMirrorFilterRule", 1, 1, 1) - Estimates["AWS::EC2::TrafficMirrorSession"] = NewResourceEstimate("AWS::EC2::TrafficMirrorSession", 1, 1, 1) - Estimates["AWS::EC2::TrafficMirrorTarget"] = NewResourceEstimate("AWS::EC2::TrafficMirrorTarget", 1, 1, 1) - Estimates["AWS::EC2::TransitGateway"] = NewResourceEstimate("AWS::EC2::TransitGateway", 1, 1, 1) - Estimates["AWS::EC2::TransitGatewayAttachment"] = NewResourceEstimate("AWS::EC2::TransitGatewayAttachment", 1, 1, 1) - Estimates["AWS::EC2::TransitGatewayConnect"] = NewResourceEstimate("AWS::EC2::TransitGatewayConnect", 1, 1, 1) - Estimates["AWS::EC2::TransitGatewayMulticastDomain"] = NewResourceEstimate("AWS::EC2::TransitGatewayMulticastDomain", 1, 1, 1) - Estimates["AWS::EC2::TransitGatewayMulticastDomainAssociation"] = NewResourceEstimate("AWS::EC2::TransitGatewayMulticastDomainAssociation", 1, 1, 1) - Estimates["AWS::EC2::TransitGatewayMulticastGroupMember"] = NewResourceEstimate("AWS::EC2::TransitGatewayMulticastGroupMember", 1, 1, 1) - Estimates["AWS::EC2::TransitGatewayMulticastGroupSource"] = NewResourceEstimate("AWS::EC2::TransitGatewayMulticastGroupSource", 1, 1, 1) - Estimates["AWS::EC2::TransitGatewayPeeringAttachment"] = NewResourceEstimate("AWS::EC2::TransitGatewayPeeringAttachment", 1, 1, 1) - Estimates["AWS::EC2::TransitGatewayRoute"] = NewResourceEstimate("AWS::EC2::TransitGatewayRoute", 1, 1, 1) - Estimates["AWS::EC2::TransitGatewayRouteTable"] = NewResourceEstimate("AWS::EC2::TransitGatewayRouteTable", 1, 1, 1) - Estimates["AWS::EC2::TransitGatewayRouteTableAssociation"] = NewResourceEstimate("AWS::EC2::TransitGatewayRouteTableAssociation", 1, 1, 1) + Estimates["AWS::EC2::PlacementGroup"] = NewResourceEstimate("AWS::EC2::PlacementGroup", 17, 0, 1) + Estimates["AWS::EC2::PrefixList"] = NewResourceEstimate("AWS::EC2::PrefixList", 6, 5, 1) + Estimates["AWS::EC2::Route"] = NewResourceEstimate("AWS::EC2::Route", 2, 0, 1) + Estimates["AWS::EC2::RouteTable"] = NewResourceEstimate("AWS::EC2::RouteTable", 12, 11, 1) + Estimates["AWS::EC2::SecurityGroup"] = NewResourceEstimate("AWS::EC2::SecurityGroup", 6, 2, 1) + Estimates["AWS::EC2::SecurityGroupEgress"] = NewResourceEstimate("AWS::EC2::SecurityGroupEgress", 3, 1, 1) + Estimates["AWS::EC2::SecurityGroupIngress"] = NewResourceEstimate("AWS::EC2::SecurityGroupIngress", 2, 1, 1) + Estimates["AWS::EC2::SpotFleet"] = NewResourceEstimate("AWS::EC2::SpotFleet", 4, 64, 1) + Estimates["AWS::EC2::Subnet"] = NewResourceEstimate("AWS::EC2::Subnet", 4, 10, 1) + Estimates["AWS::EC2::SubnetCidrBlock"] = NewResourceEstimate("AWS::EC2::SubnetCidrBlock", 2, 1, 1) + Estimates["AWS::EC2::SubnetNetworkAclAssociation"] = NewResourceEstimate("AWS::EC2::SubnetNetworkAclAssociation", 13, 1, 1) + Estimates["AWS::EC2::SubnetRouteTableAssociation"] = NewResourceEstimate("AWS::EC2::SubnetRouteTableAssociation", 2, 0, 1) + Estimates["AWS::EC2::TrafficMirrorFilter"] = NewResourceEstimate("AWS::EC2::TrafficMirrorFilter", 2, 5, 1) + Estimates["AWS::EC2::TrafficMirrorFilterRule"] = NewResourceEstimate("AWS::EC2::TrafficMirrorFilterRule", 1, 3, 1) + Estimates["AWS::EC2::TrafficMirrorSession"] = NewResourceEstimate("AWS::EC2::TrafficMirrorSession", 2, 3, 1) + Estimates["AWS::EC2::TrafficMirrorTarget"] = NewResourceEstimate("AWS::EC2::TrafficMirrorTarget", 2, 6, 1) + Estimates["AWS::EC2::TransitGateway"] = NewResourceEstimate("AWS::EC2::TransitGateway", 53, 2, 1) + Estimates["AWS::EC2::TransitGatewayAttachment"] = NewResourceEstimate("AWS::EC2::TransitGatewayAttachment", 50, 29, 1) + Estimates["AWS::EC2::TransitGatewayConnect"] = NewResourceEstimate("AWS::EC2::TransitGatewayConnect", 2, 1, 1) + Estimates["AWS::EC2::TransitGatewayMulticastDomain"] = NewResourceEstimate("AWS::EC2::TransitGatewayMulticastDomain", 17, 1, 1) + Estimates["AWS::EC2::TransitGatewayMulticastDomainAssociation"] = NewResourceEstimate("AWS::EC2::TransitGatewayMulticastDomainAssociation", 18, 1, 1) + Estimates["AWS::EC2::TransitGatewayMulticastGroupMember"] = NewResourceEstimate("AWS::EC2::TransitGatewayMulticastGroupMember", 7, 1, 1) + Estimates["AWS::EC2::TransitGatewayMulticastGroupSource"] = NewResourceEstimate("AWS::EC2::TransitGatewayMulticastGroupSource", 7, 1, 1) + Estimates["AWS::EC2::TransitGatewayPeeringAttachment"] = NewResourceEstimate("AWS::EC2::TransitGatewayPeeringAttachment", 39, 1, 1) + Estimates["AWS::EC2::TransitGatewayPolicyTable"] = NewResourceEstimate("AWS::EC2::TransitGatewayPolicyTable", 2, 1, 1) + Estimates["AWS::EC2::TransitGatewayPolicyTableAssociation"] = NewResourceEstimate("AWS::EC2::TransitGatewayPolicyTableAssociation", 35, 1, 1) + Estimates["AWS::EC2::TransitGatewayRoute"] = NewResourceEstimate("AWS::EC2::TransitGatewayRoute", 1, 0, 1) + Estimates["AWS::EC2::TransitGatewayRouteTable"] = NewResourceEstimate("AWS::EC2::TransitGatewayRouteTable", 8, 0, 1) + Estimates["AWS::EC2::TransitGatewayRouteTableAnnouncement"] = NewResourceEstimate("AWS::EC2::TransitGatewayRouteTableAnnouncement", 83, 1, 1) + Estimates["AWS::EC2::TransitGatewayRouteTableAssociation"] = NewResourceEstimate("AWS::EC2::TransitGatewayRouteTableAssociation", 2, 0, 1) Estimates["AWS::EC2::TransitGatewayRouteTablePropagation"] = NewResourceEstimate("AWS::EC2::TransitGatewayRouteTablePropagation", 1, 1, 1) - Estimates["AWS::EC2::TransitGatewayVpcAttachment"] = NewResourceEstimate("AWS::EC2::TransitGatewayVpcAttachment", 1, 1, 1) - Estimates["AWS::EC2::VPC"] = NewResourceEstimate("AWS::EC2::VPC", 12, 12, 12) - Estimates["AWS::EC2::VPCCidrBlock"] = NewResourceEstimate("AWS::EC2::VPCCidrBlock", 1, 1, 1) - Estimates["AWS::EC2::VPCDHCPOptionsAssociation"] = NewResourceEstimate("AWS::EC2::VPCDHCPOptionsAssociation", 1, 1, 1) - Estimates["AWS::EC2::VPCEndpoint"] = NewResourceEstimate("AWS::EC2::VPCEndpoint", 1, 1, 1) - Estimates["AWS::EC2::VPCEndpointConnectionNotification"] = NewResourceEstimate("AWS::EC2::VPCEndpointConnectionNotification", 1, 1, 1) - Estimates["AWS::EC2::VPCEndpointService"] = NewResourceEstimate("AWS::EC2::VPCEndpointService", 1, 1, 1) - Estimates["AWS::EC2::VPCEndpointServicePermissions"] = NewResourceEstimate("AWS::EC2::VPCEndpointServicePermissions", 1, 1, 1) - Estimates["AWS::EC2::VPCGatewayAttachment"] = NewResourceEstimate("AWS::EC2::VPCGatewayAttachment", 1, 1, 1) - Estimates["AWS::EC2::VPCPeeringConnection"] = NewResourceEstimate("AWS::EC2::VPCPeeringConnection", 1, 1, 1) - Estimates["AWS::EC2::VPNConnection"] = NewResourceEstimate("AWS::EC2::VPNConnection", 1, 1, 1) - Estimates["AWS::EC2::VPNConnectionRoute"] = NewResourceEstimate("AWS::EC2::VPNConnectionRoute", 1, 1, 1) - Estimates["AWS::EC2::VPNGateway"] = NewResourceEstimate("AWS::EC2::VPNGateway", 1, 1, 1) - Estimates["AWS::EC2::VPNGatewayRoutePropagation"] = NewResourceEstimate("AWS::EC2::VPNGatewayRoutePropagation", 1, 1, 1) - Estimates["AWS::EC2::VerifiedAccessEndpoint"] = NewResourceEstimate("AWS::EC2::VerifiedAccessEndpoint", 1, 1, 1) - Estimates["AWS::EC2::VerifiedAccessGroup"] = NewResourceEstimate("AWS::EC2::VerifiedAccessGroup", 1, 1, 1) - Estimates["AWS::EC2::VerifiedAccessInstance"] = NewResourceEstimate("AWS::EC2::VerifiedAccessInstance", 1, 1, 1) - Estimates["AWS::EC2::VerifiedAccessTrustProvider"] = NewResourceEstimate("AWS::EC2::VerifiedAccessTrustProvider", 1, 1, 1) - Estimates["AWS::EC2::Volume"] = NewResourceEstimate("AWS::EC2::Volume", 1, 1, 1) - Estimates["AWS::EC2::VolumeAttachment"] = NewResourceEstimate("AWS::EC2::VolumeAttachment", 1, 1, 1) - Estimates["AWS::ECR::PublicRepository"] = NewResourceEstimate("AWS::ECR::PublicRepository", 1, 1, 1) + Estimates["AWS::EC2::TransitGatewayVpcAttachment"] = NewResourceEstimate("AWS::EC2::TransitGatewayVpcAttachment", 49, 4, 1) + Estimates["AWS::EC2::VPC"] = NewResourceEstimate("AWS::EC2::VPC", 12, 2, 1) + Estimates["AWS::EC2::VPCCidrBlock"] = NewResourceEstimate("AWS::EC2::VPCCidrBlock", 23, 1, 1) + Estimates["AWS::EC2::VPCDHCPOptionsAssociation"] = NewResourceEstimate("AWS::EC2::VPCDHCPOptionsAssociation", 1, 4, 1) + Estimates["AWS::EC2::VPCEndpoint"] = NewResourceEstimate("AWS::EC2::VPCEndpoint", 47, 11, 1) + Estimates["AWS::EC2::VPCEndpointConnectionNotification"] = NewResourceEstimate("AWS::EC2::VPCEndpointConnectionNotification", 3, 1, 1) + Estimates["AWS::EC2::VPCEndpointService"] = NewResourceEstimate("AWS::EC2::VPCEndpointService", 6, 0, 1) + Estimates["AWS::EC2::VPCEndpointServicePermissions"] = NewResourceEstimate("AWS::EC2::VPCEndpointServicePermissions", 3, 3, 1) + Estimates["AWS::EC2::VPCGatewayAttachment"] = NewResourceEstimate("AWS::EC2::VPCGatewayAttachment", 12, 11, 1) + Estimates["AWS::EC2::VPCPeeringConnection"] = NewResourceEstimate("AWS::EC2::VPCPeeringConnection", 10, 1, 1) + Estimates["AWS::EC2::VPNConnection"] = NewResourceEstimate("AWS::EC2::VPNConnection", 165, 2, 1) + Estimates["AWS::EC2::VPNConnectionRoute"] = NewResourceEstimate("AWS::EC2::VPNConnectionRoute", 18, 1, 1) + Estimates["AWS::EC2::VPNGateway"] = NewResourceEstimate("AWS::EC2::VPNGateway", 7, 2, 1) + Estimates["AWS::EC2::VPNGatewayRoutePropagation"] = NewResourceEstimate("AWS::EC2::VPNGatewayRoutePropagation", 18, 18, 1) + Estimates["AWS::EC2::VerifiedAccessEndpoint"] = NewResourceEstimate("AWS::EC2::VerifiedAccessEndpoint", 783, 303, 1) + Estimates["AWS::EC2::VerifiedAccessGroup"] = NewResourceEstimate("AWS::EC2::VerifiedAccessGroup", 2, 2, 1) + Estimates["AWS::EC2::VerifiedAccessInstance"] = NewResourceEstimate("AWS::EC2::VerifiedAccessInstance", 2, 3, 1) + Estimates["AWS::EC2::VerifiedAccessTrustProvider"] = NewResourceEstimate("AWS::EC2::VerifiedAccessTrustProvider", 2, 2, 1) + Estimates["AWS::EC2::Volume"] = NewResourceEstimate("AWS::EC2::Volume", 7, 7, 1) + Estimates["AWS::EC2::VolumeAttachment"] = NewResourceEstimate("AWS::EC2::VolumeAttachment", 7, 0, 1) + Estimates["AWS::ECR::PublicRepository"] = NewResourceEstimate("AWS::ECR::PublicRepository", 2, 2, 1) Estimates["AWS::ECR::PullThroughCacheRule"] = NewResourceEstimate("AWS::ECR::PullThroughCacheRule", 1, 1, 1) Estimates["AWS::ECR::RegistryPolicy"] = NewResourceEstimate("AWS::ECR::RegistryPolicy", 1, 1, 1) Estimates["AWS::ECR::ReplicationConfiguration"] = NewResourceEstimate("AWS::ECR::ReplicationConfiguration", 1, 1, 1) - Estimates["AWS::ECR::Repository"] = NewResourceEstimate("AWS::ECR::Repository", 1, 1, 1) - Estimates["AWS::ECS::CapacityProvider"] = NewResourceEstimate("AWS::ECS::CapacityProvider", 1, 1, 1) - Estimates["AWS::ECS::Cluster"] = NewResourceEstimate("AWS::ECS::Cluster", 4, 4, 4) - Estimates["AWS::ECS::ClusterCapacityProviderAssociations"] = NewResourceEstimate("AWS::ECS::ClusterCapacityProviderAssociations", 1, 1, 1) - Estimates["AWS::ECS::PrimaryTaskSet"] = NewResourceEstimate("AWS::ECS::PrimaryTaskSet", 1, 1, 1) - Estimates["AWS::ECS::Service"] = NewResourceEstimate("AWS::ECS::Service", 92, 92, 92) - Estimates["AWS::ECS::TaskDefinition"] = NewResourceEstimate("AWS::ECS::TaskDefinition", 2, 2, 2) - Estimates["AWS::ECS::TaskSet"] = NewResourceEstimate("AWS::ECS::TaskSet", 1, 1, 1) - Estimates["AWS::EFS::AccessPoint"] = NewResourceEstimate("AWS::EFS::AccessPoint", 1, 1, 1) - Estimates["AWS::EFS::FileSystem"] = NewResourceEstimate("AWS::EFS::FileSystem", 1, 1, 1) - Estimates["AWS::EFS::MountTarget"] = NewResourceEstimate("AWS::EFS::MountTarget", 1, 1, 1) - Estimates["AWS::EKS::Addon"] = NewResourceEstimate("AWS::EKS::Addon", 1, 1, 1) - Estimates["AWS::EKS::Cluster"] = NewResourceEstimate("AWS::EKS::Cluster", 1, 1, 1) - Estimates["AWS::EKS::FargateProfile"] = NewResourceEstimate("AWS::EKS::FargateProfile", 1, 1, 1) - Estimates["AWS::EKS::IdentityProviderConfig"] = NewResourceEstimate("AWS::EKS::IdentityProviderConfig", 1, 1, 1) - Estimates["AWS::EKS::Nodegroup"] = NewResourceEstimate("AWS::EKS::Nodegroup", 1, 1, 1) - Estimates["AWS::EMR::Cluster"] = NewResourceEstimate("AWS::EMR::Cluster", 1, 1, 1) - Estimates["AWS::EMR::InstanceFleetConfig"] = NewResourceEstimate("AWS::EMR::InstanceFleetConfig", 1, 1, 1) - Estimates["AWS::EMR::InstanceGroupConfig"] = NewResourceEstimate("AWS::EMR::InstanceGroupConfig", 1, 1, 1) - Estimates["AWS::EMR::SecurityConfiguration"] = NewResourceEstimate("AWS::EMR::SecurityConfiguration", 1, 1, 1) - Estimates["AWS::EMR::Step"] = NewResourceEstimate("AWS::EMR::Step", 1, 1, 1) - Estimates["AWS::EMR::Studio"] = NewResourceEstimate("AWS::EMR::Studio", 1, 1, 1) - Estimates["AWS::EMR::StudioSessionMapping"] = NewResourceEstimate("AWS::EMR::StudioSessionMapping", 1, 1, 1) + Estimates["AWS::ECR::Repository"] = NewResourceEstimate("AWS::ECR::Repository", 1, 2, 1) + Estimates["AWS::ECS::CapacityProvider"] = NewResourceEstimate("AWS::ECS::CapacityProvider", 2, 1, 1) + Estimates["AWS::ECS::Cluster"] = NewResourceEstimate("AWS::ECS::Cluster", 5, 2, 1) + Estimates["AWS::ECS::ClusterCapacityProviderAssociations"] = NewResourceEstimate("AWS::ECS::ClusterCapacityProviderAssociations", 13, 31, 1) + Estimates["AWS::ECS::PrimaryTaskSet"] = NewResourceEstimate("AWS::ECS::PrimaryTaskSet", 6, 6, 1) + Estimates["AWS::ECS::Service"] = NewResourceEstimate("AWS::ECS::Service", 119, 71, 1) + Estimates["AWS::ECS::TaskDefinition"] = NewResourceEstimate("AWS::ECS::TaskDefinition", 4, 2, 1) + Estimates["AWS::ECS::TaskSet"] = NewResourceEstimate("AWS::ECS::TaskSet", 62, 5, 1) + Estimates["AWS::EFS::AccessPoint"] = NewResourceEstimate("AWS::EFS::AccessPoint", 5, 2, 1) + Estimates["AWS::EFS::FileSystem"] = NewResourceEstimate("AWS::EFS::FileSystem", 5, 5, 1) + Estimates["AWS::EFS::MountTarget"] = NewResourceEstimate("AWS::EFS::MountTarget", 93, 0, 1) + Estimates["AWS::EKS::Addon"] = NewResourceEstimate("AWS::EKS::Addon", 15, 9, 1) + Estimates["AWS::EKS::Cluster"] = NewResourceEstimate("AWS::EKS::Cluster", 544, 285, 1) + Estimates["AWS::EKS::FargateProfile"] = NewResourceEstimate("AWS::EKS::FargateProfile", 18, 2, 1) + Estimates["AWS::EKS::IdentityProviderConfig"] = NewResourceEstimate("AWS::EKS::IdentityProviderConfig", 433, 2, 1) + Estimates["AWS::EKS::Nodegroup"] = NewResourceEstimate("AWS::EKS::Nodegroup", 160, 671, 1) + Estimates["AWS::EMR::Cluster"] = NewResourceEstimate("AWS::EMR::Cluster", 503, 11, 1) + Estimates["AWS::EMR::InstanceFleetConfig"] = NewResourceEstimate("AWS::EMR::InstanceFleetConfig", 308, 1, 1) + Estimates["AWS::EMR::InstanceGroupConfig"] = NewResourceEstimate("AWS::EMR::InstanceGroupConfig", 192, 0, 1) + Estimates["AWS::EMR::SecurityConfiguration"] = NewResourceEstimate("AWS::EMR::SecurityConfiguration", 1, 0, 1) + Estimates["AWS::EMR::Step"] = NewResourceEstimate("AWS::EMR::Step", 7, 1, 1) + Estimates["AWS::EMR::Studio"] = NewResourceEstimate("AWS::EMR::Studio", 2, 2, 1) + Estimates["AWS::EMR::StudioSessionMapping"] = NewResourceEstimate("AWS::EMR::StudioSessionMapping", 2, 2, 1) Estimates["AWS::EMR::WALWorkspace"] = NewResourceEstimate("AWS::EMR::WALWorkspace", 1, 1, 1) - Estimates["AWS::EMRContainers::VirtualCluster"] = NewResourceEstimate("AWS::EMRContainers::VirtualCluster", 1, 1, 1) - Estimates["AWS::EMRServerless::Application"] = NewResourceEstimate("AWS::EMRServerless::Application", 1, 1, 1) - Estimates["AWS::ElastiCache::CacheCluster"] = NewResourceEstimate("AWS::ElastiCache::CacheCluster", 1, 1, 1) - Estimates["AWS::ElastiCache::GlobalReplicationGroup"] = NewResourceEstimate("AWS::ElastiCache::GlobalReplicationGroup", 1, 1, 1) - Estimates["AWS::ElastiCache::ParameterGroup"] = NewResourceEstimate("AWS::ElastiCache::ParameterGroup", 1, 1, 1) - Estimates["AWS::ElastiCache::ReplicationGroup"] = NewResourceEstimate("AWS::ElastiCache::ReplicationGroup", 1, 1, 1) + Estimates["AWS::EMRContainers::VirtualCluster"] = NewResourceEstimate("AWS::EMRContainers::VirtualCluster", 2, 2, 1) + Estimates["AWS::EMRServerless::Application"] = NewResourceEstimate("AWS::EMRServerless::Application", 2, 2, 1) + Estimates["AWS::ElastiCache::CacheCluster"] = NewResourceEstimate("AWS::ElastiCache::CacheCluster", 344, 113, 1) + Estimates["AWS::ElastiCache::GlobalReplicationGroup"] = NewResourceEstimate("AWS::ElastiCache::GlobalReplicationGroup", 119, 1, 1) + Estimates["AWS::ElastiCache::ParameterGroup"] = NewResourceEstimate("AWS::ElastiCache::ParameterGroup", 1, 2, 1) + Estimates["AWS::ElastiCache::ReplicationGroup"] = NewResourceEstimate("AWS::ElastiCache::ReplicationGroup", 712, 208, 1) Estimates["AWS::ElastiCache::SecurityGroup"] = NewResourceEstimate("AWS::ElastiCache::SecurityGroup", 1, 1, 1) - Estimates["AWS::ElastiCache::SecurityGroupIngress"] = NewResourceEstimate("AWS::ElastiCache::SecurityGroupIngress", 1, 1, 1) - Estimates["AWS::ElastiCache::SubnetGroup"] = NewResourceEstimate("AWS::ElastiCache::SubnetGroup", 1, 1, 1) - Estimates["AWS::ElastiCache::User"] = NewResourceEstimate("AWS::ElastiCache::User", 1, 1, 1) - Estimates["AWS::ElastiCache::UserGroup"] = NewResourceEstimate("AWS::ElastiCache::UserGroup", 1, 1, 1) - Estimates["AWS::ElasticBeanstalk::Application"] = NewResourceEstimate("AWS::ElasticBeanstalk::Application", 1, 1, 1) - Estimates["AWS::ElasticBeanstalk::ApplicationVersion"] = NewResourceEstimate("AWS::ElasticBeanstalk::ApplicationVersion", 1, 1, 1) - Estimates["AWS::ElasticBeanstalk::ConfigurationTemplate"] = NewResourceEstimate("AWS::ElasticBeanstalk::ConfigurationTemplate", 1, 1, 1) - Estimates["AWS::ElasticBeanstalk::Environment"] = NewResourceEstimate("AWS::ElasticBeanstalk::Environment", 1, 1, 1) - Estimates["AWS::ElasticLoadBalancing::LoadBalancer"] = NewResourceEstimate("AWS::ElasticLoadBalancing::LoadBalancer", 122, 122, 122) - Estimates["AWS::ElasticLoadBalancingV2::Listener"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::Listener", 2, 2, 2) + Estimates["AWS::ElastiCache::SubnetGroup"] = NewResourceEstimate("AWS::ElastiCache::SubnetGroup", 2, 2, 1) + Estimates["AWS::ElastiCache::User"] = NewResourceEstimate("AWS::ElastiCache::User", 2, 1, 1) + Estimates["AWS::ElastiCache::UserGroup"] = NewResourceEstimate("AWS::ElastiCache::UserGroup", 42, 2, 1) + Estimates["AWS::ElasticBeanstalk::Application"] = NewResourceEstimate("AWS::ElasticBeanstalk::Application", 7, 1, 1) + Estimates["AWS::ElasticBeanstalk::ApplicationVersion"] = NewResourceEstimate("AWS::ElasticBeanstalk::ApplicationVersion", 7, 1, 1) + Estimates["AWS::ElasticBeanstalk::ConfigurationTemplate"] = NewResourceEstimate("AWS::ElasticBeanstalk::ConfigurationTemplate", 2, 1, 1) + Estimates["AWS::ElasticBeanstalk::Environment"] = NewResourceEstimate("AWS::ElasticBeanstalk::Environment", 252, 391, 1) + Estimates["AWS::ElasticLoadBalancing::LoadBalancer"] = NewResourceEstimate("AWS::ElasticLoadBalancing::LoadBalancer", 2, 0, 1) + Estimates["AWS::ElasticLoadBalancingV2::Listener"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::Listener", 2, 1, 1) Estimates["AWS::ElasticLoadBalancingV2::ListenerCertificate"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::ListenerCertificate", 1, 1, 1) - Estimates["AWS::ElasticLoadBalancingV2::ListenerRule"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::ListenerRule", 1, 1, 1) - Estimates["AWS::ElasticLoadBalancingV2::LoadBalancer"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::LoadBalancer", 122, 122, 122) - Estimates["AWS::ElasticLoadBalancingV2::TargetGroup"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::TargetGroup", 17, 17, 17) - Estimates["AWS::Elasticsearch::Domain"] = NewResourceEstimate("AWS::Elasticsearch::Domain", 1, 1, 1) - Estimates["AWS::EntityResolution::MatchingWorkflow"] = NewResourceEstimate("AWS::EntityResolution::MatchingWorkflow", 1, 1, 1) - Estimates["AWS::EntityResolution::SchemaMapping"] = NewResourceEstimate("AWS::EntityResolution::SchemaMapping", 1, 1, 1) - Estimates["AWS::EventSchemas::Discoverer"] = NewResourceEstimate("AWS::EventSchemas::Discoverer", 1, 1, 1) - Estimates["AWS::EventSchemas::Registry"] = NewResourceEstimate("AWS::EventSchemas::Registry", 1, 1, 1) - Estimates["AWS::EventSchemas::RegistryPolicy"] = NewResourceEstimate("AWS::EventSchemas::RegistryPolicy", 1, 1, 1) - Estimates["AWS::EventSchemas::Schema"] = NewResourceEstimate("AWS::EventSchemas::Schema", 1, 1, 1) + Estimates["AWS::ElasticLoadBalancingV2::ListenerRule"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::ListenerRule", 2, 1, 1) + Estimates["AWS::ElasticLoadBalancingV2::LoadBalancer"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::LoadBalancer", 116, 2, 1) + Estimates["AWS::ElasticLoadBalancingV2::TargetGroup"] = NewResourceEstimate("AWS::ElasticLoadBalancingV2::TargetGroup", 18, 6, 1) + Estimates["AWS::Elasticsearch::Domain"] = NewResourceEstimate("AWS::Elasticsearch::Domain", 1070, 281, 1) + Estimates["AWS::EntityResolution::SchemaMapping"] = NewResourceEstimate("AWS::EntityResolution::SchemaMapping", 2, 1, 1) + Estimates["AWS::EventSchemas::Discoverer"] = NewResourceEstimate("AWS::EventSchemas::Discoverer", 2, 1, 1) + Estimates["AWS::EventSchemas::Registry"] = NewResourceEstimate("AWS::EventSchemas::Registry", 2, 2, 1) + Estimates["AWS::EventSchemas::RegistryPolicy"] = NewResourceEstimate("AWS::EventSchemas::RegistryPolicy", 3, 3, 1) + Estimates["AWS::EventSchemas::Schema"] = NewResourceEstimate("AWS::EventSchemas::Schema", 2, 3, 1) Estimates["AWS::Events::ApiDestination"] = NewResourceEstimate("AWS::Events::ApiDestination", 1, 1, 1) - Estimates["AWS::Events::Archive"] = NewResourceEstimate("AWS::Events::Archive", 1, 1, 1) - Estimates["AWS::Events::Connection"] = NewResourceEstimate("AWS::Events::Connection", 1, 1, 1) - Estimates["AWS::Events::Endpoint"] = NewResourceEstimate("AWS::Events::Endpoint", 1, 1, 1) + Estimates["AWS::Events::Archive"] = NewResourceEstimate("AWS::Events::Archive", 1, 2, 1) + Estimates["AWS::Events::Connection"] = NewResourceEstimate("AWS::Events::Connection", 2, 2, 1) + Estimates["AWS::Events::Endpoint"] = NewResourceEstimate("AWS::Events::Endpoint", 6, 11, 1) Estimates["AWS::Events::EventBus"] = NewResourceEstimate("AWS::Events::EventBus", 1, 1, 1) Estimates["AWS::Events::EventBusPolicy"] = NewResourceEstimate("AWS::Events::EventBusPolicy", 1, 1, 1) - Estimates["AWS::Events::Rule"] = NewResourceEstimate("AWS::Events::Rule", 1, 1, 1) - Estimates["AWS::Evidently::Experiment"] = NewResourceEstimate("AWS::Evidently::Experiment", 1, 1, 1) - Estimates["AWS::Evidently::Feature"] = NewResourceEstimate("AWS::Evidently::Feature", 1, 1, 1) - Estimates["AWS::Evidently::Launch"] = NewResourceEstimate("AWS::Evidently::Launch", 1, 1, 1) - Estimates["AWS::Evidently::Project"] = NewResourceEstimate("AWS::Evidently::Project", 1, 1, 1) - Estimates["AWS::Evidently::Segment"] = NewResourceEstimate("AWS::Evidently::Segment", 1, 1, 1) - Estimates["AWS::FIS::ExperimentTemplate"] = NewResourceEstimate("AWS::FIS::ExperimentTemplate", 1, 1, 1) - Estimates["AWS::FMS::NotificationChannel"] = NewResourceEstimate("AWS::FMS::NotificationChannel", 1, 1, 1) - Estimates["AWS::FMS::Policy"] = NewResourceEstimate("AWS::FMS::Policy", 1, 1, 1) - Estimates["AWS::FMS::ResourceSet"] = NewResourceEstimate("AWS::FMS::ResourceSet", 1, 1, 1) - Estimates["AWS::FSx::DataRepositoryAssociation"] = NewResourceEstimate("AWS::FSx::DataRepositoryAssociation", 1, 1, 1) - Estimates["AWS::FSx::FileSystem"] = NewResourceEstimate("AWS::FSx::FileSystem", 1, 1, 1) - Estimates["AWS::FSx::Snapshot"] = NewResourceEstimate("AWS::FSx::Snapshot", 1, 1, 1) - Estimates["AWS::FSx::StorageVirtualMachine"] = NewResourceEstimate("AWS::FSx::StorageVirtualMachine", 1, 1, 1) - Estimates["AWS::FSx::Volume"] = NewResourceEstimate("AWS::FSx::Volume", 1, 1, 1) - Estimates["AWS::FinSpace::Environment"] = NewResourceEstimate("AWS::FinSpace::Environment", 1, 1, 1) - Estimates["AWS::Forecast::Dataset"] = NewResourceEstimate("AWS::Forecast::Dataset", 1, 1, 1) + Estimates["AWS::Events::Rule"] = NewResourceEstimate("AWS::Events::Rule", 62, 1, 1) + Estimates["AWS::Evidently::Experiment"] = NewResourceEstimate("AWS::Evidently::Experiment", 2, 2, 1) + Estimates["AWS::Evidently::Feature"] = NewResourceEstimate("AWS::Evidently::Feature", 2, 2, 1) + Estimates["AWS::Evidently::Launch"] = NewResourceEstimate("AWS::Evidently::Launch", 2, 2, 1) + Estimates["AWS::Evidently::Project"] = NewResourceEstimate("AWS::Evidently::Project", 2, 2, 1) + Estimates["AWS::Evidently::Segment"] = NewResourceEstimate("AWS::Evidently::Segment", 2, 1, 1) + Estimates["AWS::FIS::ExperimentTemplate"] = NewResourceEstimate("AWS::FIS::ExperimentTemplate", 2, 5, 1) + Estimates["AWS::FMS::NotificationChannel"] = NewResourceEstimate("AWS::FMS::NotificationChannel", 2, 6, 1) + Estimates["AWS::FMS::Policy"] = NewResourceEstimate("AWS::FMS::Policy", 2, 3, 1) + Estimates["AWS::FMS::ResourceSet"] = NewResourceEstimate("AWS::FMS::ResourceSet", 2, 2, 1) + Estimates["AWS::FSx::DataRepositoryAssociation"] = NewResourceEstimate("AWS::FSx::DataRepositoryAssociation", 73, 28, 1) + Estimates["AWS::FSx::FileSystem"] = NewResourceEstimate("AWS::FSx::FileSystem", 637, 331, 1) + Estimates["AWS::FSx::Snapshot"] = NewResourceEstimate("AWS::FSx::Snapshot", 62, 32, 1) + Estimates["AWS::FSx::StorageVirtualMachine"] = NewResourceEstimate("AWS::FSx::StorageVirtualMachine", 176, 32, 1) + Estimates["AWS::FSx::Volume"] = NewResourceEstimate("AWS::FSx::Volume", 65, 39, 1) + Estimates["AWS::Forecast::Dataset"] = NewResourceEstimate("AWS::Forecast::Dataset", 2, 1, 1) Estimates["AWS::Forecast::DatasetGroup"] = NewResourceEstimate("AWS::Forecast::DatasetGroup", 1, 1, 1) - Estimates["AWS::FraudDetector::Detector"] = NewResourceEstimate("AWS::FraudDetector::Detector", 1, 1, 1) - Estimates["AWS::FraudDetector::EntityType"] = NewResourceEstimate("AWS::FraudDetector::EntityType", 1, 1, 1) - Estimates["AWS::FraudDetector::EventType"] = NewResourceEstimate("AWS::FraudDetector::EventType", 1, 1, 1) - Estimates["AWS::FraudDetector::Label"] = NewResourceEstimate("AWS::FraudDetector::Label", 1, 1, 1) - Estimates["AWS::FraudDetector::List"] = NewResourceEstimate("AWS::FraudDetector::List", 1, 1, 1) - Estimates["AWS::FraudDetector::Outcome"] = NewResourceEstimate("AWS::FraudDetector::Outcome", 1, 1, 1) - Estimates["AWS::FraudDetector::Variable"] = NewResourceEstimate("AWS::FraudDetector::Variable", 1, 1, 1) + Estimates["AWS::FraudDetector::Detector"] = NewResourceEstimate("AWS::FraudDetector::Detector", 3, 1, 1) + Estimates["AWS::FraudDetector::EntityType"] = NewResourceEstimate("AWS::FraudDetector::EntityType", 3, 1, 1) + Estimates["AWS::FraudDetector::EventType"] = NewResourceEstimate("AWS::FraudDetector::EventType", 3, 1, 1) + Estimates["AWS::FraudDetector::Label"] = NewResourceEstimate("AWS::FraudDetector::Label", 3, 1, 1) + Estimates["AWS::FraudDetector::List"] = NewResourceEstimate("AWS::FraudDetector::List", 3, 1, 1) + Estimates["AWS::FraudDetector::Outcome"] = NewResourceEstimate("AWS::FraudDetector::Outcome", 3, 1, 1) + Estimates["AWS::FraudDetector::Variable"] = NewResourceEstimate("AWS::FraudDetector::Variable", 3, 1, 1) + Estimates["AWS::GameCast::Application"] = NewResourceEstimate("AWS::GameCast::Application", 16, 2, 1) + Estimates["AWS::GameCast::StreamGroup"] = NewResourceEstimate("AWS::GameCast::StreamGroup", 1542, 2, 1) Estimates["AWS::GameLift::Alias"] = NewResourceEstimate("AWS::GameLift::Alias", 1, 1, 1) Estimates["AWS::GameLift::Build"] = NewResourceEstimate("AWS::GameLift::Build", 1, 1, 1) - Estimates["AWS::GameLift::Fleet"] = NewResourceEstimate("AWS::GameLift::Fleet", 1, 1, 1) - Estimates["AWS::GameLift::GameServerGroup"] = NewResourceEstimate("AWS::GameLift::GameServerGroup", 1, 1, 1) + Estimates["AWS::GameLift::Fleet"] = NewResourceEstimate("AWS::GameLift::Fleet", 130, 1, 1) + Estimates["AWS::GameLift::GameServerGroup"] = NewResourceEstimate("AWS::GameLift::GameServerGroup", 18, 1, 1) Estimates["AWS::GameLift::GameSessionQueue"] = NewResourceEstimate("AWS::GameLift::GameSessionQueue", 1, 1, 1) Estimates["AWS::GameLift::Location"] = NewResourceEstimate("AWS::GameLift::Location", 1, 1, 1) Estimates["AWS::GameLift::MatchmakingConfiguration"] = NewResourceEstimate("AWS::GameLift::MatchmakingConfiguration", 1, 1, 1) Estimates["AWS::GameLift::MatchmakingRuleSet"] = NewResourceEstimate("AWS::GameLift::MatchmakingRuleSet", 1, 1, 1) Estimates["AWS::GameLift::Script"] = NewResourceEstimate("AWS::GameLift::Script", 1, 1, 1) - Estimates["AWS::GlobalAccelerator::Accelerator"] = NewResourceEstimate("AWS::GlobalAccelerator::Accelerator", 1, 1, 1) - Estimates["AWS::GlobalAccelerator::EndpointGroup"] = NewResourceEstimate("AWS::GlobalAccelerator::EndpointGroup", 1, 1, 1) - Estimates["AWS::GlobalAccelerator::Listener"] = NewResourceEstimate("AWS::GlobalAccelerator::Listener", 1, 1, 1) + Estimates["AWS::GammaDilithium::JobDefinition"] = NewResourceEstimate("AWS::GammaDilithium::JobDefinition", 8, 14, 1) + Estimates["AWS::GlobalAccelerator::Accelerator"] = NewResourceEstimate("AWS::GlobalAccelerator::Accelerator", 27, 29, 1) + Estimates["AWS::GlobalAccelerator::EndpointGroup"] = NewResourceEstimate("AWS::GlobalAccelerator::EndpointGroup", 46, 342, 1) + Estimates["AWS::GlobalAccelerator::Listener"] = NewResourceEstimate("AWS::GlobalAccelerator::Listener", 2, 31, 1) Estimates["AWS::Glue::Classifier"] = NewResourceEstimate("AWS::Glue::Classifier", 1, 1, 1) - Estimates["AWS::Glue::Connection"] = NewResourceEstimate("AWS::Glue::Connection", 1, 1, 1) - Estimates["AWS::Glue::Crawler"] = NewResourceEstimate("AWS::Glue::Crawler", 1, 1, 1) - Estimates["AWS::Glue::DataCatalogEncryptionSettings"] = NewResourceEstimate("AWS::Glue::DataCatalogEncryptionSettings", 1, 1, 1) + Estimates["AWS::Glue::Connection"] = NewResourceEstimate("AWS::Glue::Connection", 1, 0, 1) + Estimates["AWS::Glue::Crawler"] = NewResourceEstimate("AWS::Glue::Crawler", 2, 3, 1) + Estimates["AWS::Glue::CustomEntityType"] = NewResourceEstimate("AWS::Glue::CustomEntityType", 1, 1, 1) + Estimates["AWS::Glue::DataCatalogEncryptionSettings"] = NewResourceEstimate("AWS::Glue::DataCatalogEncryptionSettings", 2, 1, 1) Estimates["AWS::Glue::DataQualityRuleset"] = NewResourceEstimate("AWS::Glue::DataQualityRuleset", 1, 1, 1) - Estimates["AWS::Glue::Database"] = NewResourceEstimate("AWS::Glue::Database", 1, 1, 1) - Estimates["AWS::Glue::DevEndpoint"] = NewResourceEstimate("AWS::Glue::DevEndpoint", 1, 1, 1) - Estimates["AWS::Glue::Job"] = NewResourceEstimate("AWS::Glue::Job", 1, 1, 1) - Estimates["AWS::Glue::MLTransform"] = NewResourceEstimate("AWS::Glue::MLTransform", 1, 1, 1) - Estimates["AWS::Glue::Partition"] = NewResourceEstimate("AWS::Glue::Partition", 1, 1, 1) - Estimates["AWS::Glue::Registry"] = NewResourceEstimate("AWS::Glue::Registry", 1, 1, 1) - Estimates["AWS::Glue::Schema"] = NewResourceEstimate("AWS::Glue::Schema", 1, 1, 1) - Estimates["AWS::Glue::SchemaVersion"] = NewResourceEstimate("AWS::Glue::SchemaVersion", 1, 1, 1) - Estimates["AWS::Glue::SchemaVersionMetadata"] = NewResourceEstimate("AWS::Glue::SchemaVersionMetadata", 1, 1, 1) - Estimates["AWS::Glue::SecurityConfiguration"] = NewResourceEstimate("AWS::Glue::SecurityConfiguration", 1, 1, 1) + Estimates["AWS::Glue::Database"] = NewResourceEstimate("AWS::Glue::Database", 1, 0, 1) + Estimates["AWS::Glue::DevEndpoint"] = NewResourceEstimate("AWS::Glue::DevEndpoint", 437, 1, 1) + Estimates["AWS::Glue::Job"] = NewResourceEstimate("AWS::Glue::Job", 3, 6, 1) + Estimates["AWS::Glue::MLTransform"] = NewResourceEstimate("AWS::Glue::MLTransform", 2, 1, 1) + Estimates["AWS::Glue::Partition"] = NewResourceEstimate("AWS::Glue::Partition", 1, 0, 1) + Estimates["AWS::Glue::Registry"] = NewResourceEstimate("AWS::Glue::Registry", 5, 1, 1) + Estimates["AWS::Glue::Schema"] = NewResourceEstimate("AWS::Glue::Schema", 6, 1, 1) + Estimates["AWS::Glue::SchemaVersion"] = NewResourceEstimate("AWS::Glue::SchemaVersion", 6, 1, 1) + Estimates["AWS::Glue::SecurityConfiguration"] = NewResourceEstimate("AWS::Glue::SecurityConfiguration", 1, 0, 1) Estimates["AWS::Glue::Table"] = NewResourceEstimate("AWS::Glue::Table", 1, 1, 1) Estimates["AWS::Glue::Trigger"] = NewResourceEstimate("AWS::Glue::Trigger", 1, 1, 1) Estimates["AWS::Glue::Workflow"] = NewResourceEstimate("AWS::Glue::Workflow", 1, 1, 1) - Estimates["AWS::Grafana::Workspace"] = NewResourceEstimate("AWS::Grafana::Workspace", 1, 1, 1) - Estimates["AWS::Greengrass::ConnectorDefinition"] = NewResourceEstimate("AWS::Greengrass::ConnectorDefinition", 1, 1, 1) + Estimates["AWS::Grafana::Workspace"] = NewResourceEstimate("AWS::Grafana::Workspace", 467, 0, 1) + Estimates["AWS::Greengrass::ConnectorDefinition"] = NewResourceEstimate("AWS::Greengrass::ConnectorDefinition", 1, 3, 1) Estimates["AWS::Greengrass::ConnectorDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::ConnectorDefinitionVersion", 1, 1, 1) - Estimates["AWS::Greengrass::CoreDefinition"] = NewResourceEstimate("AWS::Greengrass::CoreDefinition", 1, 1, 1) + Estimates["AWS::Greengrass::CoreDefinition"] = NewResourceEstimate("AWS::Greengrass::CoreDefinition", 1, 2, 1) Estimates["AWS::Greengrass::CoreDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::CoreDefinitionVersion", 1, 1, 1) - Estimates["AWS::Greengrass::DeviceDefinition"] = NewResourceEstimate("AWS::Greengrass::DeviceDefinition", 1, 1, 1) + Estimates["AWS::Greengrass::DeviceDefinition"] = NewResourceEstimate("AWS::Greengrass::DeviceDefinition", 1, 2, 1) Estimates["AWS::Greengrass::DeviceDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::DeviceDefinitionVersion", 1, 1, 1) - Estimates["AWS::Greengrass::FunctionDefinition"] = NewResourceEstimate("AWS::Greengrass::FunctionDefinition", 1, 1, 1) - Estimates["AWS::Greengrass::FunctionDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::FunctionDefinitionVersion", 1, 1, 1) - Estimates["AWS::Greengrass::Group"] = NewResourceEstimate("AWS::Greengrass::Group", 1, 1, 1) + Estimates["AWS::Greengrass::FunctionDefinition"] = NewResourceEstimate("AWS::Greengrass::FunctionDefinition", 1, 2, 1) + Estimates["AWS::Greengrass::FunctionDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::FunctionDefinitionVersion", 2, 1, 1) + Estimates["AWS::Greengrass::Group"] = NewResourceEstimate("AWS::Greengrass::Group", 2, 2, 1) Estimates["AWS::Greengrass::GroupVersion"] = NewResourceEstimate("AWS::Greengrass::GroupVersion", 1, 1, 1) - Estimates["AWS::Greengrass::LoggerDefinition"] = NewResourceEstimate("AWS::Greengrass::LoggerDefinition", 1, 1, 1) + Estimates["AWS::Greengrass::LoggerDefinition"] = NewResourceEstimate("AWS::Greengrass::LoggerDefinition", 1, 2, 1) Estimates["AWS::Greengrass::LoggerDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::LoggerDefinitionVersion", 1, 1, 1) - Estimates["AWS::Greengrass::ResourceDefinition"] = NewResourceEstimate("AWS::Greengrass::ResourceDefinition", 1, 1, 1) + Estimates["AWS::Greengrass::ResourceDefinition"] = NewResourceEstimate("AWS::Greengrass::ResourceDefinition", 1, 2, 1) Estimates["AWS::Greengrass::ResourceDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::ResourceDefinitionVersion", 1, 1, 1) - Estimates["AWS::Greengrass::SubscriptionDefinition"] = NewResourceEstimate("AWS::Greengrass::SubscriptionDefinition", 1, 1, 1) + Estimates["AWS::Greengrass::SubscriptionDefinition"] = NewResourceEstimate("AWS::Greengrass::SubscriptionDefinition", 1, 2, 1) Estimates["AWS::Greengrass::SubscriptionDefinitionVersion"] = NewResourceEstimate("AWS::Greengrass::SubscriptionDefinitionVersion", 1, 1, 1) - Estimates["AWS::GreengrassV2::ComponentVersion"] = NewResourceEstimate("AWS::GreengrassV2::ComponentVersion", 1, 1, 1) - Estimates["AWS::GreengrassV2::Deployment"] = NewResourceEstimate("AWS::GreengrassV2::Deployment", 1, 1, 1) + Estimates["AWS::GreengrassV2::ComponentVersion"] = NewResourceEstimate("AWS::GreengrassV2::ComponentVersion", 3, 2, 1) + Estimates["AWS::GreengrassV2::Deployment"] = NewResourceEstimate("AWS::GreengrassV2::Deployment", 2, 2, 1) Estimates["AWS::GroundStation::Config"] = NewResourceEstimate("AWS::GroundStation::Config", 1, 1, 1) - Estimates["AWS::GroundStation::DataflowEndpointGroup"] = NewResourceEstimate("AWS::GroundStation::DataflowEndpointGroup", 1, 1, 1) + Estimates["AWS::GroundStation::DataflowEndpointGroup"] = NewResourceEstimate("AWS::GroundStation::DataflowEndpointGroup", 36, 1, 1) Estimates["AWS::GroundStation::MissionProfile"] = NewResourceEstimate("AWS::GroundStation::MissionProfile", 1, 1, 1) - Estimates["AWS::GuardDuty::Detector"] = NewResourceEstimate("AWS::GuardDuty::Detector", 1, 1, 1) - Estimates["AWS::GuardDuty::Filter"] = NewResourceEstimate("AWS::GuardDuty::Filter", 1, 1, 1) - Estimates["AWS::GuardDuty::IPSet"] = NewResourceEstimate("AWS::GuardDuty::IPSet", 1, 1, 1) - Estimates["AWS::GuardDuty::Master"] = NewResourceEstimate("AWS::GuardDuty::Master", 1, 1, 1) - Estimates["AWS::GuardDuty::Member"] = NewResourceEstimate("AWS::GuardDuty::Member", 1, 1, 1) - Estimates["AWS::GuardDuty::ThreatIntelSet"] = NewResourceEstimate("AWS::GuardDuty::ThreatIntelSet", 1, 1, 1) - Estimates["AWS::HealthLake::FHIRDatastore"] = NewResourceEstimate("AWS::HealthLake::FHIRDatastore", 1, 1, 1) - Estimates["AWS::IAM::AccessKey"] = NewResourceEstimate("AWS::IAM::AccessKey", 1, 1, 1) - Estimates["AWS::IAM::Group"] = NewResourceEstimate("AWS::IAM::Group", 1, 1, 1) - Estimates["AWS::IAM::GroupPolicy"] = NewResourceEstimate("AWS::IAM::GroupPolicy", 1, 1, 1) - Estimates["AWS::IAM::InstanceProfile"] = NewResourceEstimate("AWS::IAM::InstanceProfile", 132, 132, 132) - Estimates["AWS::IAM::ManagedPolicy"] = NewResourceEstimate("AWS::IAM::ManagedPolicy", 1, 1, 1) - Estimates["AWS::IAM::OIDCProvider"] = NewResourceEstimate("AWS::IAM::OIDCProvider", 1, 1, 1) - Estimates["AWS::IAM::Policy"] = NewResourceEstimate("AWS::IAM::Policy", 17, 17, 17) - Estimates["AWS::IAM::Role"] = NewResourceEstimate("AWS::IAM::Role", 16, 16, 16) - Estimates["AWS::IAM::RolePolicy"] = NewResourceEstimate("AWS::IAM::RolePolicy", 1, 1, 1) - Estimates["AWS::IAM::SAMLProvider"] = NewResourceEstimate("AWS::IAM::SAMLProvider", 1, 1, 1) - Estimates["AWS::IAM::ServerCertificate"] = NewResourceEstimate("AWS::IAM::ServerCertificate", 1, 1, 1) - Estimates["AWS::IAM::ServiceLinkedRole"] = NewResourceEstimate("AWS::IAM::ServiceLinkedRole", 1, 1, 1) - Estimates["AWS::IAM::User"] = NewResourceEstimate("AWS::IAM::User", 1, 1, 1) - Estimates["AWS::IAM::UserPolicy"] = NewResourceEstimate("AWS::IAM::UserPolicy", 1, 1, 1) - Estimates["AWS::IAM::UserToGroupAddition"] = NewResourceEstimate("AWS::IAM::UserToGroupAddition", 1, 1, 1) - Estimates["AWS::IAM::VirtualMFADevice"] = NewResourceEstimate("AWS::IAM::VirtualMFADevice", 1, 1, 1) + Estimates["AWS::GuardDuty::Detector"] = NewResourceEstimate("AWS::GuardDuty::Detector", 5, 3, 1) + Estimates["AWS::GuardDuty::Filter"] = NewResourceEstimate("AWS::GuardDuty::Filter", 1, 2, 1) + Estimates["AWS::GuardDuty::IPSet"] = NewResourceEstimate("AWS::GuardDuty::IPSet", 7, 3, 1) + Estimates["AWS::GuardDuty::Master"] = NewResourceEstimate("AWS::GuardDuty::Master", 3, 1, 1) + Estimates["AWS::GuardDuty::ThreatIntelSet"] = NewResourceEstimate("AWS::GuardDuty::ThreatIntelSet", 6, 3, 1) + Estimates["AWS::Hawk::FalconSchedulerSubscription"] = NewResourceEstimate("AWS::Hawk::FalconSchedulerSubscription", 1, 0, 1) + Estimates["AWS::HealthLake::FHIRDatastore"] = NewResourceEstimate("AWS::HealthLake::FHIRDatastore", 2025, 2, 1) + Estimates["AWS::IAM::AccessKey"] = NewResourceEstimate("AWS::IAM::AccessKey", 1, 0, 1) + Estimates["AWS::IAM::Group"] = NewResourceEstimate("AWS::IAM::Group", 12, 2, 1) + Estimates["AWS::IAM::GroupPolicy"] = NewResourceEstimate("AWS::IAM::GroupPolicy", 32, 1, 1) + Estimates["AWS::IAM::InstanceProfile"] = NewResourceEstimate("AWS::IAM::InstanceProfile", 126, 0, 1) + Estimates["AWS::IAM::ManagedPolicy"] = NewResourceEstimate("AWS::IAM::ManagedPolicy", 16, 1, 1) + Estimates["AWS::IAM::OIDCProvider"] = NewResourceEstimate("AWS::IAM::OIDCProvider", 2, 3, 1) + Estimates["AWS::IAM::Policy"] = NewResourceEstimate("AWS::IAM::Policy", 17, 3, 1) + Estimates["AWS::IAM::Role"] = NewResourceEstimate("AWS::IAM::Role", 12, 17, 1) + Estimates["AWS::IAM::RolePolicy"] = NewResourceEstimate("AWS::IAM::RolePolicy", 32, 1, 1) + Estimates["AWS::IAM::SAMLProvider"] = NewResourceEstimate("AWS::IAM::SAMLProvider", 2, 1, 1) + Estimates["AWS::IAM::ServerCertificate"] = NewResourceEstimate("AWS::IAM::ServerCertificate", 122, 1, 1) + Estimates["AWS::IAM::ServiceLinkedRole"] = NewResourceEstimate("AWS::IAM::ServiceLinkedRole", 2, 0, 1) + Estimates["AWS::IAM::User"] = NewResourceEstimate("AWS::IAM::User", 37, 2, 1) + Estimates["AWS::IAM::UserPolicy"] = NewResourceEstimate("AWS::IAM::UserPolicy", 32, 0, 1) + Estimates["AWS::IAM::UserToGroupAddition"] = NewResourceEstimate("AWS::IAM::UserToGroupAddition", 0, 0, 1) + Estimates["AWS::IAM::VirtualMFADevice"] = NewResourceEstimate("AWS::IAM::VirtualMFADevice", 124, 1, 1) Estimates["AWS::IVS::Channel"] = NewResourceEstimate("AWS::IVS::Channel", 1, 1, 1) Estimates["AWS::IVS::PlaybackKeyPair"] = NewResourceEstimate("AWS::IVS::PlaybackKeyPair", 1, 1, 1) - Estimates["AWS::IVS::RecordingConfiguration"] = NewResourceEstimate("AWS::IVS::RecordingConfiguration", 1, 1, 1) + Estimates["AWS::IVS::RecordingConfiguration"] = NewResourceEstimate("AWS::IVS::RecordingConfiguration", 7, 1, 1) Estimates["AWS::IVS::StreamKey"] = NewResourceEstimate("AWS::IVS::StreamKey", 1, 1, 1) - Estimates["AWS::IVSChat::LoggingConfiguration"] = NewResourceEstimate("AWS::IVSChat::LoggingConfiguration", 1, 1, 1) + Estimates["AWS::IVSChat::LoggingConfiguration"] = NewResourceEstimate("AWS::IVSChat::LoggingConfiguration", 1, 2, 1) Estimates["AWS::IVSChat::Room"] = NewResourceEstimate("AWS::IVSChat::Room", 1, 1, 1) Estimates["AWS::IdentityStore::Group"] = NewResourceEstimate("AWS::IdentityStore::Group", 1, 1, 1) Estimates["AWS::IdentityStore::GroupMembership"] = NewResourceEstimate("AWS::IdentityStore::GroupMembership", 1, 1, 1) - Estimates["AWS::ImageBuilder::Component"] = NewResourceEstimate("AWS::ImageBuilder::Component", 1, 1, 1) - Estimates["AWS::ImageBuilder::ContainerRecipe"] = NewResourceEstimate("AWS::ImageBuilder::ContainerRecipe", 1, 1, 1) - Estimates["AWS::ImageBuilder::DistributionConfiguration"] = NewResourceEstimate("AWS::ImageBuilder::DistributionConfiguration", 1, 1, 1) - Estimates["AWS::ImageBuilder::Image"] = NewResourceEstimate("AWS::ImageBuilder::Image", 1386, 1386, 1386) - Estimates["AWS::ImageBuilder::ImagePipeline"] = NewResourceEstimate("AWS::ImageBuilder::ImagePipeline", 1, 1, 1) - Estimates["AWS::ImageBuilder::ImageRecipe"] = NewResourceEstimate("AWS::ImageBuilder::ImageRecipe", 2, 2, 2) - Estimates["AWS::ImageBuilder::InfrastructureConfiguration"] = NewResourceEstimate("AWS::ImageBuilder::InfrastructureConfiguration", 2, 2, 2) + Estimates["AWS::ImageBuilder::Component"] = NewResourceEstimate("AWS::ImageBuilder::Component", 2, 1, 1) + Estimates["AWS::ImageBuilder::ContainerRecipe"] = NewResourceEstimate("AWS::ImageBuilder::ContainerRecipe", 3, 1, 1) + Estimates["AWS::ImageBuilder::DistributionConfiguration"] = NewResourceEstimate("AWS::ImageBuilder::DistributionConfiguration", 2, 2, 1) + Estimates["AWS::ImageBuilder::Image"] = NewResourceEstimate("AWS::ImageBuilder::Image", 846, 1, 1) + Estimates["AWS::ImageBuilder::ImagePipeline"] = NewResourceEstimate("AWS::ImageBuilder::ImagePipeline", 2, 2, 1) + Estimates["AWS::ImageBuilder::ImageRecipe"] = NewResourceEstimate("AWS::ImageBuilder::ImageRecipe", 2, 1, 1) + Estimates["AWS::ImageBuilder::InfrastructureConfiguration"] = NewResourceEstimate("AWS::ImageBuilder::InfrastructureConfiguration", 2, 2, 1) Estimates["AWS::Inspector::AssessmentTarget"] = NewResourceEstimate("AWS::Inspector::AssessmentTarget", 1, 1, 1) Estimates["AWS::Inspector::AssessmentTemplate"] = NewResourceEstimate("AWS::Inspector::AssessmentTemplate", 1, 1, 1) Estimates["AWS::Inspector::ResourceGroup"] = NewResourceEstimate("AWS::Inspector::ResourceGroup", 1, 1, 1) - Estimates["AWS::InspectorV2::Filter"] = NewResourceEstimate("AWS::InspectorV2::Filter", 1, 1, 1) - Estimates["AWS::InternetMonitor::Monitor"] = NewResourceEstimate("AWS::InternetMonitor::Monitor", 1, 1, 1) - Estimates["AWS::IoT1Click::Device"] = NewResourceEstimate("AWS::IoT1Click::Device", 1, 1, 1) - Estimates["AWS::IoT1Click::Placement"] = NewResourceEstimate("AWS::IoT1Click::Placement", 1, 1, 1) + Estimates["AWS::InspectorV2::Filter"] = NewResourceEstimate("AWS::InspectorV2::Filter", 2, 2, 1) + Estimates["AWS::Internal::Dummy"] = NewResourceEstimate("AWS::Internal::Dummy", 3, 1, 1) + Estimates["AWS::Internal::OneTimeRelease"] = NewResourceEstimate("AWS::Internal::OneTimeRelease", 7, 1, 1) + Estimates["AWS::InternetMonitor::Monitor"] = NewResourceEstimate("AWS::InternetMonitor::Monitor", 4, 1, 1) + Estimates["AWS::IoT1Click::Placement"] = NewResourceEstimate("AWS::IoT1Click::Placement", 2, 1, 1) Estimates["AWS::IoT1Click::Project"] = NewResourceEstimate("AWS::IoT1Click::Project", 1, 1, 1) - Estimates["AWS::IoT::AccountAuditConfiguration"] = NewResourceEstimate("AWS::IoT::AccountAuditConfiguration", 1, 1, 1) + Estimates["AWS::IoT::AccountAuditConfiguration"] = NewResourceEstimate("AWS::IoT::AccountAuditConfiguration", 2, 2, 1) Estimates["AWS::IoT::Authorizer"] = NewResourceEstimate("AWS::IoT::Authorizer", 1, 1, 1) Estimates["AWS::IoT::BillingGroup"] = NewResourceEstimate("AWS::IoT::BillingGroup", 1, 1, 1) Estimates["AWS::IoT::CACertificate"] = NewResourceEstimate("AWS::IoT::CACertificate", 1, 1, 1) Estimates["AWS::IoT::Certificate"] = NewResourceEstimate("AWS::IoT::Certificate", 1, 1, 1) - Estimates["AWS::IoT::CustomMetric"] = NewResourceEstimate("AWS::IoT::CustomMetric", 1, 1, 1) - Estimates["AWS::IoT::Dimension"] = NewResourceEstimate("AWS::IoT::Dimension", 1, 1, 1) - Estimates["AWS::IoT::DomainConfiguration"] = NewResourceEstimate("AWS::IoT::DomainConfiguration", 1, 1, 1) + Estimates["AWS::IoT::CustomMetric"] = NewResourceEstimate("AWS::IoT::CustomMetric", 2, 2, 1) + Estimates["AWS::IoT::Dimension"] = NewResourceEstimate("AWS::IoT::Dimension", 2, 2, 1) + Estimates["AWS::IoT::DomainConfiguration"] = NewResourceEstimate("AWS::IoT::DomainConfiguration", 2, 1, 1) Estimates["AWS::IoT::FleetMetric"] = NewResourceEstimate("AWS::IoT::FleetMetric", 1, 1, 1) Estimates["AWS::IoT::JobTemplate"] = NewResourceEstimate("AWS::IoT::JobTemplate", 1, 1, 1) Estimates["AWS::IoT::Logging"] = NewResourceEstimate("AWS::IoT::Logging", 1, 1, 1) - Estimates["AWS::IoT::MitigationAction"] = NewResourceEstimate("AWS::IoT::MitigationAction", 1, 1, 1) + Estimates["AWS::IoT::MitigationAction"] = NewResourceEstimate("AWS::IoT::MitigationAction", 2, 2, 1) Estimates["AWS::IoT::Policy"] = NewResourceEstimate("AWS::IoT::Policy", 1, 1, 1) - Estimates["AWS::IoT::PolicyPrincipalAttachment"] = NewResourceEstimate("AWS::IoT::PolicyPrincipalAttachment", 1, 1, 1) + Estimates["AWS::IoT::PolicyPrincipalAttachment"] = NewResourceEstimate("AWS::IoT::PolicyPrincipalAttachment", 60, 1, 1) Estimates["AWS::IoT::ProvisioningTemplate"] = NewResourceEstimate("AWS::IoT::ProvisioningTemplate", 1, 1, 1) Estimates["AWS::IoT::ResourceSpecificLogging"] = NewResourceEstimate("AWS::IoT::ResourceSpecificLogging", 1, 1, 1) - Estimates["AWS::IoT::RoleAlias"] = NewResourceEstimate("AWS::IoT::RoleAlias", 1, 1, 1) - Estimates["AWS::IoT::ScheduledAudit"] = NewResourceEstimate("AWS::IoT::ScheduledAudit", 1, 1, 1) - Estimates["AWS::IoT::SecurityProfile"] = NewResourceEstimate("AWS::IoT::SecurityProfile", 1, 1, 1) + Estimates["AWS::IoT::RoleAlias"] = NewResourceEstimate("AWS::IoT::RoleAlias", 1, 32, 1) + Estimates["AWS::IoT::ScheduledAudit"] = NewResourceEstimate("AWS::IoT::ScheduledAudit", 1, 2, 1) + Estimates["AWS::IoT::SecurityProfile"] = NewResourceEstimate("AWS::IoT::SecurityProfile", 2, 2, 1) Estimates["AWS::IoT::Thing"] = NewResourceEstimate("AWS::IoT::Thing", 1, 1, 1) - Estimates["AWS::IoT::ThingGroup"] = NewResourceEstimate("AWS::IoT::ThingGroup", 1, 1, 1) - Estimates["AWS::IoT::ThingPrincipalAttachment"] = NewResourceEstimate("AWS::IoT::ThingPrincipalAttachment", 1, 1, 1) + Estimates["AWS::IoT::ThingGroup"] = NewResourceEstimate("AWS::IoT::ThingGroup", 2, 2, 1) + Estimates["AWS::IoT::ThingPrincipalAttachment"] = NewResourceEstimate("AWS::IoT::ThingPrincipalAttachment", 61, 1, 1) Estimates["AWS::IoT::ThingType"] = NewResourceEstimate("AWS::IoT::ThingType", 1, 1, 1) - Estimates["AWS::IoT::TopicRule"] = NewResourceEstimate("AWS::IoT::TopicRule", 1, 1, 1) + Estimates["AWS::IoT::TopicRule"] = NewResourceEstimate("AWS::IoT::TopicRule", 2, 1, 1) Estimates["AWS::IoT::TopicRuleDestination"] = NewResourceEstimate("AWS::IoT::TopicRuleDestination", 1, 1, 1) - Estimates["AWS::IoTAnalytics::Channel"] = NewResourceEstimate("AWS::IoTAnalytics::Channel", 1, 1, 1) - Estimates["AWS::IoTAnalytics::Dataset"] = NewResourceEstimate("AWS::IoTAnalytics::Dataset", 1, 1, 1) - Estimates["AWS::IoTAnalytics::Datastore"] = NewResourceEstimate("AWS::IoTAnalytics::Datastore", 1, 1, 1) - Estimates["AWS::IoTAnalytics::Pipeline"] = NewResourceEstimate("AWS::IoTAnalytics::Pipeline", 1, 1, 1) - Estimates["AWS::IoTCoreDeviceAdvisor::SuiteDefinition"] = NewResourceEstimate("AWS::IoTCoreDeviceAdvisor::SuiteDefinition", 1, 1, 1) - Estimates["AWS::IoTEvents::AlarmModel"] = NewResourceEstimate("AWS::IoTEvents::AlarmModel", 1, 1, 1) - Estimates["AWS::IoTEvents::DetectorModel"] = NewResourceEstimate("AWS::IoTEvents::DetectorModel", 1, 1, 1) + Estimates["AWS::IoTAnalytics::Channel"] = NewResourceEstimate("AWS::IoTAnalytics::Channel", 3, 2, 1) + Estimates["AWS::IoTAnalytics::Dataset"] = NewResourceEstimate("AWS::IoTAnalytics::Dataset", 2, 2, 1) + Estimates["AWS::IoTAnalytics::Datastore"] = NewResourceEstimate("AWS::IoTAnalytics::Datastore", 3, 2, 1) + Estimates["AWS::IoTAnalytics::Pipeline"] = NewResourceEstimate("AWS::IoTAnalytics::Pipeline", 2, 1, 1) + Estimates["AWS::IoTCoreDeviceAdvisor::SuiteDefinition"] = NewResourceEstimate("AWS::IoTCoreDeviceAdvisor::SuiteDefinition", 2, 1, 1) + Estimates["AWS::IoTEvents::AlarmModel"] = NewResourceEstimate("AWS::IoTEvents::AlarmModel", 11, 12, 1) + Estimates["AWS::IoTEvents::DetectorModel"] = NewResourceEstimate("AWS::IoTEvents::DetectorModel", 12, 14, 1) Estimates["AWS::IoTEvents::Input"] = NewResourceEstimate("AWS::IoTEvents::Input", 1, 1, 1) - Estimates["AWS::IoTFleetHub::Application"] = NewResourceEstimate("AWS::IoTFleetHub::Application", 1, 1, 1) - Estimates["AWS::IoTFleetWise::Campaign"] = NewResourceEstimate("AWS::IoTFleetWise::Campaign", 1, 1, 1) - Estimates["AWS::IoTFleetWise::DecoderManifest"] = NewResourceEstimate("AWS::IoTFleetWise::DecoderManifest", 1, 1, 1) - Estimates["AWS::IoTFleetWise::Fleet"] = NewResourceEstimate("AWS::IoTFleetWise::Fleet", 1, 1, 1) - Estimates["AWS::IoTFleetWise::ModelManifest"] = NewResourceEstimate("AWS::IoTFleetWise::ModelManifest", 1, 1, 1) - Estimates["AWS::IoTFleetWise::SignalCatalog"] = NewResourceEstimate("AWS::IoTFleetWise::SignalCatalog", 1, 1, 1) - Estimates["AWS::IoTFleetWise::Vehicle"] = NewResourceEstimate("AWS::IoTFleetWise::Vehicle", 1, 1, 1) - Estimates["AWS::IoTSiteWise::AccessPolicy"] = NewResourceEstimate("AWS::IoTSiteWise::AccessPolicy", 1, 1, 1) - Estimates["AWS::IoTSiteWise::Asset"] = NewResourceEstimate("AWS::IoTSiteWise::Asset", 1, 1, 1) - Estimates["AWS::IoTSiteWise::AssetModel"] = NewResourceEstimate("AWS::IoTSiteWise::AssetModel", 1, 1, 1) - Estimates["AWS::IoTSiteWise::Dashboard"] = NewResourceEstimate("AWS::IoTSiteWise::Dashboard", 1, 1, 1) - Estimates["AWS::IoTSiteWise::Gateway"] = NewResourceEstimate("AWS::IoTSiteWise::Gateway", 1, 1, 1) - Estimates["AWS::IoTSiteWise::Portal"] = NewResourceEstimate("AWS::IoTSiteWise::Portal", 1, 1, 1) - Estimates["AWS::IoTSiteWise::Project"] = NewResourceEstimate("AWS::IoTSiteWise::Project", 1, 1, 1) - Estimates["AWS::IoTThingsGraph::FlowTemplate"] = NewResourceEstimate("AWS::IoTThingsGraph::FlowTemplate", 1, 1, 1) - Estimates["AWS::IoTTwinMaker::ComponentType"] = NewResourceEstimate("AWS::IoTTwinMaker::ComponentType", 1, 1, 1) - Estimates["AWS::IoTTwinMaker::Entity"] = NewResourceEstimate("AWS::IoTTwinMaker::Entity", 1, 1, 1) + Estimates["AWS::IoTFleetHub::Application"] = NewResourceEstimate("AWS::IoTFleetHub::Application", 2, 2, 1) + Estimates["AWS::IoTSiteWise::AccessPolicy"] = NewResourceEstimate("AWS::IoTSiteWise::AccessPolicy", 1, 2, 1) + Estimates["AWS::IoTSiteWise::Asset"] = NewResourceEstimate("AWS::IoTSiteWise::Asset", 13, 9, 1) + Estimates["AWS::IoTSiteWise::AssetModel"] = NewResourceEstimate("AWS::IoTSiteWise::AssetModel", 11, 14, 1) + Estimates["AWS::IoTSiteWise::Dashboard"] = NewResourceEstimate("AWS::IoTSiteWise::Dashboard", 2, 2, 1) + Estimates["AWS::IoTSiteWise::Gateway"] = NewResourceEstimate("AWS::IoTSiteWise::Gateway", 3, 3, 1) + Estimates["AWS::IoTSiteWise::Portal"] = NewResourceEstimate("AWS::IoTSiteWise::Portal", 46, 7, 1) + Estimates["AWS::IoTSiteWise::Project"] = NewResourceEstimate("AWS::IoTSiteWise::Project", 2, 2, 1) + Estimates["AWS::IoTTwinMaker::ComponentType"] = NewResourceEstimate("AWS::IoTTwinMaker::ComponentType", 2, 2, 1) + Estimates["AWS::IoTTwinMaker::Entity"] = NewResourceEstimate("AWS::IoTTwinMaker::Entity", 7, 8, 1) Estimates["AWS::IoTTwinMaker::Scene"] = NewResourceEstimate("AWS::IoTTwinMaker::Scene", 1, 1, 1) - Estimates["AWS::IoTTwinMaker::SyncJob"] = NewResourceEstimate("AWS::IoTTwinMaker::SyncJob", 1, 1, 1) - Estimates["AWS::IoTTwinMaker::Workspace"] = NewResourceEstimate("AWS::IoTTwinMaker::Workspace", 1, 1, 1) + Estimates["AWS::IoTTwinMaker::SyncJob"] = NewResourceEstimate("AWS::IoTTwinMaker::SyncJob", 1, 4, 1) + Estimates["AWS::IoTTwinMaker::Workspace"] = NewResourceEstimate("AWS::IoTTwinMaker::Workspace", 2, 2, 1) Estimates["AWS::IoTWireless::Destination"] = NewResourceEstimate("AWS::IoTWireless::Destination", 1, 1, 1) Estimates["AWS::IoTWireless::DeviceProfile"] = NewResourceEstimate("AWS::IoTWireless::DeviceProfile", 1, 1, 1) Estimates["AWS::IoTWireless::FuotaTask"] = NewResourceEstimate("AWS::IoTWireless::FuotaTask", 1, 1, 1) Estimates["AWS::IoTWireless::MulticastGroup"] = NewResourceEstimate("AWS::IoTWireless::MulticastGroup", 1, 1, 1) Estimates["AWS::IoTWireless::NetworkAnalyzerConfiguration"] = NewResourceEstimate("AWS::IoTWireless::NetworkAnalyzerConfiguration", 1, 1, 1) - Estimates["AWS::IoTWireless::PartnerAccount"] = NewResourceEstimate("AWS::IoTWireless::PartnerAccount", 1, 1, 1) Estimates["AWS::IoTWireless::ServiceProfile"] = NewResourceEstimate("AWS::IoTWireless::ServiceProfile", 1, 1, 1) Estimates["AWS::IoTWireless::TaskDefinition"] = NewResourceEstimate("AWS::IoTWireless::TaskDefinition", 1, 1, 1) Estimates["AWS::IoTWireless::WirelessDevice"] = NewResourceEstimate("AWS::IoTWireless::WirelessDevice", 1, 1, 1) - Estimates["AWS::IoTWireless::WirelessDeviceImportTask"] = NewResourceEstimate("AWS::IoTWireless::WirelessDeviceImportTask", 1, 1, 1) Estimates["AWS::IoTWireless::WirelessGateway"] = NewResourceEstimate("AWS::IoTWireless::WirelessGateway", 1, 1, 1) - Estimates["AWS::KMS::Alias"] = NewResourceEstimate("AWS::KMS::Alias", 1, 1, 1) - Estimates["AWS::KMS::Key"] = NewResourceEstimate("AWS::KMS::Key", 1, 1, 1) - Estimates["AWS::KMS::ReplicaKey"] = NewResourceEstimate("AWS::KMS::ReplicaKey", 1, 1, 1) - Estimates["AWS::KafkaConnect::Connector"] = NewResourceEstimate("AWS::KafkaConnect::Connector", 1, 1, 1) - Estimates["AWS::Kendra::DataSource"] = NewResourceEstimate("AWS::Kendra::DataSource", 1, 1, 1) - Estimates["AWS::Kendra::Faq"] = NewResourceEstimate("AWS::Kendra::Faq", 1, 1, 1) - Estimates["AWS::Kendra::Index"] = NewResourceEstimate("AWS::Kendra::Index", 1, 1, 1) - Estimates["AWS::KendraRanking::ExecutionPlan"] = NewResourceEstimate("AWS::KendraRanking::ExecutionPlan", 1, 1, 1) - Estimates["AWS::Kinesis::Stream"] = NewResourceEstimate("AWS::Kinesis::Stream", 1, 1, 1) - Estimates["AWS::Kinesis::StreamConsumer"] = NewResourceEstimate("AWS::Kinesis::StreamConsumer", 1, 1, 1) - Estimates["AWS::KinesisAnalytics::Application"] = NewResourceEstimate("AWS::KinesisAnalytics::Application", 1, 1, 1) - Estimates["AWS::KinesisAnalytics::ApplicationOutput"] = NewResourceEstimate("AWS::KinesisAnalytics::ApplicationOutput", 1, 1, 1) - Estimates["AWS::KinesisAnalytics::ApplicationReferenceDataSource"] = NewResourceEstimate("AWS::KinesisAnalytics::ApplicationReferenceDataSource", 1, 1, 1) - Estimates["AWS::KinesisAnalyticsV2::Application"] = NewResourceEstimate("AWS::KinesisAnalyticsV2::Application", 1, 1, 1) - Estimates["AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption"] = NewResourceEstimate("AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption", 1, 1, 1) - Estimates["AWS::KinesisAnalyticsV2::ApplicationOutput"] = NewResourceEstimate("AWS::KinesisAnalyticsV2::ApplicationOutput", 1, 1, 1) - Estimates["AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource"] = NewResourceEstimate("AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource", 1, 1, 1) - Estimates["AWS::KinesisFirehose::DeliveryStream"] = NewResourceEstimate("AWS::KinesisFirehose::DeliveryStream", 1, 1, 1) - Estimates["AWS::KinesisVideo::SignalingChannel"] = NewResourceEstimate("AWS::KinesisVideo::SignalingChannel", 1, 1, 1) - Estimates["AWS::KinesisVideo::Stream"] = NewResourceEstimate("AWS::KinesisVideo::Stream", 1, 1, 1) - Estimates["AWS::LakeFormation::DataCellsFilter"] = NewResourceEstimate("AWS::LakeFormation::DataCellsFilter", 1, 1, 1) - Estimates["AWS::LakeFormation::DataLakeSettings"] = NewResourceEstimate("AWS::LakeFormation::DataLakeSettings", 1, 1, 1) - Estimates["AWS::LakeFormation::Permissions"] = NewResourceEstimate("AWS::LakeFormation::Permissions", 1, 1, 1) - Estimates["AWS::LakeFormation::PrincipalPermissions"] = NewResourceEstimate("AWS::LakeFormation::PrincipalPermissions", 1, 1, 1) - Estimates["AWS::LakeFormation::Resource"] = NewResourceEstimate("AWS::LakeFormation::Resource", 1, 1, 1) - Estimates["AWS::LakeFormation::Tag"] = NewResourceEstimate("AWS::LakeFormation::Tag", 1, 1, 1) - Estimates["AWS::LakeFormation::TagAssociation"] = NewResourceEstimate("AWS::LakeFormation::TagAssociation", 1, 1, 1) - Estimates["AWS::Lambda::Alias"] = NewResourceEstimate("AWS::Lambda::Alias", 1, 1, 1) - Estimates["AWS::Lambda::CodeSigningConfig"] = NewResourceEstimate("AWS::Lambda::CodeSigningConfig", 1, 1, 1) - Estimates["AWS::Lambda::EventInvokeConfig"] = NewResourceEstimate("AWS::Lambda::EventInvokeConfig", 1, 1, 1) - Estimates["AWS::Lambda::EventSourceMapping"] = NewResourceEstimate("AWS::Lambda::EventSourceMapping", 1, 1, 1) - Estimates["AWS::Lambda::Function"] = NewResourceEstimate("AWS::Lambda::Function", 9, 9, 9) - Estimates["AWS::Lambda::LayerVersion"] = NewResourceEstimate("AWS::Lambda::LayerVersion", 1, 1, 1) - Estimates["AWS::Lambda::LayerVersionPermission"] = NewResourceEstimate("AWS::Lambda::LayerVersionPermission", 1, 1, 1) - Estimates["AWS::Lambda::Permission"] = NewResourceEstimate("AWS::Lambda::Permission", 1, 1, 1) + Estimates["AWS::KMS::Alias"] = NewResourceEstimate("AWS::KMS::Alias", 62, 13, 1) + Estimates["AWS::KMS::Key"] = NewResourceEstimate("AWS::KMS::Key", 122, 71, 1) + Estimates["AWS::KMS::ReplicaKey"] = NewResourceEstimate("AWS::KMS::ReplicaKey", 124, 54, 1) + Estimates["AWS::KMS::TestPrimaryMrk"] = NewResourceEstimate("AWS::KMS::TestPrimaryMrk", 123, 1, 1) + Estimates["AWS::KafkaConnect::Connector"] = NewResourceEstimate("AWS::KafkaConnect::Connector", 607, 632, 1) + Estimates["AWS::Kendra::DataSource"] = NewResourceEstimate("AWS::Kendra::DataSource", 16, 9, 1) + Estimates["AWS::Kendra::Faq"] = NewResourceEstimate("AWS::Kendra::Faq", 10, 1, 1) + Estimates["AWS::Kendra::Index"] = NewResourceEstimate("AWS::Kendra::Index", 1970, 290, 1) + Estimates["AWS::KendraRanking::ExecutionPlan"] = NewResourceEstimate("AWS::KendraRanking::ExecutionPlan", 491, 1, 1) + Estimates["AWS::Kinesis::Stream"] = NewResourceEstimate("AWS::Kinesis::Stream", 14, 29, 1) + Estimates["AWS::Kinesis::StreamConsumer"] = NewResourceEstimate("AWS::Kinesis::StreamConsumer", 12, 0, 1) + Estimates["AWS::KinesisAnalytics::Application"] = NewResourceEstimate("AWS::KinesisAnalytics::Application", 2, 1, 1) + Estimates["AWS::KinesisAnalytics::ApplicationOutput"] = NewResourceEstimate("AWS::KinesisAnalytics::ApplicationOutput", 2, 0, 1) + Estimates["AWS::KinesisAnalytics::ApplicationReferenceDataSource"] = NewResourceEstimate("AWS::KinesisAnalytics::ApplicationReferenceDataSource", 2, 1, 1) + Estimates["AWS::KinesisAnalyticsV2::Application"] = NewResourceEstimate("AWS::KinesisAnalyticsV2::Application", 7, 104, 1) + Estimates["AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption"] = NewResourceEstimate("AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption", 2, 1, 1) + Estimates["AWS::KinesisAnalyticsV2::ApplicationOutput"] = NewResourceEstimate("AWS::KinesisAnalyticsV2::ApplicationOutput", 2, 1, 1) + Estimates["AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource"] = NewResourceEstimate("AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource", 2, 1, 1) + Estimates["AWS::KinesisFirehose::DeliveryStream"] = NewResourceEstimate("AWS::KinesisFirehose::DeliveryStream", 77, 4, 1) + Estimates["AWS::KinesisVideo::SignalingChannel"] = NewResourceEstimate("AWS::KinesisVideo::SignalingChannel", 7, 7, 1) + Estimates["AWS::KinesisVideo::Stream"] = NewResourceEstimate("AWS::KinesisVideo::Stream", 6, 12, 1) + Estimates["AWS::LakeFormation::DataCellsFilter"] = NewResourceEstimate("AWS::LakeFormation::DataCellsFilter", 2, 5, 1) + Estimates["AWS::LakeFormation::DataLakeSettings"] = NewResourceEstimate("AWS::LakeFormation::DataLakeSettings", 1, 0, 1) + Estimates["AWS::LakeFormation::Permissions"] = NewResourceEstimate("AWS::LakeFormation::Permissions", 2, 0, 1) + Estimates["AWS::LakeFormation::PrincipalPermissions"] = NewResourceEstimate("AWS::LakeFormation::PrincipalPermissions", 3, 3, 1) + Estimates["AWS::LakeFormation::Resource"] = NewResourceEstimate("AWS::LakeFormation::Resource", 2, 2, 1) + Estimates["AWS::LakeFormation::Tag"] = NewResourceEstimate("AWS::LakeFormation::Tag", 2, 2, 1) + Estimates["AWS::LakeFormation::TagAssociation"] = NewResourceEstimate("AWS::LakeFormation::TagAssociation", 2, 5, 1) + Estimates["AWS::Lambda::Alias"] = NewResourceEstimate("AWS::Lambda::Alias", 51, 218, 1) + Estimates["AWS::Lambda::CodeSigningConfig"] = NewResourceEstimate("AWS::Lambda::CodeSigningConfig", 1, 2, 1) + Estimates["AWS::Lambda::EventInvokeConfig"] = NewResourceEstimate("AWS::Lambda::EventInvokeConfig", 2, 0, 1) + Estimates["AWS::Lambda::EventSourceMapping"] = NewResourceEstimate("AWS::Lambda::EventSourceMapping", 10, 1, 1) + Estimates["AWS::Lambda::Function"] = NewResourceEstimate("AWS::Lambda::Function", 25, 12, 1) + Estimates["AWS::Lambda::LayerVersion"] = NewResourceEstimate("AWS::Lambda::LayerVersion", 8, 0, 1) + Estimates["AWS::Lambda::LayerVersionPermission"] = NewResourceEstimate("AWS::Lambda::LayerVersionPermission", 1, 0, 1) + Estimates["AWS::Lambda::Permission"] = NewResourceEstimate("AWS::Lambda::Permission", 1, 0, 1) Estimates["AWS::Lambda::Url"] = NewResourceEstimate("AWS::Lambda::Url", 1, 1, 1) - Estimates["AWS::Lambda::Version"] = NewResourceEstimate("AWS::Lambda::Version", 1, 1, 1) - Estimates["AWS::Lex::Bot"] = NewResourceEstimate("AWS::Lex::Bot", 1, 1, 1) - Estimates["AWS::Lex::BotAlias"] = NewResourceEstimate("AWS::Lex::BotAlias", 1, 1, 1) - Estimates["AWS::Lex::BotVersion"] = NewResourceEstimate("AWS::Lex::BotVersion", 1, 1, 1) - Estimates["AWS::Lex::ResourcePolicy"] = NewResourceEstimate("AWS::Lex::ResourcePolicy", 1, 1, 1) - Estimates["AWS::LicenseManager::Grant"] = NewResourceEstimate("AWS::LicenseManager::Grant", 1, 1, 1) - Estimates["AWS::LicenseManager::License"] = NewResourceEstimate("AWS::LicenseManager::License", 1, 1, 1) - Estimates["AWS::Lightsail::Alarm"] = NewResourceEstimate("AWS::Lightsail::Alarm", 1, 1, 1) - Estimates["AWS::Lightsail::Bucket"] = NewResourceEstimate("AWS::Lightsail::Bucket", 1, 1, 1) - Estimates["AWS::Lightsail::Certificate"] = NewResourceEstimate("AWS::Lightsail::Certificate", 1, 1, 1) - Estimates["AWS::Lightsail::Container"] = NewResourceEstimate("AWS::Lightsail::Container", 1, 1, 1) - Estimates["AWS::Lightsail::Database"] = NewResourceEstimate("AWS::Lightsail::Database", 1, 1, 1) - Estimates["AWS::Lightsail::Disk"] = NewResourceEstimate("AWS::Lightsail::Disk", 1, 1, 1) - Estimates["AWS::Lightsail::Distribution"] = NewResourceEstimate("AWS::Lightsail::Distribution", 1, 1, 1) - Estimates["AWS::Lightsail::Instance"] = NewResourceEstimate("AWS::Lightsail::Instance", 1, 1, 1) - Estimates["AWS::Lightsail::LoadBalancer"] = NewResourceEstimate("AWS::Lightsail::LoadBalancer", 1, 1, 1) - Estimates["AWS::Lightsail::LoadBalancerTlsCertificate"] = NewResourceEstimate("AWS::Lightsail::LoadBalancerTlsCertificate", 1, 1, 1) - Estimates["AWS::Lightsail::StaticIp"] = NewResourceEstimate("AWS::Lightsail::StaticIp", 1, 1, 1) + Estimates["AWS::Lambda::Version"] = NewResourceEstimate("AWS::Lambda::Version", 4, 1, 1) + Estimates["AWS::Lex::Bot"] = NewResourceEstimate("AWS::Lex::Bot", 25, 0, 1) + Estimates["AWS::Lex::BotAlias"] = NewResourceEstimate("AWS::Lex::BotAlias", 2, 2, 1) + Estimates["AWS::Lex::BotVersion"] = NewResourceEstimate("AWS::Lex::BotVersion", 51, 1, 1) + Estimates["AWS::Lex::ResourcePolicy"] = NewResourceEstimate("AWS::Lex::ResourcePolicy", 2, 1, 1) + Estimates["AWS::LicenseManager::Grant"] = NewResourceEstimate("AWS::LicenseManager::Grant", 2, 1, 1) + Estimates["AWS::LicenseManager::License"] = NewResourceEstimate("AWS::LicenseManager::License", 2, 1, 1) + Estimates["AWS::Lightsail::Alarm"] = NewResourceEstimate("AWS::Lightsail::Alarm", 3, 2, 1) + Estimates["AWS::Lightsail::Bucket"] = NewResourceEstimate("AWS::Lightsail::Bucket", 59, 28, 1) + Estimates["AWS::Lightsail::Certificate"] = NewResourceEstimate("AWS::Lightsail::Certificate", 7, 6, 1) + Estimates["AWS::Lightsail::Container"] = NewResourceEstimate("AWS::Lightsail::Container", 54, 526, 1) + Estimates["AWS::Lightsail::Database"] = NewResourceEstimate("AWS::Lightsail::Database", 793, 598, 1) + Estimates["AWS::Lightsail::Disk"] = NewResourceEstimate("AWS::Lightsail::Disk", 16, 13, 1) + Estimates["AWS::Lightsail::Instance"] = NewResourceEstimate("AWS::Lightsail::Instance", 86, 104, 1) + Estimates["AWS::Lightsail::LoadBalancer"] = NewResourceEstimate("AWS::Lightsail::LoadBalancer", 77, 142, 1) + Estimates["AWS::Lightsail::LoadBalancerTlsCertificate"] = NewResourceEstimate("AWS::Lightsail::LoadBalancerTlsCertificate", 37, 1, 1) + Estimates["AWS::Lightsail::StaticIp"] = NewResourceEstimate("AWS::Lightsail::StaticIp", 28, 10, 1) Estimates["AWS::Location::GeofenceCollection"] = NewResourceEstimate("AWS::Location::GeofenceCollection", 1, 1, 1) Estimates["AWS::Location::Map"] = NewResourceEstimate("AWS::Location::Map", 1, 1, 1) Estimates["AWS::Location::PlaceIndex"] = NewResourceEstimate("AWS::Location::PlaceIndex", 1, 1, 1) @@ -939,434 +922,445 @@ func InitEstimates() { Estimates["AWS::Logs::AccountPolicy"] = NewResourceEstimate("AWS::Logs::AccountPolicy", 1, 1, 1) Estimates["AWS::Logs::Destination"] = NewResourceEstimate("AWS::Logs::Destination", 1, 1, 1) Estimates["AWS::Logs::LogGroup"] = NewResourceEstimate("AWS::Logs::LogGroup", 1, 1, 1) - Estimates["AWS::Logs::LogStream"] = NewResourceEstimate("AWS::Logs::LogStream", 1, 1, 1) - Estimates["AWS::Logs::LogStream"] = NewResourceEstimate("AWS::Logs::LogStream", 1, 1, 1) - Estimates["AWS::Logs::MetricFilter"] = NewResourceEstimate("AWS::Logs::MetricFilter", 1, 1, 1) + Estimates["AWS::Logs::LogStream"] = NewResourceEstimate("AWS::Logs::LogStream", 11, 0, 1) + Estimates["AWS::Logs::MetricFilter"] = NewResourceEstimate("AWS::Logs::MetricFilter", 2, 2, 1) Estimates["AWS::Logs::QueryDefinition"] = NewResourceEstimate("AWS::Logs::QueryDefinition", 1, 1, 1) Estimates["AWS::Logs::ResourcePolicy"] = NewResourceEstimate("AWS::Logs::ResourcePolicy", 1, 1, 1) Estimates["AWS::Logs::SubscriptionFilter"] = NewResourceEstimate("AWS::Logs::SubscriptionFilter", 1, 1, 1) - Estimates["AWS::LookoutEquipment::InferenceScheduler"] = NewResourceEstimate("AWS::LookoutEquipment::InferenceScheduler", 1, 1, 1) Estimates["AWS::LookoutMetrics::Alert"] = NewResourceEstimate("AWS::LookoutMetrics::Alert", 1, 1, 1) - Estimates["AWS::LookoutMetrics::AnomalyDetector"] = NewResourceEstimate("AWS::LookoutMetrics::AnomalyDetector", 1, 1, 1) + Estimates["AWS::LookoutMetrics::AnomalyDetector"] = NewResourceEstimate("AWS::LookoutMetrics::AnomalyDetector", 2, 2, 1) Estimates["AWS::LookoutVision::Project"] = NewResourceEstimate("AWS::LookoutVision::Project", 1, 1, 1) - Estimates["AWS::M2::Application"] = NewResourceEstimate("AWS::M2::Application", 1, 1, 1) - Estimates["AWS::M2::Environment"] = NewResourceEstimate("AWS::M2::Environment", 1, 1, 1) - Estimates["AWS::MSK::BatchScramSecret"] = NewResourceEstimate("AWS::MSK::BatchScramSecret", 1, 1, 1) - Estimates["AWS::MSK::Cluster"] = NewResourceEstimate("AWS::MSK::Cluster", 1, 1, 1) - Estimates["AWS::MSK::ClusterPolicy"] = NewResourceEstimate("AWS::MSK::ClusterPolicy", 1, 1, 1) - Estimates["AWS::MSK::Configuration"] = NewResourceEstimate("AWS::MSK::Configuration", 1, 1, 1) - Estimates["AWS::MSK::ServerlessCluster"] = NewResourceEstimate("AWS::MSK::ServerlessCluster", 1, 1, 1) - Estimates["AWS::MSK::VpcConnection"] = NewResourceEstimate("AWS::MSK::VpcConnection", 1, 1, 1) - Estimates["AWS::MWAA::Environment"] = NewResourceEstimate("AWS::MWAA::Environment", 1, 1, 1) - Estimates["AWS::Macie::AllowList"] = NewResourceEstimate("AWS::Macie::AllowList", 1, 1, 1) + Estimates["AWS::Lotus::PackageMajorVersion"] = NewResourceEstimate("AWS::Lotus::PackageMajorVersion", 1, 1, 1) + Estimates["AWS::Lotus::PackageOwner"] = NewResourceEstimate("AWS::Lotus::PackageOwner", 1, 1, 1) + Estimates["AWS::Lotus::PackageVersion"] = NewResourceEstimate("AWS::Lotus::PackageVersion", 1, 1, 1) + Estimates["AWS::Lotus::RoutingConfiguration"] = NewResourceEstimate("AWS::Lotus::RoutingConfiguration", 1, 1, 1) + Estimates["AWS::Lotus::VersionAlias"] = NewResourceEstimate("AWS::Lotus::VersionAlias", 1, 2, 1) + Estimates["AWS::M2::Application"] = NewResourceEstimate("AWS::M2::Application", 7, 8, 1) + Estimates["AWS::M2::Environment"] = NewResourceEstimate("AWS::M2::Environment", 168, 321, 1) + Estimates["AWS::MSK::BatchScramSecret"] = NewResourceEstimate("AWS::MSK::BatchScramSecret", 3, 2, 1) + Estimates["AWS::MSK::Cluster"] = NewResourceEstimate("AWS::MSK::Cluster", 1833, 1481, 1) + Estimates["AWS::MSK::ClusterPolicy"] = NewResourceEstimate("AWS::MSK::ClusterPolicy", 9, 2, 1) + Estimates["AWS::MSK::Configuration"] = NewResourceEstimate("AWS::MSK::Configuration", 6, 2, 1) + Estimates["AWS::MSK::ServerlessCluster"] = NewResourceEstimate("AWS::MSK::ServerlessCluster", 138, 1, 1) + Estimates["AWS::MSK::VpcConnection"] = NewResourceEstimate("AWS::MSK::VpcConnection", 130, 1, 1) + Estimates["AWS::MWAA::Environment"] = NewResourceEstimate("AWS::MWAA::Environment", 111, 117, 1) + Estimates["AWS::Macie::AllowList"] = NewResourceEstimate("AWS::Macie::AllowList", 2, 1, 1) Estimates["AWS::Macie::CustomDataIdentifier"] = NewResourceEstimate("AWS::Macie::CustomDataIdentifier", 1, 1, 1) - Estimates["AWS::Macie::FindingsFilter"] = NewResourceEstimate("AWS::Macie::FindingsFilter", 1, 1, 1) Estimates["AWS::Macie::Session"] = NewResourceEstimate("AWS::Macie::Session", 1, 1, 1) - Estimates["AWS::ManagedBlockchain::Accessor"] = NewResourceEstimate("AWS::ManagedBlockchain::Accessor", 1, 1, 1) - Estimates["AWS::ManagedBlockchain::Member"] = NewResourceEstimate("AWS::ManagedBlockchain::Member", 1, 1, 1) - Estimates["AWS::ManagedBlockchain::Node"] = NewResourceEstimate("AWS::ManagedBlockchain::Node", 1, 1, 1) - Estimates["AWS::MediaConnect::Bridge"] = NewResourceEstimate("AWS::MediaConnect::Bridge", 1, 1, 1) - Estimates["AWS::MediaConnect::BridgeOutput"] = NewResourceEstimate("AWS::MediaConnect::BridgeOutput", 1, 1, 1) - Estimates["AWS::MediaConnect::BridgeSource"] = NewResourceEstimate("AWS::MediaConnect::BridgeSource", 1, 1, 1) - Estimates["AWS::MediaConnect::Flow"] = NewResourceEstimate("AWS::MediaConnect::Flow", 1, 1, 1) + Estimates["AWS::Maester::DocumentType"] = NewResourceEstimate("AWS::Maester::DocumentType", 1, 1, 1) + Estimates["AWS::ManagedFleets::Fleet"] = NewResourceEstimate("AWS::ManagedFleets::Fleet", 1, 2, 1) + Estimates["AWS::ManagedFleets::SubFleet"] = NewResourceEstimate("AWS::ManagedFleets::SubFleet", 2, 2, 1) + Estimates["AWS::MediaConnect::Bridge"] = NewResourceEstimate("AWS::MediaConnect::Bridge", 2, 1, 1) + Estimates["AWS::MediaConnect::BridgeOutput"] = NewResourceEstimate("AWS::MediaConnect::BridgeOutput", 2, 1, 1) + Estimates["AWS::MediaConnect::BridgeSource"] = NewResourceEstimate("AWS::MediaConnect::BridgeSource", 2, 1, 1) + Estimates["AWS::MediaConnect::Flow"] = NewResourceEstimate("AWS::MediaConnect::Flow", 2, 2, 1) Estimates["AWS::MediaConnect::FlowEntitlement"] = NewResourceEstimate("AWS::MediaConnect::FlowEntitlement", 1, 1, 1) Estimates["AWS::MediaConnect::FlowOutput"] = NewResourceEstimate("AWS::MediaConnect::FlowOutput", 1, 1, 1) Estimates["AWS::MediaConnect::FlowSource"] = NewResourceEstimate("AWS::MediaConnect::FlowSource", 1, 1, 1) - Estimates["AWS::MediaConnect::FlowVpcInterface"] = NewResourceEstimate("AWS::MediaConnect::FlowVpcInterface", 1, 1, 1) - Estimates["AWS::MediaConnect::Gateway"] = NewResourceEstimate("AWS::MediaConnect::Gateway", 1, 1, 1) - Estimates["AWS::MediaConvert::JobTemplate"] = NewResourceEstimate("AWS::MediaConvert::JobTemplate", 1, 1, 1) + Estimates["AWS::MediaConnect::FlowVpcInterface"] = NewResourceEstimate("AWS::MediaConnect::FlowVpcInterface", 2, 0, 1) + Estimates["AWS::MediaConnect::Gateway"] = NewResourceEstimate("AWS::MediaConnect::Gateway", 8, 1, 1) + Estimates["AWS::MediaConvert::JobTemplate"] = NewResourceEstimate("AWS::MediaConvert::JobTemplate", 2, 1, 1) Estimates["AWS::MediaConvert::Preset"] = NewResourceEstimate("AWS::MediaConvert::Preset", 1, 1, 1) - Estimates["AWS::MediaConvert::Queue"] = NewResourceEstimate("AWS::MediaConvert::Queue", 1, 1, 1) - Estimates["AWS::MediaLive::Channel"] = NewResourceEstimate("AWS::MediaLive::Channel", 1, 1, 1) - Estimates["AWS::MediaLive::Input"] = NewResourceEstimate("AWS::MediaLive::Input", 1, 1, 1) - Estimates["AWS::MediaLive::InputSecurityGroup"] = NewResourceEstimate("AWS::MediaLive::InputSecurityGroup", 1, 1, 1) - Estimates["AWS::MediaPackage::Asset"] = NewResourceEstimate("AWS::MediaPackage::Asset", 1, 1, 1) - Estimates["AWS::MediaPackage::Channel"] = NewResourceEstimate("AWS::MediaPackage::Channel", 1, 1, 1) - Estimates["AWS::MediaPackage::OriginEndpoint"] = NewResourceEstimate("AWS::MediaPackage::OriginEndpoint", 1, 1, 1) - Estimates["AWS::MediaPackage::PackagingConfiguration"] = NewResourceEstimate("AWS::MediaPackage::PackagingConfiguration", 1, 1, 1) - Estimates["AWS::MediaPackage::PackagingGroup"] = NewResourceEstimate("AWS::MediaPackage::PackagingGroup", 1, 1, 1) - Estimates["AWS::MediaStore::Container"] = NewResourceEstimate("AWS::MediaStore::Container", 1, 1, 1) - Estimates["AWS::MediaTailor::Channel"] = NewResourceEstimate("AWS::MediaTailor::Channel", 1, 1, 1) + Estimates["AWS::MediaConvert::Queue"] = NewResourceEstimate("AWS::MediaConvert::Queue", 5, 1, 1) + Estimates["AWS::MediaLive::Channel"] = NewResourceEstimate("AWS::MediaLive::Channel", 18, 22, 1) + Estimates["AWS::MediaLive::Input"] = NewResourceEstimate("AWS::MediaLive::Input", 6, 25, 1) + Estimates["AWS::MediaLive::InputSecurityGroup"] = NewResourceEstimate("AWS::MediaLive::InputSecurityGroup", 5, 1, 1) + Estimates["AWS::MediaPackage::Asset"] = NewResourceEstimate("AWS::MediaPackage::Asset", 2, 1, 1) + Estimates["AWS::MediaPackage::Channel"] = NewResourceEstimate("AWS::MediaPackage::Channel", 2, 1, 1) + Estimates["AWS::MediaPackage::OriginEndpoint"] = NewResourceEstimate("AWS::MediaPackage::OriginEndpoint", 5, 1, 1) + Estimates["AWS::MediaPackage::PackagingConfiguration"] = NewResourceEstimate("AWS::MediaPackage::PackagingConfiguration", 2, 1, 1) + Estimates["AWS::MediaPackage::PackagingGroup"] = NewResourceEstimate("AWS::MediaPackage::PackagingGroup", 2, 1, 1) + Estimates["AWS::MediaPackageV2::Channel"] = NewResourceEstimate("AWS::MediaPackageV2::Channel", 2, 1, 1) + Estimates["AWS::MediaPackageV2::ChannelGroup"] = NewResourceEstimate("AWS::MediaPackageV2::ChannelGroup", 2, 1, 1) + Estimates["AWS::MediaPackageV2::ChannelPolicy"] = NewResourceEstimate("AWS::MediaPackageV2::ChannelPolicy", 2, 1, 1) + Estimates["AWS::MediaPackageV2::OriginEndpoint"] = NewResourceEstimate("AWS::MediaPackageV2::OriginEndpoint", 2, 1, 1) + Estimates["AWS::MediaPackageV2::OriginEndpointPolicy"] = NewResourceEstimate("AWS::MediaPackageV2::OriginEndpointPolicy", 2, 1, 1) + Estimates["AWS::MediaStore::Container"] = NewResourceEstimate("AWS::MediaStore::Container", 36, 1, 1) + Estimates["AWS::MediaTailor::Channel"] = NewResourceEstimate("AWS::MediaTailor::Channel", 2, 2, 1) Estimates["AWS::MediaTailor::ChannelPolicy"] = NewResourceEstimate("AWS::MediaTailor::ChannelPolicy", 1, 1, 1) - Estimates["AWS::MediaTailor::LiveSource"] = NewResourceEstimate("AWS::MediaTailor::LiveSource", 1, 1, 1) - Estimates["AWS::MediaTailor::PlaybackConfiguration"] = NewResourceEstimate("AWS::MediaTailor::PlaybackConfiguration", 1, 1, 1) - Estimates["AWS::MediaTailor::SourceLocation"] = NewResourceEstimate("AWS::MediaTailor::SourceLocation", 1, 1, 1) - Estimates["AWS::MediaTailor::VodSource"] = NewResourceEstimate("AWS::MediaTailor::VodSource", 1, 1, 1) - Estimates["AWS::MemoryDB::ACL"] = NewResourceEstimate("AWS::MemoryDB::ACL", 1, 1, 1) - Estimates["AWS::MemoryDB::Cluster"] = NewResourceEstimate("AWS::MemoryDB::Cluster", 1, 1, 1) - Estimates["AWS::MemoryDB::ParameterGroup"] = NewResourceEstimate("AWS::MemoryDB::ParameterGroup", 1, 1, 1) - Estimates["AWS::MemoryDB::SubnetGroup"] = NewResourceEstimate("AWS::MemoryDB::SubnetGroup", 1, 1, 1) - Estimates["AWS::MemoryDB::User"] = NewResourceEstimate("AWS::MemoryDB::User", 1, 1, 1) - Estimates["AWS::Neptune::DBCluster"] = NewResourceEstimate("AWS::Neptune::DBCluster", 1, 1, 1) - Estimates["AWS::Neptune::DBClusterParameterGroup"] = NewResourceEstimate("AWS::Neptune::DBClusterParameterGroup", 1, 1, 1) - Estimates["AWS::Neptune::DBInstance"] = NewResourceEstimate("AWS::Neptune::DBInstance", 1, 1, 1) - Estimates["AWS::Neptune::DBParameterGroup"] = NewResourceEstimate("AWS::Neptune::DBParameterGroup", 1, 1, 1) - Estimates["AWS::Neptune::DBSubnetGroup"] = NewResourceEstimate("AWS::Neptune::DBSubnetGroup", 1, 1, 1) - Estimates["AWS::NetworkFirewall::Firewall"] = NewResourceEstimate("AWS::NetworkFirewall::Firewall", 1, 1, 1) - Estimates["AWS::NetworkFirewall::FirewallPolicy"] = NewResourceEstimate("AWS::NetworkFirewall::FirewallPolicy", 1, 1, 1) - Estimates["AWS::NetworkFirewall::LoggingConfiguration"] = NewResourceEstimate("AWS::NetworkFirewall::LoggingConfiguration", 1, 1, 1) - Estimates["AWS::NetworkFirewall::RuleGroup"] = NewResourceEstimate("AWS::NetworkFirewall::RuleGroup", 1, 1, 1) - Estimates["AWS::NetworkManager::ConnectAttachment"] = NewResourceEstimate("AWS::NetworkManager::ConnectAttachment", 1, 1, 1) - Estimates["AWS::NetworkManager::ConnectPeer"] = NewResourceEstimate("AWS::NetworkManager::ConnectPeer", 1, 1, 1) - Estimates["AWS::NetworkManager::CoreNetwork"] = NewResourceEstimate("AWS::NetworkManager::CoreNetwork", 1, 1, 1) - Estimates["AWS::NetworkManager::CustomerGatewayAssociation"] = NewResourceEstimate("AWS::NetworkManager::CustomerGatewayAssociation", 1, 1, 1) - Estimates["AWS::NetworkManager::Device"] = NewResourceEstimate("AWS::NetworkManager::Device", 1, 1, 1) - Estimates["AWS::NetworkManager::GlobalNetwork"] = NewResourceEstimate("AWS::NetworkManager::GlobalNetwork", 1, 1, 1) - Estimates["AWS::NetworkManager::Link"] = NewResourceEstimate("AWS::NetworkManager::Link", 1, 1, 1) - Estimates["AWS::NetworkManager::LinkAssociation"] = NewResourceEstimate("AWS::NetworkManager::LinkAssociation", 1, 1, 1) - Estimates["AWS::NetworkManager::Site"] = NewResourceEstimate("AWS::NetworkManager::Site", 1, 1, 1) - Estimates["AWS::NetworkManager::SiteToSiteVpnAttachment"] = NewResourceEstimate("AWS::NetworkManager::SiteToSiteVpnAttachment", 1, 1, 1) - Estimates["AWS::NetworkManager::TransitGatewayPeering"] = NewResourceEstimate("AWS::NetworkManager::TransitGatewayPeering", 1, 1, 1) - Estimates["AWS::NetworkManager::TransitGatewayRegistration"] = NewResourceEstimate("AWS::NetworkManager::TransitGatewayRegistration", 1, 1, 1) - Estimates["AWS::NetworkManager::TransitGatewayRouteTableAttachment"] = NewResourceEstimate("AWS::NetworkManager::TransitGatewayRouteTableAttachment", 1, 1, 1) - Estimates["AWS::NetworkManager::VpcAttachment"] = NewResourceEstimate("AWS::NetworkManager::VpcAttachment", 1, 1, 1) - Estimates["AWS::NimbleStudio::LaunchProfile"] = NewResourceEstimate("AWS::NimbleStudio::LaunchProfile", 1, 1, 1) - Estimates["AWS::NimbleStudio::StreamingImage"] = NewResourceEstimate("AWS::NimbleStudio::StreamingImage", 1, 1, 1) - Estimates["AWS::NimbleStudio::Studio"] = NewResourceEstimate("AWS::NimbleStudio::Studio", 1, 1, 1) - Estimates["AWS::NimbleStudio::StudioComponent"] = NewResourceEstimate("AWS::NimbleStudio::StudioComponent", 1, 1, 1) - Estimates["AWS::OSIS::Pipeline"] = NewResourceEstimate("AWS::OSIS::Pipeline", 1, 1, 1) - Estimates["AWS::Oam::Link"] = NewResourceEstimate("AWS::Oam::Link", 1, 1, 1) - Estimates["AWS::Oam::Sink"] = NewResourceEstimate("AWS::Oam::Sink", 1, 1, 1) - Estimates["AWS::Omics::AnnotationStore"] = NewResourceEstimate("AWS::Omics::AnnotationStore", 1, 1, 1) + Estimates["AWS::MediaTailor::LiveSource"] = NewResourceEstimate("AWS::MediaTailor::LiveSource", 1, 2, 1) + Estimates["AWS::MediaTailor::PlaybackConfiguration"] = NewResourceEstimate("AWS::MediaTailor::PlaybackConfiguration", 1, 2, 1) + Estimates["AWS::MediaTailor::SourceLocation"] = NewResourceEstimate("AWS::MediaTailor::SourceLocation", 1, 2, 1) + Estimates["AWS::MediaTailor::VodSource"] = NewResourceEstimate("AWS::MediaTailor::VodSource", 1, 2, 1) + Estimates["AWS::MemoryDB::ACL"] = NewResourceEstimate("AWS::MemoryDB::ACL", 2, 53, 1) + Estimates["AWS::MemoryDB::Cluster"] = NewResourceEstimate("AWS::MemoryDB::Cluster", 1054, 236, 1) + Estimates["AWS::MemoryDB::ParameterGroup"] = NewResourceEstimate("AWS::MemoryDB::ParameterGroup", 1, 2, 1) + Estimates["AWS::MemoryDB::SubnetGroup"] = NewResourceEstimate("AWS::MemoryDB::SubnetGroup", 2, 2, 1) + Estimates["AWS::MemoryDB::User"] = NewResourceEstimate("AWS::MemoryDB::User", 2, 50, 1) + Estimates["AWS::Neptune::DBCluster"] = NewResourceEstimate("AWS::Neptune::DBCluster", 79, 2, 1) + Estimates["AWS::Neptune::DBClusterParameterGroup"] = NewResourceEstimate("AWS::Neptune::DBClusterParameterGroup", 2, 2, 1) + Estimates["AWS::Neptune::DBInstance"] = NewResourceEstimate("AWS::Neptune::DBInstance", 845, 528, 1) + Estimates["AWS::Neptune::DBParameterGroup"] = NewResourceEstimate("AWS::Neptune::DBParameterGroup", 2, 1, 1) + Estimates["AWS::Neptune::DBSubnetGroup"] = NewResourceEstimate("AWS::Neptune::DBSubnetGroup", 2, 2, 1) + Estimates["AWS::NetworkFirewall::Firewall"] = NewResourceEstimate("AWS::NetworkFirewall::Firewall", 312, 21, 1) + Estimates["AWS::NetworkFirewall::FirewallPolicy"] = NewResourceEstimate("AWS::NetworkFirewall::FirewallPolicy", 2, 2, 1) + Estimates["AWS::NetworkFirewall::LoggingConfiguration"] = NewResourceEstimate("AWS::NetworkFirewall::LoggingConfiguration", 10, 0, 1) + Estimates["AWS::NetworkFirewall::RuleGroup"] = NewResourceEstimate("AWS::NetworkFirewall::RuleGroup", 3, 3, 1) + Estimates["AWS::NetworkFirewall::TLSInspectionConfiguration"] = NewResourceEstimate("AWS::NetworkFirewall::TLSInspectionConfiguration", 2, 2, 1) + Estimates["AWS::NetworkManager::ConnectAttachment"] = NewResourceEstimate("AWS::NetworkManager::ConnectAttachment", 51, 2, 1) + Estimates["AWS::NetworkManager::ConnectPeer"] = NewResourceEstimate("AWS::NetworkManager::ConnectPeer", 213, 2, 1) + Estimates["AWS::NetworkManager::CoreNetwork"] = NewResourceEstimate("AWS::NetworkManager::CoreNetwork", 206, 4, 1) + Estimates["AWS::NetworkManager::CustomerGatewayAssociation"] = NewResourceEstimate("AWS::NetworkManager::CustomerGatewayAssociation", 2, 1, 1) + Estimates["AWS::NetworkManager::Device"] = NewResourceEstimate("AWS::NetworkManager::Device", 2, 2, 1) + Estimates["AWS::NetworkManager::GlobalNetwork"] = NewResourceEstimate("AWS::NetworkManager::GlobalNetwork", 2, 2, 1) + Estimates["AWS::NetworkManager::Link"] = NewResourceEstimate("AWS::NetworkManager::Link", 2, 2, 1) + Estimates["AWS::NetworkManager::LinkAssociation"] = NewResourceEstimate("AWS::NetworkManager::LinkAssociation", 2, 1, 1) + Estimates["AWS::NetworkManager::Site"] = NewResourceEstimate("AWS::NetworkManager::Site", 2, 5, 1) + Estimates["AWS::NetworkManager::SiteToSiteVpnAttachment"] = NewResourceEstimate("AWS::NetworkManager::SiteToSiteVpnAttachment", 287, 2, 1) + Estimates["AWS::NetworkManager::TransitGatewayPeering"] = NewResourceEstimate("AWS::NetworkManager::TransitGatewayPeering", 393, 2, 1) + Estimates["AWS::NetworkManager::TransitGatewayRegistration"] = NewResourceEstimate("AWS::NetworkManager::TransitGatewayRegistration", 32, 1, 1) + Estimates["AWS::NetworkManager::TransitGatewayRouteTableAttachment"] = NewResourceEstimate("AWS::NetworkManager::TransitGatewayRouteTableAttachment", 162, 2, 1) + Estimates["AWS::NetworkManager::VpcAttachment"] = NewResourceEstimate("AWS::NetworkManager::VpcAttachment", 109, 106, 1) + Estimates["AWS::NimbleStudio::LaunchProfile"] = NewResourceEstimate("AWS::NimbleStudio::LaunchProfile", 25, 8, 1) + Estimates["AWS::NimbleStudio::StreamingImage"] = NewResourceEstimate("AWS::NimbleStudio::StreamingImage", 4, 3, 1) + Estimates["AWS::NimbleStudio::Studio"] = NewResourceEstimate("AWS::NimbleStudio::Studio", 8, 7, 1) + Estimates["AWS::NimbleStudio::StudioComponent"] = NewResourceEstimate("AWS::NimbleStudio::StudioComponent", 8, 7, 1) + Estimates["AWS::OSIS::Pipeline"] = NewResourceEstimate("AWS::OSIS::Pipeline", 500, 539, 1) + Estimates["AWS::Oam::Link"] = NewResourceEstimate("AWS::Oam::Link", 2, 2, 1) + Estimates["AWS::Oam::Sink"] = NewResourceEstimate("AWS::Oam::Sink", 2, 1, 1) + Estimates["AWS::Omics::AnnotationStore"] = NewResourceEstimate("AWS::Omics::AnnotationStore", 243, 2, 1) Estimates["AWS::Omics::ReferenceStore"] = NewResourceEstimate("AWS::Omics::ReferenceStore", 1, 1, 1) - Estimates["AWS::Omics::RunGroup"] = NewResourceEstimate("AWS::Omics::RunGroup", 1, 1, 1) + Estimates["AWS::Omics::RunGroup"] = NewResourceEstimate("AWS::Omics::RunGroup", 1, 2, 1) Estimates["AWS::Omics::SequenceStore"] = NewResourceEstimate("AWS::Omics::SequenceStore", 1, 1, 1) - Estimates["AWS::Omics::VariantStore"] = NewResourceEstimate("AWS::Omics::VariantStore", 1, 1, 1) - Estimates["AWS::Omics::Workflow"] = NewResourceEstimate("AWS::Omics::Workflow", 1, 1, 1) + Estimates["AWS::Omics::VariantStore"] = NewResourceEstimate("AWS::Omics::VariantStore", 240, 2, 1) + Estimates["AWS::Omics::Workflow"] = NewResourceEstimate("AWS::Omics::Workflow", 7, 1, 1) Estimates["AWS::OpenSearchServerless::AccessPolicy"] = NewResourceEstimate("AWS::OpenSearchServerless::AccessPolicy", 1, 1, 1) - Estimates["AWS::OpenSearchServerless::Collection"] = NewResourceEstimate("AWS::OpenSearchServerless::Collection", 1, 1, 1) - Estimates["AWS::OpenSearchServerless::SecurityConfig"] = NewResourceEstimate("AWS::OpenSearchServerless::SecurityConfig", 1, 1, 1) + Estimates["AWS::OpenSearchServerless::Collection"] = NewResourceEstimate("AWS::OpenSearchServerless::Collection", 134, 0, 1) + Estimates["AWS::OpenSearchServerless::SecurityConfig"] = NewResourceEstimate("AWS::OpenSearchServerless::SecurityConfig", 1, 2, 1) Estimates["AWS::OpenSearchServerless::SecurityPolicy"] = NewResourceEstimate("AWS::OpenSearchServerless::SecurityPolicy", 1, 1, 1) - Estimates["AWS::OpenSearchServerless::VpcEndpoint"] = NewResourceEstimate("AWS::OpenSearchServerless::VpcEndpoint", 1, 1, 1) - Estimates["AWS::OpenSearchService::Domain"] = NewResourceEstimate("AWS::OpenSearchService::Domain", 1, 1, 1) - Estimates["AWS::OpsWorks::App"] = NewResourceEstimate("AWS::OpsWorks::App", 1, 1, 1) - Estimates["AWS::OpsWorks::ElasticLoadBalancerAttachment"] = NewResourceEstimate("AWS::OpsWorks::ElasticLoadBalancerAttachment", 1, 1, 1) - Estimates["AWS::OpsWorks::Instance"] = NewResourceEstimate("AWS::OpsWorks::Instance", 1, 1, 1) - Estimates["AWS::OpsWorks::Layer"] = NewResourceEstimate("AWS::OpsWorks::Layer", 1, 1, 1) - Estimates["AWS::OpsWorks::Stack"] = NewResourceEstimate("AWS::OpsWorks::Stack", 1, 1, 1) - Estimates["AWS::OpsWorks::UserProfile"] = NewResourceEstimate("AWS::OpsWorks::UserProfile", 1, 1, 1) - Estimates["AWS::OpsWorks::Volume"] = NewResourceEstimate("AWS::OpsWorks::Volume", 1, 1, 1) - Estimates["AWS::OpsWorksCM::Server"] = NewResourceEstimate("AWS::OpsWorksCM::Server", 1, 1, 1) - Estimates["AWS::Organizations::Account"] = NewResourceEstimate("AWS::Organizations::Account", 1, 1, 1) - Estimates["AWS::Organizations::Organization"] = NewResourceEstimate("AWS::Organizations::Organization", 1, 1, 1) - Estimates["AWS::Organizations::OrganizationalUnit"] = NewResourceEstimate("AWS::Organizations::OrganizationalUnit", 1, 1, 1) - Estimates["AWS::Organizations::Policy"] = NewResourceEstimate("AWS::Organizations::Policy", 1, 1, 1) - Estimates["AWS::Organizations::ResourcePolicy"] = NewResourceEstimate("AWS::Organizations::ResourcePolicy", 1, 1, 1) - Estimates["AWS::PCAConnectorAD::Connector"] = NewResourceEstimate("AWS::PCAConnectorAD::Connector", 1, 1, 1) - Estimates["AWS::PCAConnectorAD::DirectoryRegistration"] = NewResourceEstimate("AWS::PCAConnectorAD::DirectoryRegistration", 1, 1, 1) - Estimates["AWS::PCAConnectorAD::ServicePrincipalName"] = NewResourceEstimate("AWS::PCAConnectorAD::ServicePrincipalName", 1, 1, 1) - Estimates["AWS::PCAConnectorAD::Template"] = NewResourceEstimate("AWS::PCAConnectorAD::Template", 1, 1, 1) - Estimates["AWS::PCAConnectorAD::TemplateGroupAccessControlEntry"] = NewResourceEstimate("AWS::PCAConnectorAD::TemplateGroupAccessControlEntry", 1, 1, 1) - Estimates["AWS::Panorama::ApplicationInstance"] = NewResourceEstimate("AWS::Panorama::ApplicationInstance", 1, 1, 1) - Estimates["AWS::Panorama::Package"] = NewResourceEstimate("AWS::Panorama::Package", 1, 1, 1) - Estimates["AWS::Panorama::PackageVersion"] = NewResourceEstimate("AWS::Panorama::PackageVersion", 1, 1, 1) - Estimates["AWS::Personalize::Dataset"] = NewResourceEstimate("AWS::Personalize::Dataset", 1, 1, 1) - Estimates["AWS::Personalize::DatasetGroup"] = NewResourceEstimate("AWS::Personalize::DatasetGroup", 1, 1, 1) + Estimates["AWS::OpenSearchServerless::VpcEndpoint"] = NewResourceEstimate("AWS::OpenSearchServerless::VpcEndpoint", 76, 0, 1) + Estimates["AWS::OpenSearchService::Domain"] = NewResourceEstimate("AWS::OpenSearchService::Domain", 887, 347, 1) + Estimates["AWS::OpsWorks::App"] = NewResourceEstimate("AWS::OpsWorks::App", 1, 0, 1) + Estimates["AWS::OpsWorks::ElasticLoadBalancerAttachment"] = NewResourceEstimate("AWS::OpsWorks::ElasticLoadBalancerAttachment", 2, 0, 1) + Estimates["AWS::OpsWorks::Instance"] = NewResourceEstimate("AWS::OpsWorks::Instance", 119, 0, 1) + Estimates["AWS::OpsWorks::Layer"] = NewResourceEstimate("AWS::OpsWorks::Layer", 3, 0, 1) + Estimates["AWS::OpsWorks::Stack"] = NewResourceEstimate("AWS::OpsWorks::Stack", 5, 1, 1) + Estimates["AWS::OpsWorksCM::Server"] = NewResourceEstimate("AWS::OpsWorksCM::Server", 955, 6, 1) + Estimates["AWS::Organizations::Account"] = NewResourceEstimate("AWS::Organizations::Account", 16, 2, 1) + Estimates["AWS::Organizations::Organization"] = NewResourceEstimate("AWS::Organizations::Organization", 3, 1, 1) + Estimates["AWS::Organizations::OrganizationalUnit"] = NewResourceEstimate("AWS::Organizations::OrganizationalUnit", 3, 4, 1) + Estimates["AWS::Organizations::Policy"] = NewResourceEstimate("AWS::Organizations::Policy", 3, 4, 1) + Estimates["AWS::Organizations::ResourcePolicy"] = NewResourceEstimate("AWS::Organizations::ResourcePolicy", 2, 2, 1) + Estimates["AWS::PCAConnectorAD::Connector"] = NewResourceEstimate("AWS::PCAConnectorAD::Connector", 59, 2, 1) + Estimates["AWS::PCAConnectorAD::DirectoryRegistration"] = NewResourceEstimate("AWS::PCAConnectorAD::DirectoryRegistration", 4, 2, 1) + Estimates["AWS::PCAConnectorAD::ServicePrincipalName"] = NewResourceEstimate("AWS::PCAConnectorAD::ServicePrincipalName", 4, 1, 1) + Estimates["AWS::PCAConnectorAD::Template"] = NewResourceEstimate("AWS::PCAConnectorAD::Template", 6, 8, 1) + Estimates["AWS::PCAConnectorAD::TemplateGroupAccessControlEntry"] = NewResourceEstimate("AWS::PCAConnectorAD::TemplateGroupAccessControlEntry", 2, 1, 1) + Estimates["AWS::Panorama::ApplicationInstance"] = NewResourceEstimate("AWS::Panorama::ApplicationInstance", 61, 1, 1) + Estimates["AWS::Panorama::Package"] = NewResourceEstimate("AWS::Panorama::Package", 2, 1, 1) + Estimates["AWS::Panorama::PackageVersion"] = NewResourceEstimate("AWS::Panorama::PackageVersion", 8, 1, 1) + Estimates["AWS::Personalize::Dataset"] = NewResourceEstimate("AWS::Personalize::Dataset", 23, 197, 1) + Estimates["AWS::Personalize::DatasetGroup"] = NewResourceEstimate("AWS::Personalize::DatasetGroup", 19, 1, 1) Estimates["AWS::Personalize::Schema"] = NewResourceEstimate("AWS::Personalize::Schema", 1, 1, 1) - Estimates["AWS::Personalize::Solution"] = NewResourceEstimate("AWS::Personalize::Solution", 1, 1, 1) - Estimates["AWS::Pinpoint::ADMChannel"] = NewResourceEstimate("AWS::Pinpoint::ADMChannel", 1, 1, 1) - Estimates["AWS::Pinpoint::APNSChannel"] = NewResourceEstimate("AWS::Pinpoint::APNSChannel", 1, 1, 1) - Estimates["AWS::Pinpoint::APNSSandboxChannel"] = NewResourceEstimate("AWS::Pinpoint::APNSSandboxChannel", 1, 1, 1) - Estimates["AWS::Pinpoint::APNSVoipChannel"] = NewResourceEstimate("AWS::Pinpoint::APNSVoipChannel", 1, 1, 1) - Estimates["AWS::Pinpoint::APNSVoipSandboxChannel"] = NewResourceEstimate("AWS::Pinpoint::APNSVoipSandboxChannel", 1, 1, 1) - Estimates["AWS::Pinpoint::App"] = NewResourceEstimate("AWS::Pinpoint::App", 1, 1, 1) - Estimates["AWS::Pinpoint::ApplicationSettings"] = NewResourceEstimate("AWS::Pinpoint::ApplicationSettings", 1, 1, 1) - Estimates["AWS::Pinpoint::BaiduChannel"] = NewResourceEstimate("AWS::Pinpoint::BaiduChannel", 1, 1, 1) - Estimates["AWS::Pinpoint::Campaign"] = NewResourceEstimate("AWS::Pinpoint::Campaign", 1, 1, 1) - Estimates["AWS::Pinpoint::EmailChannel"] = NewResourceEstimate("AWS::Pinpoint::EmailChannel", 1, 1, 1) - Estimates["AWS::Pinpoint::EmailTemplate"] = NewResourceEstimate("AWS::Pinpoint::EmailTemplate", 1, 1, 1) - Estimates["AWS::Pinpoint::EventStream"] = NewResourceEstimate("AWS::Pinpoint::EventStream", 1, 1, 1) - Estimates["AWS::Pinpoint::GCMChannel"] = NewResourceEstimate("AWS::Pinpoint::GCMChannel", 1, 1, 1) + Estimates["AWS::Personalize::Solution"] = NewResourceEstimate("AWS::Personalize::Solution", 2, 1, 1) + Estimates["AWS::Pinpoint::ADMChannel"] = NewResourceEstimate("AWS::Pinpoint::ADMChannel", 2, 1, 1) + Estimates["AWS::Pinpoint::APNSChannel"] = NewResourceEstimate("AWS::Pinpoint::APNSChannel", 2, 1, 1) + Estimates["AWS::Pinpoint::APNSSandboxChannel"] = NewResourceEstimate("AWS::Pinpoint::APNSSandboxChannel", 2, 1, 1) + Estimates["AWS::Pinpoint::APNSVoipChannel"] = NewResourceEstimate("AWS::Pinpoint::APNSVoipChannel", 2, 1, 1) + Estimates["AWS::Pinpoint::APNSVoipSandboxChannel"] = NewResourceEstimate("AWS::Pinpoint::APNSVoipSandboxChannel", 2, 1, 1) + Estimates["AWS::Pinpoint::App"] = NewResourceEstimate("AWS::Pinpoint::App", 2, 1, 1) + Estimates["AWS::Pinpoint::ApplicationSettings"] = NewResourceEstimate("AWS::Pinpoint::ApplicationSettings", 2, 1, 1) + Estimates["AWS::Pinpoint::BaiduChannel"] = NewResourceEstimate("AWS::Pinpoint::BaiduChannel", 2, 1, 1) + Estimates["AWS::Pinpoint::Campaign"] = NewResourceEstimate("AWS::Pinpoint::Campaign", 6, 1, 1) + Estimates["AWS::Pinpoint::EmailChannel"] = NewResourceEstimate("AWS::Pinpoint::EmailChannel", 2, 1, 1) + Estimates["AWS::Pinpoint::EmailTemplate"] = NewResourceEstimate("AWS::Pinpoint::EmailTemplate", 2, 1, 1) + Estimates["AWS::Pinpoint::EventStream"] = NewResourceEstimate("AWS::Pinpoint::EventStream", 2, 1, 1) + Estimates["AWS::Pinpoint::GCMChannel"] = NewResourceEstimate("AWS::Pinpoint::GCMChannel", 2, 1, 1) Estimates["AWS::Pinpoint::InAppTemplate"] = NewResourceEstimate("AWS::Pinpoint::InAppTemplate", 1, 1, 1) - Estimates["AWS::Pinpoint::PushTemplate"] = NewResourceEstimate("AWS::Pinpoint::PushTemplate", 1, 1, 1) - Estimates["AWS::Pinpoint::SMSChannel"] = NewResourceEstimate("AWS::Pinpoint::SMSChannel", 1, 1, 1) - Estimates["AWS::Pinpoint::Segment"] = NewResourceEstimate("AWS::Pinpoint::Segment", 1, 1, 1) - Estimates["AWS::Pinpoint::SmsTemplate"] = NewResourceEstimate("AWS::Pinpoint::SmsTemplate", 1, 1, 1) - Estimates["AWS::Pinpoint::VoiceChannel"] = NewResourceEstimate("AWS::Pinpoint::VoiceChannel", 1, 1, 1) + Estimates["AWS::Pinpoint::PushTemplate"] = NewResourceEstimate("AWS::Pinpoint::PushTemplate", 1, 2, 1) + Estimates["AWS::Pinpoint::SMSChannel"] = NewResourceEstimate("AWS::Pinpoint::SMSChannel", 2, 1, 1) + Estimates["AWS::Pinpoint::Segment"] = NewResourceEstimate("AWS::Pinpoint::Segment", 2, 1, 1) + Estimates["AWS::Pinpoint::SmsTemplate"] = NewResourceEstimate("AWS::Pinpoint::SmsTemplate", 2, 1, 1) + Estimates["AWS::Pinpoint::VoiceChannel"] = NewResourceEstimate("AWS::Pinpoint::VoiceChannel", 2, 1, 1) + Estimates["AWS::Pinpoint::VoiceTemplate"] = NewResourceEstimate("AWS::Pinpoint::VoiceTemplate", 2, 1, 1) Estimates["AWS::PinpointEmail::ConfigurationSet"] = NewResourceEstimate("AWS::PinpointEmail::ConfigurationSet", 1, 1, 1) Estimates["AWS::PinpointEmail::ConfigurationSetEventDestination"] = NewResourceEstimate("AWS::PinpointEmail::ConfigurationSetEventDestination", 1, 1, 1) Estimates["AWS::PinpointEmail::DedicatedIpPool"] = NewResourceEstimate("AWS::PinpointEmail::DedicatedIpPool", 1, 1, 1) - Estimates["AWS::PinpointEmail::Identity"] = NewResourceEstimate("AWS::PinpointEmail::Identity", 1, 1, 1) - Estimates["AWS::Pipes::Pipe"] = NewResourceEstimate("AWS::Pipes::Pipe", 1, 1, 1) + Estimates["AWS::PinpointSMSVoiceV2::ConfigurationSet"] = NewResourceEstimate("AWS::PinpointSMSVoiceV2::ConfigurationSet", 2, 2, 1) + Estimates["AWS::PinpointSMSVoiceV2::EventDestination"] = NewResourceEstimate("AWS::PinpointSMSVoiceV2::EventDestination", 1, 1, 1) + Estimates["AWS::PinpointSMSVoiceV2::OptOutList"] = NewResourceEstimate("AWS::PinpointSMSVoiceV2::OptOutList", 2, 2, 1) + Estimates["AWS::Pipes::Pipe"] = NewResourceEstimate("AWS::Pipes::Pipe", 14, 12, 1) + Estimates["AWS::Polaroid::Allowlist"] = NewResourceEstimate("AWS::Polaroid::Allowlist", 3, 1, 1) + Estimates["AWS::Proton::Environment"] = NewResourceEstimate("AWS::Proton::Environment", 32, 12, 1) Estimates["AWS::Proton::EnvironmentAccountConnection"] = NewResourceEstimate("AWS::Proton::EnvironmentAccountConnection", 1, 1, 1) Estimates["AWS::Proton::EnvironmentTemplate"] = NewResourceEstimate("AWS::Proton::EnvironmentTemplate", 1, 1, 1) + Estimates["AWS::Proton::EnvironmentTemplateVersion"] = NewResourceEstimate("AWS::Proton::EnvironmentTemplateVersion", 27, 2, 1) Estimates["AWS::Proton::ServiceTemplate"] = NewResourceEstimate("AWS::Proton::ServiceTemplate", 1, 1, 1) - Estimates["AWS::QLDB::Ledger"] = NewResourceEstimate("AWS::QLDB::Ledger", 1, 1, 1) - Estimates["AWS::QLDB::Stream"] = NewResourceEstimate("AWS::QLDB::Stream", 1, 1, 1) - Estimates["AWS::QuickSight::Analysis"] = NewResourceEstimate("AWS::QuickSight::Analysis", 1, 1, 1) - Estimates["AWS::QuickSight::Dashboard"] = NewResourceEstimate("AWS::QuickSight::Dashboard", 1, 1, 1) - Estimates["AWS::QuickSight::DataSet"] = NewResourceEstimate("AWS::QuickSight::DataSet", 1, 1, 1) - Estimates["AWS::QuickSight::DataSource"] = NewResourceEstimate("AWS::QuickSight::DataSource", 1, 1, 1) - Estimates["AWS::QuickSight::RefreshSchedule"] = NewResourceEstimate("AWS::QuickSight::RefreshSchedule", 1, 1, 1) - Estimates["AWS::QuickSight::Template"] = NewResourceEstimate("AWS::QuickSight::Template", 1, 1, 1) - Estimates["AWS::QuickSight::Theme"] = NewResourceEstimate("AWS::QuickSight::Theme", 1, 1, 1) - Estimates["AWS::QuickSight::Topic"] = NewResourceEstimate("AWS::QuickSight::Topic", 1, 1, 1) - Estimates["AWS::QuickSight::VPCConnection"] = NewResourceEstimate("AWS::QuickSight::VPCConnection", 1, 1, 1) - Estimates["AWS::RAM::Permission"] = NewResourceEstimate("AWS::RAM::Permission", 1, 1, 1) - Estimates["AWS::RAM::ResourceShare"] = NewResourceEstimate("AWS::RAM::ResourceShare", 1, 1, 1) - Estimates["AWS::RDS::CustomDBEngineVersion"] = NewResourceEstimate("AWS::RDS::CustomDBEngineVersion", 1, 1, 1) - Estimates["AWS::RDS::DBCluster"] = NewResourceEstimate("AWS::RDS::DBCluster", 1, 1, 1) - Estimates["AWS::RDS::DBClusterParameterGroup"] = NewResourceEstimate("AWS::RDS::DBClusterParameterGroup", 1, 1, 1) - Estimates["AWS::RDS::DBInstance"] = NewResourceEstimate("AWS::RDS::DBInstance", 1, 1, 1) - Estimates["AWS::RDS::DBParameterGroup"] = NewResourceEstimate("AWS::RDS::DBParameterGroup", 1, 1, 1) - Estimates["AWS::RDS::DBProxy"] = NewResourceEstimate("AWS::RDS::DBProxy", 1, 1, 1) - Estimates["AWS::RDS::DBProxyEndpoint"] = NewResourceEstimate("AWS::RDS::DBProxyEndpoint", 1, 1, 1) - Estimates["AWS::RDS::DBProxyTargetGroup"] = NewResourceEstimate("AWS::RDS::DBProxyTargetGroup", 1, 1, 1) - Estimates["AWS::RDS::DBSecurityGroup"] = NewResourceEstimate("AWS::RDS::DBSecurityGroup", 1, 1, 1) - Estimates["AWS::RDS::DBSecurityGroupIngress"] = NewResourceEstimate("AWS::RDS::DBSecurityGroupIngress", 1, 1, 1) - Estimates["AWS::RDS::DBSubnetGroup"] = NewResourceEstimate("AWS::RDS::DBSubnetGroup", 1, 1, 1) - Estimates["AWS::RDS::EventSubscription"] = NewResourceEstimate("AWS::RDS::EventSubscription", 1, 1, 1) - Estimates["AWS::RDS::GlobalCluster"] = NewResourceEstimate("AWS::RDS::GlobalCluster", 1, 1, 1) + Estimates["AWS::QLDB::Ledger"] = NewResourceEstimate("AWS::QLDB::Ledger", 81, 1, 1) + Estimates["AWS::QLDB::Stream"] = NewResourceEstimate("AWS::QLDB::Stream", 4, 6, 1) + Estimates["AWS::QuickSight::Analysis"] = NewResourceEstimate("AWS::QuickSight::Analysis", 113, 129, 1) + Estimates["AWS::QuickSight::Dashboard"] = NewResourceEstimate("AWS::QuickSight::Dashboard", 102, 139, 1) + Estimates["AWS::QuickSight::DataSet"] = NewResourceEstimate("AWS::QuickSight::DataSet", 24, 32, 1) + Estimates["AWS::QuickSight::DataSource"] = NewResourceEstimate("AWS::QuickSight::DataSource", 22, 25, 1) + Estimates["AWS::QuickSight::RefreshSchedule"] = NewResourceEstimate("AWS::QuickSight::RefreshSchedule", 62, 1, 1) + Estimates["AWS::QuickSight::Template"] = NewResourceEstimate("AWS::QuickSight::Template", 113, 114, 1) + Estimates["AWS::QuickSight::Theme"] = NewResourceEstimate("AWS::QuickSight::Theme", 47, 47, 1) + Estimates["AWS::QuickSight::Topic"] = NewResourceEstimate("AWS::QuickSight::Topic", 67, 1, 1) + Estimates["AWS::QuickSight::VPCConnection"] = NewResourceEstimate("AWS::QuickSight::VPCConnection", 107, 1, 1) + Estimates["AWS::RAM::Permission"] = NewResourceEstimate("AWS::RAM::Permission", 2, 1, 1) + Estimates["AWS::RAM::ResourceShare"] = NewResourceEstimate("AWS::RAM::ResourceShare", 16, 9, 1) + Estimates["AWS::RDS::CustomDBEngineVersion"] = NewResourceEstimate("AWS::RDS::CustomDBEngineVersion", 3, 2, 1) + Estimates["AWS::RDS::DBCluster"] = NewResourceEstimate("AWS::RDS::DBCluster", 222, 62, 1) + Estimates["AWS::RDS::DBClusterParameterGroup"] = NewResourceEstimate("AWS::RDS::DBClusterParameterGroup", 2, 2, 1) + Estimates["AWS::RDS::DBInstance"] = NewResourceEstimate("AWS::RDS::DBInstance", 595, 171, 1) + Estimates["AWS::RDS::DBParameterGroup"] = NewResourceEstimate("AWS::RDS::DBParameterGroup", 2, 2, 1) + Estimates["AWS::RDS::DBProxy"] = NewResourceEstimate("AWS::RDS::DBProxy", 225, 63, 1) + Estimates["AWS::RDS::DBProxyEndpoint"] = NewResourceEstimate("AWS::RDS::DBProxyEndpoint", 163, 106, 1) + Estimates["AWS::RDS::DBProxyTargetGroup"] = NewResourceEstimate("AWS::RDS::DBProxyTargetGroup", 85, 4, 1) + Estimates["AWS::RDS::DBSecurityGroup"] = NewResourceEstimate("AWS::RDS::DBSecurityGroup", 2, 0, 1) + Estimates["AWS::RDS::DBSubnetGroup"] = NewResourceEstimate("AWS::RDS::DBSubnetGroup", 2, 2, 1) + Estimates["AWS::RDS::EventSubscription"] = NewResourceEstimate("AWS::RDS::EventSubscription", 2, 1, 1) + Estimates["AWS::RDS::GlobalCluster"] = NewResourceEstimate("AWS::RDS::GlobalCluster", 2, 2, 1) Estimates["AWS::RDS::OptionGroup"] = NewResourceEstimate("AWS::RDS::OptionGroup", 1, 1, 1) - Estimates["AWS::RUM::AppMonitor"] = NewResourceEstimate("AWS::RUM::AppMonitor", 1, 1, 1) - Estimates["AWS::Redshift::Cluster"] = NewResourceEstimate("AWS::Redshift::Cluster", 1, 1, 1) - Estimates["AWS::Redshift::ClusterParameterGroup"] = NewResourceEstimate("AWS::Redshift::ClusterParameterGroup", 1, 1, 1) - Estimates["AWS::Redshift::ClusterSecurityGroup"] = NewResourceEstimate("AWS::Redshift::ClusterSecurityGroup", 1, 1, 1) - Estimates["AWS::Redshift::ClusterSecurityGroupIngress"] = NewResourceEstimate("AWS::Redshift::ClusterSecurityGroupIngress", 1, 1, 1) - Estimates["AWS::Redshift::ClusterSubnetGroup"] = NewResourceEstimate("AWS::Redshift::ClusterSubnetGroup", 1, 1, 1) - Estimates["AWS::Redshift::EndpointAccess"] = NewResourceEstimate("AWS::Redshift::EndpointAccess", 1, 1, 1) - Estimates["AWS::Redshift::EndpointAuthorization"] = NewResourceEstimate("AWS::Redshift::EndpointAuthorization", 1, 1, 1) - Estimates["AWS::Redshift::EventSubscription"] = NewResourceEstimate("AWS::Redshift::EventSubscription", 1, 1, 1) - Estimates["AWS::Redshift::ScheduledAction"] = NewResourceEstimate("AWS::Redshift::ScheduledAction", 1, 1, 1) - Estimates["AWS::RedshiftServerless::Namespace"] = NewResourceEstimate("AWS::RedshiftServerless::Namespace", 1, 1, 1) - Estimates["AWS::RedshiftServerless::Workgroup"] = NewResourceEstimate("AWS::RedshiftServerless::Workgroup", 1, 1, 1) - Estimates["AWS::RefactorSpaces::Application"] = NewResourceEstimate("AWS::RefactorSpaces::Application", 1, 1, 1) - Estimates["AWS::RefactorSpaces::Environment"] = NewResourceEstimate("AWS::RefactorSpaces::Environment", 1, 1, 1) - Estimates["AWS::RefactorSpaces::Route"] = NewResourceEstimate("AWS::RefactorSpaces::Route", 1, 1, 1) - Estimates["AWS::RefactorSpaces::Service"] = NewResourceEstimate("AWS::RefactorSpaces::Service", 1, 1, 1) - Estimates["AWS::Rekognition::Collection"] = NewResourceEstimate("AWS::Rekognition::Collection", 1, 1, 1) + Estimates["AWS::RUM::AppMonitor"] = NewResourceEstimate("AWS::RUM::AppMonitor", 5, 3, 1) + Estimates["AWS::Rbin::Rule"] = NewResourceEstimate("AWS::Rbin::Rule", 6, 1, 1) + Estimates["AWS::Redshift::Cluster"] = NewResourceEstimate("AWS::Redshift::Cluster", 239, 90, 1) + Estimates["AWS::Redshift::ClusterParameterGroup"] = NewResourceEstimate("AWS::Redshift::ClusterParameterGroup", 5, 2, 1) + Estimates["AWS::Redshift::ClusterSubnetGroup"] = NewResourceEstimate("AWS::Redshift::ClusterSubnetGroup", 3, 3, 1) + Estimates["AWS::Redshift::EndpointAccess"] = NewResourceEstimate("AWS::Redshift::EndpointAccess", 180, 1, 1) + Estimates["AWS::Redshift::EndpointAuthorization"] = NewResourceEstimate("AWS::Redshift::EndpointAuthorization", 6, 1, 1) + Estimates["AWS::Redshift::EventSubscription"] = NewResourceEstimate("AWS::Redshift::EventSubscription", 6, 1, 1) + Estimates["AWS::Redshift::ScheduledAction"] = NewResourceEstimate("AWS::Redshift::ScheduledAction", 6, 1, 1) + Estimates["AWS::RedshiftServerless::Namespace"] = NewResourceEstimate("AWS::RedshiftServerless::Namespace", 3, 0, 1) + Estimates["AWS::RedshiftServerless::Workgroup"] = NewResourceEstimate("AWS::RedshiftServerless::Workgroup", 123, 1, 1) + Estimates["AWS::RefactorSpaces::Application"] = NewResourceEstimate("AWS::RefactorSpaces::Application", 3, 1, 1) + Estimates["AWS::RefactorSpaces::Environment"] = NewResourceEstimate("AWS::RefactorSpaces::Environment", 2, 1, 1) + Estimates["AWS::RefactorSpaces::Route"] = NewResourceEstimate("AWS::RefactorSpaces::Route", 2, 1, 1) + Estimates["AWS::RefactorSpaces::Service"] = NewResourceEstimate("AWS::RefactorSpaces::Service", 2, 1, 1) + Estimates["AWS::Rekognition::Collection"] = NewResourceEstimate("AWS::Rekognition::Collection", 67, 1, 1) Estimates["AWS::Rekognition::Project"] = NewResourceEstimate("AWS::Rekognition::Project", 1, 1, 1) - Estimates["AWS::Rekognition::StreamProcessor"] = NewResourceEstimate("AWS::Rekognition::StreamProcessor", 1, 1, 1) - Estimates["AWS::ResilienceHub::App"] = NewResourceEstimate("AWS::ResilienceHub::App", 1, 1, 1) - Estimates["AWS::ResilienceHub::ResiliencyPolicy"] = NewResourceEstimate("AWS::ResilienceHub::ResiliencyPolicy", 1, 1, 1) - Estimates["AWS::ResourceExplorer2::DefaultViewAssociation"] = NewResourceEstimate("AWS::ResourceExplorer2::DefaultViewAssociation", 1, 1, 1) - Estimates["AWS::ResourceExplorer2::Index"] = NewResourceEstimate("AWS::ResourceExplorer2::Index", 1, 1, 1) - Estimates["AWS::ResourceExplorer2::View"] = NewResourceEstimate("AWS::ResourceExplorer2::View", 1, 1, 1) - Estimates["AWS::ResourceGroups::Group"] = NewResourceEstimate("AWS::ResourceGroups::Group", 1, 1, 1) - Estimates["AWS::RoboMaker::Fleet"] = NewResourceEstimate("AWS::RoboMaker::Fleet", 1, 1, 1) - Estimates["AWS::RoboMaker::Robot"] = NewResourceEstimate("AWS::RoboMaker::Robot", 1, 1, 1) + Estimates["AWS::Rekognition::StreamProcessor"] = NewResourceEstimate("AWS::Rekognition::StreamProcessor", 1, 3, 1) + Estimates["AWS::ResilienceHub::App"] = NewResourceEstimate("AWS::ResilienceHub::App", 3, 2, 1) + Estimates["AWS::ResilienceHub::ResiliencyPolicy"] = NewResourceEstimate("AWS::ResilienceHub::ResiliencyPolicy", 3, 2, 1) + Estimates["AWS::ResourceExplorer2::DefaultViewAssociation"] = NewResourceEstimate("AWS::ResourceExplorer2::DefaultViewAssociation", 1, 0, 1) + Estimates["AWS::ResourceExplorer2::Index"] = NewResourceEstimate("AWS::ResourceExplorer2::Index", 32, 2, 1) + Estimates["AWS::ResourceExplorer2::View"] = NewResourceEstimate("AWS::ResourceExplorer2::View", 1, 2, 1) + Estimates["AWS::ResourceGroups::Group"] = NewResourceEstimate("AWS::ResourceGroups::Group", 2, 2, 1) Estimates["AWS::RoboMaker::RobotApplication"] = NewResourceEstimate("AWS::RoboMaker::RobotApplication", 1, 1, 1) - Estimates["AWS::RoboMaker::RobotApplicationVersion"] = NewResourceEstimate("AWS::RoboMaker::RobotApplicationVersion", 1, 1, 1) + Estimates["AWS::RoboMaker::RobotApplicationVersion"] = NewResourceEstimate("AWS::RoboMaker::RobotApplicationVersion", 2, 1, 1) Estimates["AWS::RoboMaker::SimulationApplication"] = NewResourceEstimate("AWS::RoboMaker::SimulationApplication", 1, 1, 1) - Estimates["AWS::RoboMaker::SimulationApplicationVersion"] = NewResourceEstimate("AWS::RoboMaker::SimulationApplicationVersion", 1, 1, 1) - Estimates["AWS::RolesAnywhere::CRL"] = NewResourceEstimate("AWS::RolesAnywhere::CRL", 1, 1, 1) - Estimates["AWS::RolesAnywhere::Profile"] = NewResourceEstimate("AWS::RolesAnywhere::Profile", 1, 1, 1) - Estimates["AWS::RolesAnywhere::TrustAnchor"] = NewResourceEstimate("AWS::RolesAnywhere::TrustAnchor", 1, 1, 1) - Estimates["AWS::Route53::CidrCollection"] = NewResourceEstimate("AWS::Route53::CidrCollection", 1, 1, 1) - Estimates["AWS::Route53::DNSSEC"] = NewResourceEstimate("AWS::Route53::DNSSEC", 1, 1, 1) - Estimates["AWS::Route53::HealthCheck"] = NewResourceEstimate("AWS::Route53::HealthCheck", 1, 1, 1) - Estimates["AWS::Route53::HostedZone"] = NewResourceEstimate("AWS::Route53::HostedZone", 1, 1, 1) - Estimates["AWS::Route53::KeySigningKey"] = NewResourceEstimate("AWS::Route53::KeySigningKey", 1, 1, 1) - Estimates["AWS::Route53::RecordSet"] = NewResourceEstimate("AWS::Route53::RecordSet", 1, 1, 1) - Estimates["AWS::Route53::RecordSetGroup"] = NewResourceEstimate("AWS::Route53::RecordSetGroup", 1, 1, 1) - Estimates["AWS::Route53RecoveryControl::Cluster"] = NewResourceEstimate("AWS::Route53RecoveryControl::Cluster", 1, 1, 1) - Estimates["AWS::Route53RecoveryControl::ControlPanel"] = NewResourceEstimate("AWS::Route53RecoveryControl::ControlPanel", 1, 1, 1) - Estimates["AWS::Route53RecoveryControl::RoutingControl"] = NewResourceEstimate("AWS::Route53RecoveryControl::RoutingControl", 1, 1, 1) - Estimates["AWS::Route53RecoveryControl::SafetyRule"] = NewResourceEstimate("AWS::Route53RecoveryControl::SafetyRule", 1, 1, 1) - Estimates["AWS::Route53RecoveryReadiness::Cell"] = NewResourceEstimate("AWS::Route53RecoveryReadiness::Cell", 1, 1, 1) - Estimates["AWS::Route53RecoveryReadiness::ReadinessCheck"] = NewResourceEstimate("AWS::Route53RecoveryReadiness::ReadinessCheck", 1, 1, 1) - Estimates["AWS::Route53RecoveryReadiness::RecoveryGroup"] = NewResourceEstimate("AWS::Route53RecoveryReadiness::RecoveryGroup", 1, 1, 1) - Estimates["AWS::Route53RecoveryReadiness::ResourceSet"] = NewResourceEstimate("AWS::Route53RecoveryReadiness::ResourceSet", 1, 1, 1) - Estimates["AWS::Route53Resolver::FirewallDomainList"] = NewResourceEstimate("AWS::Route53Resolver::FirewallDomainList", 1, 1, 1) - Estimates["AWS::Route53Resolver::FirewallRuleGroup"] = NewResourceEstimate("AWS::Route53Resolver::FirewallRuleGroup", 1, 1, 1) - Estimates["AWS::Route53Resolver::FirewallRuleGroupAssociation"] = NewResourceEstimate("AWS::Route53Resolver::FirewallRuleGroupAssociation", 1, 1, 1) - Estimates["AWS::Route53Resolver::OutpostResolver"] = NewResourceEstimate("AWS::Route53Resolver::OutpostResolver", 1, 1, 1) - Estimates["AWS::Route53Resolver::ResolverConfig"] = NewResourceEstimate("AWS::Route53Resolver::ResolverConfig", 1, 1, 1) - Estimates["AWS::Route53Resolver::ResolverDNSSECConfig"] = NewResourceEstimate("AWS::Route53Resolver::ResolverDNSSECConfig", 1, 1, 1) - Estimates["AWS::Route53Resolver::ResolverEndpoint"] = NewResourceEstimate("AWS::Route53Resolver::ResolverEndpoint", 1, 1, 1) - Estimates["AWS::Route53Resolver::ResolverQueryLoggingConfig"] = NewResourceEstimate("AWS::Route53Resolver::ResolverQueryLoggingConfig", 1, 1, 1) - Estimates["AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation"] = NewResourceEstimate("AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation", 1, 1, 1) - Estimates["AWS::Route53Resolver::ResolverRule"] = NewResourceEstimate("AWS::Route53Resolver::ResolverRule", 1, 1, 1) - Estimates["AWS::Route53Resolver::ResolverRuleAssociation"] = NewResourceEstimate("AWS::Route53Resolver::ResolverRuleAssociation", 1, 1, 1) - Estimates["AWS::S3::AccessPoint"] = NewResourceEstimate("AWS::S3::AccessPoint", 1, 1, 1) - Estimates["AWS::S3::Bucket"] = NewResourceEstimate("AWS::S3::Bucket", 10, 5, 3) - Estimates["AWS::S3::BucketPolicy"] = NewResourceEstimate("AWS::S3::BucketPolicy", 5, 5, 5) - Estimates["AWS::S3::MultiRegionAccessPoint"] = NewResourceEstimate("AWS::S3::MultiRegionAccessPoint", 1, 1, 1) - Estimates["AWS::S3::MultiRegionAccessPointPolicy"] = NewResourceEstimate("AWS::S3::MultiRegionAccessPointPolicy", 1, 1, 1) - Estimates["AWS::S3::StorageLens"] = NewResourceEstimate("AWS::S3::StorageLens", 1, 1, 1) - Estimates["AWS::S3ObjectLambda::AccessPoint"] = NewResourceEstimate("AWS::S3ObjectLambda::AccessPoint", 1, 1, 1) + Estimates["AWS::RoboMaker::SimulationApplicationVersion"] = NewResourceEstimate("AWS::RoboMaker::SimulationApplicationVersion", 2, 1, 1) + Estimates["AWS::RolesAnywhere::CRL"] = NewResourceEstimate("AWS::RolesAnywhere::CRL", 1, 2, 1) + Estimates["AWS::RolesAnywhere::Profile"] = NewResourceEstimate("AWS::RolesAnywhere::Profile", 1, 2, 1) + Estimates["AWS::RolesAnywhere::TrustAnchor"] = NewResourceEstimate("AWS::RolesAnywhere::TrustAnchor", 1, 2, 1) + Estimates["AWS::Route53::CidrCollection"] = NewResourceEstimate("AWS::Route53::CidrCollection", 1, 2, 1) + Estimates["AWS::Route53::DNSSEC"] = NewResourceEstimate("AWS::Route53::DNSSEC", 32, 1, 1) + Estimates["AWS::Route53::HealthCheck"] = NewResourceEstimate("AWS::Route53::HealthCheck", 2, 2, 1) + Estimates["AWS::Route53::HostedZone"] = NewResourceEstimate("AWS::Route53::HostedZone", 71, 16, 1) + Estimates["AWS::Route53::KeySigningKey"] = NewResourceEstimate("AWS::Route53::KeySigningKey", 32, 33, 1) + Estimates["AWS::Route53::RecordSet"] = NewResourceEstimate("AWS::Route53::RecordSet", 20, 2, 1) + Estimates["AWS::Route53::RecordSetGroup"] = NewResourceEstimate("AWS::Route53::RecordSetGroup", 33, 1, 1) + Estimates["AWS::Route53RecoveryControl::Cluster"] = NewResourceEstimate("AWS::Route53RecoveryControl::Cluster", 7, 1, 1) + Estimates["AWS::Route53RecoveryControl::ControlPanel"] = NewResourceEstimate("AWS::Route53RecoveryControl::ControlPanel", 12, 1, 1) + Estimates["AWS::Route53RecoveryControl::RoutingControl"] = NewResourceEstimate("AWS::Route53RecoveryControl::RoutingControl", 24, 1, 1) + Estimates["AWS::Route53RecoveryControl::SafetyRule"] = NewResourceEstimate("AWS::Route53RecoveryControl::SafetyRule", 14, 1, 1) + Estimates["AWS::Route53RecoveryReadiness::Cell"] = NewResourceEstimate("AWS::Route53RecoveryReadiness::Cell", 7, 1, 1) + Estimates["AWS::Route53RecoveryReadiness::ReadinessCheck"] = NewResourceEstimate("AWS::Route53RecoveryReadiness::ReadinessCheck", 7, 0, 1) + Estimates["AWS::Route53RecoveryReadiness::RecoveryGroup"] = NewResourceEstimate("AWS::Route53RecoveryReadiness::RecoveryGroup", 7, 1, 1) + Estimates["AWS::Route53RecoveryReadiness::ResourceSet"] = NewResourceEstimate("AWS::Route53RecoveryReadiness::ResourceSet", 7, 7, 1) + Estimates["AWS::Route53Resolver::FirewallDomainList"] = NewResourceEstimate("AWS::Route53Resolver::FirewallDomainList", 6, 1, 1) + Estimates["AWS::Route53Resolver::FirewallRuleGroup"] = NewResourceEstimate("AWS::Route53Resolver::FirewallRuleGroup", 43, 1, 1) + Estimates["AWS::Route53Resolver::FirewallRuleGroupAssociation"] = NewResourceEstimate("AWS::Route53Resolver::FirewallRuleGroupAssociation", 63, 1, 1) + Estimates["AWS::Route53Resolver::OutpostResolver"] = NewResourceEstimate("AWS::Route53Resolver::OutpostResolver", 4, 4, 1) + Estimates["AWS::Route53Resolver::Profile"] = NewResourceEstimate("AWS::Route53Resolver::Profile", 17, 1, 1) + Estimates["AWS::Route53Resolver::ProfileAssociation"] = NewResourceEstimate("AWS::Route53Resolver::ProfileAssociation", 187, 1, 1) + Estimates["AWS::Route53Resolver::ProfileResourceAssociation"] = NewResourceEstimate("AWS::Route53Resolver::ProfileResourceAssociation", 82, 1, 1) + Estimates["AWS::Route53Resolver::ResolverConfig"] = NewResourceEstimate("AWS::Route53Resolver::ResolverConfig", 185, 1, 1) + Estimates["AWS::Route53Resolver::ResolverDNSSECConfig"] = NewResourceEstimate("AWS::Route53Resolver::ResolverDNSSECConfig", 185, 1, 1) + Estimates["AWS::Route53Resolver::ResolverEndpoint"] = NewResourceEstimate("AWS::Route53Resolver::ResolverEndpoint", 40, 1, 1) + Estimates["AWS::Route53Resolver::ResolverQueryLoggingConfig"] = NewResourceEstimate("AWS::Route53Resolver::ResolverQueryLoggingConfig", 6, 0, 1) + Estimates["AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation"] = NewResourceEstimate("AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation", 10, 0, 1) + Estimates["AWS::Route53Resolver::ResolverRule"] = NewResourceEstimate("AWS::Route53Resolver::ResolverRule", 17, 16, 1) + Estimates["AWS::Route53Resolver::ResolverRuleAssociation"] = NewResourceEstimate("AWS::Route53Resolver::ResolverRuleAssociation", 97, 0, 1) + Estimates["AWS::S3::AccessPoint"] = NewResourceEstimate("AWS::S3::AccessPoint", 32, 2, 1) + Estimates["AWS::S3::Bucket"] = NewResourceEstimate("AWS::S3::Bucket", 30, 31, 1) + Estimates["AWS::S3::BucketPolicy"] = NewResourceEstimate("AWS::S3::BucketPolicy", 12, 12, 1) + Estimates["AWS::S3::MultiRegionAccessPoint"] = NewResourceEstimate("AWS::S3::MultiRegionAccessPoint", 220, 1, 1) + Estimates["AWS::S3::MultiRegionAccessPointPolicy"] = NewResourceEstimate("AWS::S3::MultiRegionAccessPointPolicy", 12, 15, 1) + Estimates["AWS::S3::StorageLens"] = NewResourceEstimate("AWS::S3::StorageLens", 2, 2, 1) + Estimates["AWS::S3ObjectLambda::AccessPoint"] = NewResourceEstimate("AWS::S3ObjectLambda::AccessPoint", 2, 2, 1) Estimates["AWS::S3ObjectLambda::AccessPointPolicy"] = NewResourceEstimate("AWS::S3ObjectLambda::AccessPointPolicy", 1, 1, 1) - Estimates["AWS::S3Outposts::AccessPoint"] = NewResourceEstimate("AWS::S3Outposts::AccessPoint", 1, 1, 1) - Estimates["AWS::S3Outposts::Bucket"] = NewResourceEstimate("AWS::S3Outposts::Bucket", 1, 1, 1) - Estimates["AWS::S3Outposts::BucketPolicy"] = NewResourceEstimate("AWS::S3Outposts::BucketPolicy", 1, 1, 1) - Estimates["AWS::S3Outposts::Endpoint"] = NewResourceEstimate("AWS::S3Outposts::Endpoint", 1, 1, 1) - Estimates["AWS::SDB::Domain"] = NewResourceEstimate("AWS::SDB::Domain", 1, 1, 1) - Estimates["AWS::SES::ConfigurationSet"] = NewResourceEstimate("AWS::SES::ConfigurationSet", 1, 1, 1) - Estimates["AWS::SES::ConfigurationSetEventDestination"] = NewResourceEstimate("AWS::SES::ConfigurationSetEventDestination", 1, 1, 1) + Estimates["AWS::S3Outposts::AccessPoint"] = NewResourceEstimate("AWS::S3Outposts::AccessPoint", 82, 2, 1) + Estimates["AWS::S3Outposts::Bucket"] = NewResourceEstimate("AWS::S3Outposts::Bucket", 42, 2, 1) + Estimates["AWS::S3Outposts::BucketPolicy"] = NewResourceEstimate("AWS::S3Outposts::BucketPolicy", 2, 2, 1) + Estimates["AWS::S3Outposts::Endpoint"] = NewResourceEstimate("AWS::S3Outposts::Endpoint", 253, 1, 1) + Estimates["AWS::SES::ConfigurationSet"] = NewResourceEstimate("AWS::SES::ConfigurationSet", 1, 0, 1) + Estimates["AWS::SES::ConfigurationSetEventDestination"] = NewResourceEstimate("AWS::SES::ConfigurationSetEventDestination", 11, 0, 1) Estimates["AWS::SES::ContactList"] = NewResourceEstimate("AWS::SES::ContactList", 1, 1, 1) - Estimates["AWS::SES::DedicatedIpPool"] = NewResourceEstimate("AWS::SES::DedicatedIpPool", 1, 1, 1) - Estimates["AWS::SES::EmailIdentity"] = NewResourceEstimate("AWS::SES::EmailIdentity", 1, 1, 1) + Estimates["AWS::SES::DedicatedIpPool"] = NewResourceEstimate("AWS::SES::DedicatedIpPool", 11, 1, 1) + Estimates["AWS::SES::EmailIdentity"] = NewResourceEstimate("AWS::SES::EmailIdentity", 127, 2, 1) Estimates["AWS::SES::ReceiptFilter"] = NewResourceEstimate("AWS::SES::ReceiptFilter", 1, 1, 1) - Estimates["AWS::SES::ReceiptRule"] = NewResourceEstimate("AWS::SES::ReceiptRule", 1, 1, 1) + Estimates["AWS::SES::ReceiptRule"] = NewResourceEstimate("AWS::SES::ReceiptRule", 1, 0, 1) Estimates["AWS::SES::ReceiptRuleSet"] = NewResourceEstimate("AWS::SES::ReceiptRuleSet", 1, 1, 1) - Estimates["AWS::SES::Template"] = NewResourceEstimate("AWS::SES::Template", 1, 1, 1) - Estimates["AWS::SES::VdmAttributes"] = NewResourceEstimate("AWS::SES::VdmAttributes", 1, 1, 1) - Estimates["AWS::SNS::Subscription"] = NewResourceEstimate("AWS::SNS::Subscription", 1, 1, 1) - Estimates["AWS::SNS::Topic"] = NewResourceEstimate("AWS::SNS::Topic", 1, 1, 1) - Estimates["AWS::SNS::TopicInlinePolicy"] = NewResourceEstimate("AWS::SNS::TopicInlinePolicy", 1, 1, 1) + Estimates["AWS::SES::Template"] = NewResourceEstimate("AWS::SES::Template", 12, 1, 1) + Estimates["AWS::SES::VdmAttributes"] = NewResourceEstimate("AWS::SES::VdmAttributes", 11, 1, 1) + Estimates["AWS::SNS::Subscription"] = NewResourceEstimate("AWS::SNS::Subscription", 2, 2, 1) + Estimates["AWS::SNS::Topic"] = NewResourceEstimate("AWS::SNS::Topic", 4, 7, 1) + Estimates["AWS::SNS::TopicInlinePolicy"] = NewResourceEstimate("AWS::SNS::TopicInlinePolicy", 32, 32, 1) Estimates["AWS::SNS::TopicPolicy"] = NewResourceEstimate("AWS::SNS::TopicPolicy", 1, 1, 1) - Estimates["AWS::SQS::Queue"] = NewResourceEstimate("AWS::SQS::Queue", 1, 1, 1) - Estimates["AWS::SQS::QueueInlinePolicy"] = NewResourceEstimate("AWS::SQS::QueueInlinePolicy", 1, 1, 1) - Estimates["AWS::SQS::QueuePolicy"] = NewResourceEstimate("AWS::SQS::QueuePolicy", 1, 1, 1) - Estimates["AWS::SSM::Association"] = NewResourceEstimate("AWS::SSM::Association", 1, 1, 1) - Estimates["AWS::SSM::Document"] = NewResourceEstimate("AWS::SSM::Document", 1, 1, 1) - Estimates["AWS::SSM::MaintenanceWindow"] = NewResourceEstimate("AWS::SSM::MaintenanceWindow", 1, 1, 1) - Estimates["AWS::SSM::MaintenanceWindowTarget"] = NewResourceEstimate("AWS::SSM::MaintenanceWindowTarget", 1, 1, 1) - Estimates["AWS::SSM::MaintenanceWindowTask"] = NewResourceEstimate("AWS::SSM::MaintenanceWindowTask", 1, 1, 1) - Estimates["AWS::SSM::Parameter"] = NewResourceEstimate("AWS::SSM::Parameter", 2, 2, 2) - Estimates["AWS::SSM::PatchBaseline"] = NewResourceEstimate("AWS::SSM::PatchBaseline", 1, 1, 1) - Estimates["AWS::SSM::ResourceDataSync"] = NewResourceEstimate("AWS::SSM::ResourceDataSync", 1, 1, 1) - Estimates["AWS::SSM::ResourcePolicy"] = NewResourceEstimate("AWS::SSM::ResourcePolicy", 1, 1, 1) - Estimates["AWS::SSMContacts::Contact"] = NewResourceEstimate("AWS::SSMContacts::Contact", 1, 1, 1) - Estimates["AWS::SSMContacts::ContactChannel"] = NewResourceEstimate("AWS::SSMContacts::ContactChannel", 1, 1, 1) - Estimates["AWS::SSMContacts::Plan"] = NewResourceEstimate("AWS::SSMContacts::Plan", 1, 1, 1) - Estimates["AWS::SSMContacts::Rotation"] = NewResourceEstimate("AWS::SSMContacts::Rotation", 1, 1, 1) - Estimates["AWS::SSMIncidents::ReplicationSet"] = NewResourceEstimate("AWS::SSMIncidents::ReplicationSet", 1, 1, 1) - Estimates["AWS::SSMIncidents::ResponsePlan"] = NewResourceEstimate("AWS::SSMIncidents::ResponsePlan", 1, 1, 1) - Estimates["AWS::SSO::Assignment"] = NewResourceEstimate("AWS::SSO::Assignment", 1, 1, 1) + Estimates["AWS::SQS::Queue"] = NewResourceEstimate("AWS::SQS::Queue", 72, 2, 1) + Estimates["AWS::SQS::QueueInlinePolicy"] = NewResourceEstimate("AWS::SQS::QueueInlinePolicy", 32, 1, 1) + Estimates["AWS::SQS::QueuePolicy"] = NewResourceEstimate("AWS::SQS::QueuePolicy", 1, 0, 1) + Estimates["AWS::SSM::Association"] = NewResourceEstimate("AWS::SSM::Association", 2, 0, 1) + Estimates["AWS::SSM::Document"] = NewResourceEstimate("AWS::SSM::Document", 32, 2, 1) + Estimates["AWS::SSM::MaintenanceWindow"] = NewResourceEstimate("AWS::SSM::MaintenanceWindow", 1, 2, 1) + Estimates["AWS::SSM::MaintenanceWindowTarget"] = NewResourceEstimate("AWS::SSM::MaintenanceWindowTarget", 1, 0, 1) + Estimates["AWS::SSM::MaintenanceWindowTask"] = NewResourceEstimate("AWS::SSM::MaintenanceWindowTask", 1, 0, 1) + Estimates["AWS::SSM::OpsMetadata"] = NewResourceEstimate("AWS::SSM::OpsMetadata", 1, 1, 1) + Estimates["AWS::SSM::Parameter"] = NewResourceEstimate("AWS::SSM::Parameter", 1, 1, 1) + Estimates["AWS::SSM::PatchBaseline"] = NewResourceEstimate("AWS::SSM::PatchBaseline", 2, 2, 1) + Estimates["AWS::SSM::ResourceDataSync"] = NewResourceEstimate("AWS::SSM::ResourceDataSync", 4, 1, 1) + Estimates["AWS::SSM::ResourcePolicy"] = NewResourceEstimate("AWS::SSM::ResourcePolicy", 1, 2, 1) + Estimates["AWS::SSMContacts::Contact"] = NewResourceEstimate("AWS::SSMContacts::Contact", 2, 2, 1) + Estimates["AWS::SSMContacts::ContactChannel"] = NewResourceEstimate("AWS::SSMContacts::ContactChannel", 2, 2, 1) + Estimates["AWS::SSMContacts::Plan"] = NewResourceEstimate("AWS::SSMContacts::Plan", 6, 2, 1) + Estimates["AWS::SSMContacts::Rotation"] = NewResourceEstimate("AWS::SSMContacts::Rotation", 4, 2, 1) + Estimates["AWS::SSMIncidents::ReplicationSet"] = NewResourceEstimate("AWS::SSMIncidents::ReplicationSet", 101, 969, 1) + Estimates["AWS::SSMIncidents::ResponsePlan"] = NewResourceEstimate("AWS::SSMIncidents::ResponsePlan", 2, 3, 1) + Estimates["AWS::SSO::Assignment"] = NewResourceEstimate("AWS::SSO::Assignment", 15, 1, 1) Estimates["AWS::SSO::InstanceAccessControlAttributeConfiguration"] = NewResourceEstimate("AWS::SSO::InstanceAccessControlAttributeConfiguration", 1, 1, 1) - Estimates["AWS::SSO::PermissionSet"] = NewResourceEstimate("AWS::SSO::PermissionSet", 1, 1, 1) - Estimates["AWS::SageMaker::App"] = NewResourceEstimate("AWS::SageMaker::App", 1, 1, 1) + Estimates["AWS::SSO::PermissionSet"] = NewResourceEstimate("AWS::SSO::PermissionSet", 2, 8, 1) + Estimates["AWS::SageMaker::App"] = NewResourceEstimate("AWS::SageMaker::App", 187, 1, 78) Estimates["AWS::SageMaker::AppImageConfig"] = NewResourceEstimate("AWS::SageMaker::AppImageConfig", 1, 1, 1) Estimates["AWS::SageMaker::CodeRepository"] = NewResourceEstimate("AWS::SageMaker::CodeRepository", 1, 1, 1) - Estimates["AWS::SageMaker::DataQualityJobDefinition"] = NewResourceEstimate("AWS::SageMaker::DataQualityJobDefinition", 1, 1, 1) - Estimates["AWS::SageMaker::Device"] = NewResourceEstimate("AWS::SageMaker::Device", 1, 1, 1) - Estimates["AWS::SageMaker::DeviceFleet"] = NewResourceEstimate("AWS::SageMaker::DeviceFleet", 1, 1, 1) - Estimates["AWS::SageMaker::Domain"] = NewResourceEstimate("AWS::SageMaker::Domain", 1, 1, 1) - Estimates["AWS::SageMaker::Endpoint"] = NewResourceEstimate("AWS::SageMaker::Endpoint", 1, 1, 1) - Estimates["AWS::SageMaker::EndpointConfig"] = NewResourceEstimate("AWS::SageMaker::EndpointConfig", 1, 1, 1) - Estimates["AWS::SageMaker::FeatureGroup"] = NewResourceEstimate("AWS::SageMaker::FeatureGroup", 1, 1, 1) - Estimates["AWS::SageMaker::Image"] = NewResourceEstimate("AWS::SageMaker::Image", 1, 1, 1) - Estimates["AWS::SageMaker::ImageVersion"] = NewResourceEstimate("AWS::SageMaker::ImageVersion", 1, 1, 1) - Estimates["AWS::SageMaker::InferenceExperiment"] = NewResourceEstimate("AWS::SageMaker::InferenceExperiment", 1, 1, 1) - Estimates["AWS::SageMaker::Model"] = NewResourceEstimate("AWS::SageMaker::Model", 1, 1, 1) - Estimates["AWS::SageMaker::ModelBiasJobDefinition"] = NewResourceEstimate("AWS::SageMaker::ModelBiasJobDefinition", 1, 1, 1) - Estimates["AWS::SageMaker::ModelCard"] = NewResourceEstimate("AWS::SageMaker::ModelCard", 1, 1, 1) - Estimates["AWS::SageMaker::ModelExplainabilityJobDefinition"] = NewResourceEstimate("AWS::SageMaker::ModelExplainabilityJobDefinition", 1, 1, 1) - Estimates["AWS::SageMaker::ModelPackage"] = NewResourceEstimate("AWS::SageMaker::ModelPackage", 1, 1, 1) - Estimates["AWS::SageMaker::ModelPackageGroup"] = NewResourceEstimate("AWS::SageMaker::ModelPackageGroup", 1, 1, 1) - Estimates["AWS::SageMaker::ModelQualityJobDefinition"] = NewResourceEstimate("AWS::SageMaker::ModelQualityJobDefinition", 1, 1, 1) - Estimates["AWS::SageMaker::MonitoringSchedule"] = NewResourceEstimate("AWS::SageMaker::MonitoringSchedule", 1, 1, 1) - Estimates["AWS::SageMaker::NotebookInstance"] = NewResourceEstimate("AWS::SageMaker::NotebookInstance", 1, 1, 1) + Estimates["AWS::SageMaker::DataQualityJobDefinition"] = NewResourceEstimate("AWS::SageMaker::DataQualityJobDefinition", 2, 1, 1) + Estimates["AWS::SageMaker::Device"] = NewResourceEstimate("AWS::SageMaker::Device", 8, 8, 1) + Estimates["AWS::SageMaker::DeviceFleet"] = NewResourceEstimate("AWS::SageMaker::DeviceFleet", 8, 8, 1) + Estimates["AWS::SageMaker::Domain"] = NewResourceEstimate("AWS::SageMaker::Domain", 279, 1, 1) + Estimates["AWS::SageMaker::Endpoint"] = NewResourceEstimate("AWS::SageMaker::Endpoint", 242, 272, 1) + Estimates["AWS::SageMaker::EndpointConfig"] = NewResourceEstimate("AWS::SageMaker::EndpointConfig", 2, 0, 1) + Estimates["AWS::SageMaker::FeatureGroup"] = NewResourceEstimate("AWS::SageMaker::FeatureGroup", 27, 6, 1) + Estimates["AWS::SageMaker::Image"] = NewResourceEstimate("AWS::SageMaker::Image", 8, 8, 1) + Estimates["AWS::SageMaker::ImageVersion"] = NewResourceEstimate("AWS::SageMaker::ImageVersion", 7, 1, 1) + Estimates["AWS::SageMaker::InferenceExperiment"] = NewResourceEstimate("AWS::SageMaker::InferenceExperiment", 171, 184, 1) + Estimates["AWS::SageMaker::Model"] = NewResourceEstimate("AWS::SageMaker::Model", 2, 1, 1) + Estimates["AWS::SageMaker::ModelBiasJobDefinition"] = NewResourceEstimate("AWS::SageMaker::ModelBiasJobDefinition", 2, 1, 1) + Estimates["AWS::SageMaker::ModelCard"] = NewResourceEstimate("AWS::SageMaker::ModelCard", 6, 11, 1) + Estimates["AWS::SageMaker::ModelExplainabilityJobDefinition"] = NewResourceEstimate("AWS::SageMaker::ModelExplainabilityJobDefinition", 2, 1, 1) + Estimates["AWS::SageMaker::ModelPackage"] = NewResourceEstimate("AWS::SageMaker::ModelPackage", 258, 8, 1) + Estimates["AWS::SageMaker::ModelPackageGroup"] = NewResourceEstimate("AWS::SageMaker::ModelPackageGroup", 2, 2, 1) + Estimates["AWS::SageMaker::ModelQualityJobDefinition"] = NewResourceEstimate("AWS::SageMaker::ModelQualityJobDefinition", 2, 1, 1) + Estimates["AWS::SageMaker::MonitoringSchedule"] = NewResourceEstimate("AWS::SageMaker::MonitoringSchedule", 12, 12, 1) + Estimates["AWS::SageMaker::NotebookInstance"] = NewResourceEstimate("AWS::SageMaker::NotebookInstance", 234, 155, 1) Estimates["AWS::SageMaker::NotebookInstanceLifecycleConfig"] = NewResourceEstimate("AWS::SageMaker::NotebookInstanceLifecycleConfig", 1, 1, 1) - Estimates["AWS::SageMaker::Pipeline"] = NewResourceEstimate("AWS::SageMaker::Pipeline", 1, 1, 1) - Estimates["AWS::SageMaker::Project"] = NewResourceEstimate("AWS::SageMaker::Project", 1, 1, 1) - Estimates["AWS::SageMaker::Space"] = NewResourceEstimate("AWS::SageMaker::Space", 1, 1, 1) - Estimates["AWS::SageMaker::UserProfile"] = NewResourceEstimate("AWS::SageMaker::UserProfile", 1, 1, 1) - Estimates["AWS::SageMaker::Workteam"] = NewResourceEstimate("AWS::SageMaker::Workteam", 1, 1, 1) - Estimates["AWS::Scheduler::Schedule"] = NewResourceEstimate("AWS::Scheduler::Schedule", 1, 1, 1) + Estimates["AWS::SageMaker::Pipeline"] = NewResourceEstimate("AWS::SageMaker::Pipeline", 2, 2, 1) + Estimates["AWS::SageMaker::Project"] = NewResourceEstimate("AWS::SageMaker::Project", 29, 1, 1) + Estimates["AWS::SageMaker::Space"] = NewResourceEstimate("AWS::SageMaker::Space", 7, 1, 1) + Estimates["AWS::SageMaker::UserProfile"] = NewResourceEstimate("AWS::SageMaker::UserProfile", 7, 1, 1) + Estimates["AWS::SageMaker::Workteam"] = NewResourceEstimate("AWS::SageMaker::Workteam", 2, 1, 1) + Estimates["AWS::Scheduler::Schedule"] = NewResourceEstimate("AWS::Scheduler::Schedule", 5, 5, 1) Estimates["AWS::Scheduler::ScheduleGroup"] = NewResourceEstimate("AWS::Scheduler::ScheduleGroup", 1, 1, 1) Estimates["AWS::SecretsManager::ResourcePolicy"] = NewResourceEstimate("AWS::SecretsManager::ResourcePolicy", 1, 1, 1) - Estimates["AWS::SecretsManager::RotationSchedule"] = NewResourceEstimate("AWS::SecretsManager::RotationSchedule", 1, 1, 1) - Estimates["AWS::SecretsManager::Secret"] = NewResourceEstimate("AWS::SecretsManager::Secret", 1, 1, 1) - Estimates["AWS::SecretsManager::SecretTargetAttachment"] = NewResourceEstimate("AWS::SecretsManager::SecretTargetAttachment", 1, 1, 1) - Estimates["AWS::SecurityHub::AutomationRule"] = NewResourceEstimate("AWS::SecurityHub::AutomationRule", 1, 1, 1) - Estimates["AWS::SecurityHub::Hub"] = NewResourceEstimate("AWS::SecurityHub::Hub", 1, 1, 1) - Estimates["AWS::SecurityHub::Standard"] = NewResourceEstimate("AWS::SecurityHub::Standard", 1, 1, 1) - Estimates["AWS::ServiceCatalog::AcceptedPortfolioShare"] = NewResourceEstimate("AWS::ServiceCatalog::AcceptedPortfolioShare", 1, 1, 1) - Estimates["AWS::ServiceCatalog::CloudFormationProduct"] = NewResourceEstimate("AWS::ServiceCatalog::CloudFormationProduct", 1, 1, 1) - Estimates["AWS::ServiceCatalog::CloudFormationProvisionedProduct"] = NewResourceEstimate("AWS::ServiceCatalog::CloudFormationProvisionedProduct", 1, 1, 1) - Estimates["AWS::ServiceCatalog::LaunchNotificationConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::LaunchNotificationConstraint", 1, 1, 1) - Estimates["AWS::ServiceCatalog::LaunchRoleConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::LaunchRoleConstraint", 1, 1, 1) - Estimates["AWS::ServiceCatalog::LaunchTemplateConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::LaunchTemplateConstraint", 1, 1, 1) - Estimates["AWS::ServiceCatalog::Portfolio"] = NewResourceEstimate("AWS::ServiceCatalog::Portfolio", 1, 1, 1) - Estimates["AWS::ServiceCatalog::PortfolioPrincipalAssociation"] = NewResourceEstimate("AWS::ServiceCatalog::PortfolioPrincipalAssociation", 1, 1, 1) - Estimates["AWS::ServiceCatalog::PortfolioProductAssociation"] = NewResourceEstimate("AWS::ServiceCatalog::PortfolioProductAssociation", 1, 1, 1) - Estimates["AWS::ServiceCatalog::PortfolioShare"] = NewResourceEstimate("AWS::ServiceCatalog::PortfolioShare", 1, 1, 1) - Estimates["AWS::ServiceCatalog::ResourceUpdateConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::ResourceUpdateConstraint", 1, 1, 1) + Estimates["AWS::SecretsManager::RotationSchedule"] = NewResourceEstimate("AWS::SecretsManager::RotationSchedule", 17, 1, 1) + Estimates["AWS::SecretsManager::Secret"] = NewResourceEstimate("AWS::SecretsManager::Secret", 1, 2, 1) + Estimates["AWS::SecretsManager::SecretTargetAttachment"] = NewResourceEstimate("AWS::SecretsManager::SecretTargetAttachment", 1, 0, 1) + Estimates["AWS::SecurityHub::AutomationRule"] = NewResourceEstimate("AWS::SecurityHub::AutomationRule", 3, 1, 1) + Estimates["AWS::SecurityHub::Hub"] = NewResourceEstimate("AWS::SecurityHub::Hub", 13, 1, 1) + Estimates["AWS::SecurityHub::Standard"] = NewResourceEstimate("AWS::SecurityHub::Standard", 57, 8, 1) + Estimates["AWS::SelfServiceTest::LambdaBasedResource"] = NewResourceEstimate("AWS::SelfServiceTest::LambdaBasedResource", 1, 1, 1) + Estimates["AWS::ServiceCatalog::AcceptedPortfolioShare"] = NewResourceEstimate("AWS::ServiceCatalog::AcceptedPortfolioShare", 4, 1, 1) + Estimates["AWS::ServiceCatalog::CloudFormationProduct"] = NewResourceEstimate("AWS::ServiceCatalog::CloudFormationProduct", 11, 10, 1) + Estimates["AWS::ServiceCatalog::CloudFormationProvisionedProduct"] = NewResourceEstimate("AWS::ServiceCatalog::CloudFormationProvisionedProduct", 133, 73, 1) + Estimates["AWS::ServiceCatalog::LaunchNotificationConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::LaunchNotificationConstraint", 3, 0, 1) + Estimates["AWS::ServiceCatalog::LaunchRoleConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::LaunchRoleConstraint", 3, 0, 1) + Estimates["AWS::ServiceCatalog::LaunchTemplateConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::LaunchTemplateConstraint", 2, 2, 1) + Estimates["AWS::ServiceCatalog::Portfolio"] = NewResourceEstimate("AWS::ServiceCatalog::Portfolio", 2, 2, 1) + Estimates["AWS::ServiceCatalog::PortfolioPrincipalAssociation"] = NewResourceEstimate("AWS::ServiceCatalog::PortfolioPrincipalAssociation", 3, 0, 1) + Estimates["AWS::ServiceCatalog::PortfolioProductAssociation"] = NewResourceEstimate("AWS::ServiceCatalog::PortfolioProductAssociation", 2, 0, 1) + Estimates["AWS::ServiceCatalog::PortfolioShare"] = NewResourceEstimate("AWS::ServiceCatalog::PortfolioShare", 2, 1, 1) + Estimates["AWS::ServiceCatalog::ResourceUpdateConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::ResourceUpdateConstraint", 3, 0, 1) Estimates["AWS::ServiceCatalog::ServiceAction"] = NewResourceEstimate("AWS::ServiceCatalog::ServiceAction", 1, 1, 1) - Estimates["AWS::ServiceCatalog::ServiceActionAssociation"] = NewResourceEstimate("AWS::ServiceCatalog::ServiceActionAssociation", 1, 1, 1) - Estimates["AWS::ServiceCatalog::StackSetConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::StackSetConstraint", 1, 1, 1) - Estimates["AWS::ServiceCatalog::TagOption"] = NewResourceEstimate("AWS::ServiceCatalog::TagOption", 1, 1, 1) - Estimates["AWS::ServiceCatalog::TagOptionAssociation"] = NewResourceEstimate("AWS::ServiceCatalog::TagOptionAssociation", 1, 1, 1) - Estimates["AWS::ServiceCatalogAppRegistry::Application"] = NewResourceEstimate("AWS::ServiceCatalogAppRegistry::Application", 1, 1, 1) - Estimates["AWS::ServiceCatalogAppRegistry::AttributeGroup"] = NewResourceEstimate("AWS::ServiceCatalogAppRegistry::AttributeGroup", 1, 1, 1) + Estimates["AWS::ServiceCatalog::ServiceActionAssociation"] = NewResourceEstimate("AWS::ServiceCatalog::ServiceActionAssociation", 7, 1, 1) + Estimates["AWS::ServiceCatalog::StackSetConstraint"] = NewResourceEstimate("AWS::ServiceCatalog::StackSetConstraint", 1, 0, 1) + Estimates["AWS::ServiceCatalog::TagOption"] = NewResourceEstimate("AWS::ServiceCatalog::TagOption", 2, 0, 1) + Estimates["AWS::ServiceCatalog::TagOptionAssociation"] = NewResourceEstimate("AWS::ServiceCatalog::TagOptionAssociation", 3, 1, 1) + Estimates["AWS::ServiceCatalogAppRegistry::Application"] = NewResourceEstimate("AWS::ServiceCatalogAppRegistry::Application", 1, 2, 1) + Estimates["AWS::ServiceCatalogAppRegistry::AttributeGroup"] = NewResourceEstimate("AWS::ServiceCatalogAppRegistry::AttributeGroup", 2, 2, 1) Estimates["AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation"] = NewResourceEstimate("AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation", 1, 1, 1) - Estimates["AWS::ServiceCatalogAppRegistry::ResourceAssociation"] = NewResourceEstimate("AWS::ServiceCatalogAppRegistry::ResourceAssociation", 1, 1, 1) - Estimates["AWS::ServiceDiscovery::HttpNamespace"] = NewResourceEstimate("AWS::ServiceDiscovery::HttpNamespace", 1, 1, 1) - Estimates["AWS::ServiceDiscovery::Instance"] = NewResourceEstimate("AWS::ServiceDiscovery::Instance", 1, 1, 1) - Estimates["AWS::ServiceDiscovery::PrivateDnsNamespace"] = NewResourceEstimate("AWS::ServiceDiscovery::PrivateDnsNamespace", 1, 1, 1) - Estimates["AWS::ServiceDiscovery::PublicDnsNamespace"] = NewResourceEstimate("AWS::ServiceDiscovery::PublicDnsNamespace", 1, 1, 1) - Estimates["AWS::ServiceDiscovery::Service"] = NewResourceEstimate("AWS::ServiceDiscovery::Service", 1, 1, 1) - Estimates["AWS::Shield::DRTAccess"] = NewResourceEstimate("AWS::Shield::DRTAccess", 1, 1, 1) - Estimates["AWS::Shield::ProactiveEngagement"] = NewResourceEstimate("AWS::Shield::ProactiveEngagement", 1, 1, 1) - Estimates["AWS::Shield::Protection"] = NewResourceEstimate("AWS::Shield::Protection", 1, 1, 1) - Estimates["AWS::Shield::ProtectionGroup"] = NewResourceEstimate("AWS::Shield::ProtectionGroup", 1, 1, 1) + Estimates["AWS::ServiceCatalogAppRegistry::ResourceAssociation"] = NewResourceEstimate("AWS::ServiceCatalogAppRegistry::ResourceAssociation", 2, 0, 1) + Estimates["AWS::ServiceDiscovery::HttpNamespace"] = NewResourceEstimate("AWS::ServiceDiscovery::HttpNamespace", 46, 1, 1) + Estimates["AWS::ServiceDiscovery::Instance"] = NewResourceEstimate("AWS::ServiceDiscovery::Instance", 10, 1, 1) + Estimates["AWS::ServiceDiscovery::PrivateDnsNamespace"] = NewResourceEstimate("AWS::ServiceDiscovery::PrivateDnsNamespace", 46, 12, 1) + Estimates["AWS::ServiceDiscovery::PublicDnsNamespace"] = NewResourceEstimate("AWS::ServiceDiscovery::PublicDnsNamespace", 46, 1, 1) + Estimates["AWS::ServiceDiscovery::Service"] = NewResourceEstimate("AWS::ServiceDiscovery::Service", 1, 22, 1) + Estimates["AWS::Shield::DRTAccess"] = NewResourceEstimate("AWS::Shield::DRTAccess", 10, 1, 1) + Estimates["AWS::Shield::ProactiveEngagement"] = NewResourceEstimate("AWS::Shield::ProactiveEngagement", 10, 1, 1) + Estimates["AWS::Shield::Protection"] = NewResourceEstimate("AWS::Shield::Protection", 7, 19, 1) + Estimates["AWS::Shield::ProtectionGroup"] = NewResourceEstimate("AWS::Shield::ProtectionGroup", 7, 1, 1) Estimates["AWS::Signer::ProfilePermission"] = NewResourceEstimate("AWS::Signer::ProfilePermission", 1, 1, 1) - Estimates["AWS::Signer::SigningProfile"] = NewResourceEstimate("AWS::Signer::SigningProfile", 1, 1, 1) - Estimates["AWS::SimSpaceWeaver::Simulation"] = NewResourceEstimate("AWS::SimSpaceWeaver::Simulation", 1, 1, 1) - Estimates["AWS::StepFunctions::Activity"] = NewResourceEstimate("AWS::StepFunctions::Activity", 1, 1, 1) + Estimates["AWS::Signer::SigningProfile"] = NewResourceEstimate("AWS::Signer::SigningProfile", 1, 2, 1) + Estimates["AWS::SimSpaceWeaver::Simulation"] = NewResourceEstimate("AWS::SimSpaceWeaver::Simulation", 221, 1, 1) + Estimates["AWS::StepFunctions::Activity"] = NewResourceEstimate("AWS::StepFunctions::Activity", 1, 2, 1) Estimates["AWS::StepFunctions::StateMachine"] = NewResourceEstimate("AWS::StepFunctions::StateMachine", 1, 1, 1) Estimates["AWS::StepFunctions::StateMachineAlias"] = NewResourceEstimate("AWS::StepFunctions::StateMachineAlias", 1, 1, 1) - Estimates["AWS::StepFunctions::StateMachineVersion"] = NewResourceEstimate("AWS::StepFunctions::StateMachineVersion", 1, 1, 1) - Estimates["AWS::SupportApp::AccountAlias"] = NewResourceEstimate("AWS::SupportApp::AccountAlias", 1, 1, 1) - Estimates["AWS::SupportApp::SlackChannelConfiguration"] = NewResourceEstimate("AWS::SupportApp::SlackChannelConfiguration", 1, 1, 1) - Estimates["AWS::SupportApp::SlackWorkspaceConfiguration"] = NewResourceEstimate("AWS::SupportApp::SlackWorkspaceConfiguration", 1, 1, 1) - Estimates["AWS::Synthetics::Canary"] = NewResourceEstimate("AWS::Synthetics::Canary", 1, 1, 1) + Estimates["AWS::StepFunctions::StateMachineVersion"] = NewResourceEstimate("AWS::StepFunctions::StateMachineVersion", 1, 0, 1) + Estimates["AWS::Sungkkim::Test"] = NewResourceEstimate("AWS::Sungkkim::Test", 2, 1, 1) + Estimates["AWS::SupportApp::AccountAlias"] = NewResourceEstimate("AWS::SupportApp::AccountAlias", 7, 7, 1) + Estimates["AWS::SupportApp::SlackChannelConfiguration"] = NewResourceEstimate("AWS::SupportApp::SlackChannelConfiguration", 7, 7, 1) + Estimates["AWS::SupportApp::SlackWorkspaceConfiguration"] = NewResourceEstimate("AWS::SupportApp::SlackWorkspaceConfiguration", 7, 7, 1) + Estimates["AWS::Synthetics::Canary"] = NewResourceEstimate("AWS::Synthetics::Canary", 25, 28, 1) Estimates["AWS::Synthetics::Group"] = NewResourceEstimate("AWS::Synthetics::Group", 1, 1, 1) - Estimates["AWS::SystemsManagerSAP::Application"] = NewResourceEstimate("AWS::SystemsManagerSAP::Application", 1, 1, 1) - Estimates["AWS::Timestream::Database"] = NewResourceEstimate("AWS::Timestream::Database", 1, 1, 1) - Estimates["AWS::Timestream::ScheduledQuery"] = NewResourceEstimate("AWS::Timestream::ScheduledQuery", 1, 1, 1) - Estimates["AWS::Timestream::Table"] = NewResourceEstimate("AWS::Timestream::Table", 1, 1, 1) + Estimates["AWS::SystemsManagerSAP::Application"] = NewResourceEstimate("AWS::SystemsManagerSAP::Application", 12, 1, 1) + Estimates["AWS::TangerineBox::Asset"] = NewResourceEstimate("AWS::TangerineBox::Asset", 3, 1, 1) + Estimates["AWS::TangerineBox::Console"] = NewResourceEstimate("AWS::TangerineBox::Console", 62, 113, 1) + Estimates["AWS::Timestream::Database"] = NewResourceEstimate("AWS::Timestream::Database", 2, 2, 1) + Estimates["AWS::Timestream::ScheduledQuery"] = NewResourceEstimate("AWS::Timestream::ScheduledQuery", 3, 2, 1) + Estimates["AWS::Timestream::Table"] = NewResourceEstimate("AWS::Timestream::Table", 2, 1, 1) Estimates["AWS::Transfer::Agreement"] = NewResourceEstimate("AWS::Transfer::Agreement", 1, 1, 1) Estimates["AWS::Transfer::Certificate"] = NewResourceEstimate("AWS::Transfer::Certificate", 1, 1, 1) Estimates["AWS::Transfer::Connector"] = NewResourceEstimate("AWS::Transfer::Connector", 1, 1, 1) Estimates["AWS::Transfer::Profile"] = NewResourceEstimate("AWS::Transfer::Profile", 1, 1, 1) - Estimates["AWS::Transfer::Server"] = NewResourceEstimate("AWS::Transfer::Server", 1, 1, 1) - Estimates["AWS::Transfer::User"] = NewResourceEstimate("AWS::Transfer::User", 1, 1, 1) + Estimates["AWS::Transfer::Server"] = NewResourceEstimate("AWS::Transfer::Server", 204, 5, 1) + Estimates["AWS::Transfer::User"] = NewResourceEstimate("AWS::Transfer::User", 10, 7, 1) Estimates["AWS::Transfer::Workflow"] = NewResourceEstimate("AWS::Transfer::Workflow", 1, 1, 1) - Estimates["AWS::VerifiedPermissions::IdentitySource"] = NewResourceEstimate("AWS::VerifiedPermissions::IdentitySource", 1, 1, 1) + Estimates["AWS::VerifiedPermissions::IdentitySource"] = NewResourceEstimate("AWS::VerifiedPermissions::IdentitySource", 1, 2, 1) Estimates["AWS::VerifiedPermissions::Policy"] = NewResourceEstimate("AWS::VerifiedPermissions::Policy", 1, 1, 1) Estimates["AWS::VerifiedPermissions::PolicyStore"] = NewResourceEstimate("AWS::VerifiedPermissions::PolicyStore", 1, 1, 1) Estimates["AWS::VerifiedPermissions::PolicyTemplate"] = NewResourceEstimate("AWS::VerifiedPermissions::PolicyTemplate", 1, 1, 1) - Estimates["AWS::VoiceID::Domain"] = NewResourceEstimate("AWS::VoiceID::Domain", 1, 1, 1) - Estimates["AWS::VpcLattice::AccessLogSubscription"] = NewResourceEstimate("AWS::VpcLattice::AccessLogSubscription", 1, 1, 1) + Estimates["AWS::VoiceID::Domain"] = NewResourceEstimate("AWS::VoiceID::Domain", 2, 62, 1) + Estimates["AWS::VpcLattice::AccessLogSubscription"] = NewResourceEstimate("AWS::VpcLattice::AccessLogSubscription", 4, 4, 1) Estimates["AWS::VpcLattice::AuthPolicy"] = NewResourceEstimate("AWS::VpcLattice::AuthPolicy", 1, 1, 1) - Estimates["AWS::VpcLattice::Listener"] = NewResourceEstimate("AWS::VpcLattice::Listener", 1, 1, 1) - Estimates["AWS::VpcLattice::ResourcePolicy"] = NewResourceEstimate("AWS::VpcLattice::ResourcePolicy", 1, 1, 1) - Estimates["AWS::VpcLattice::Rule"] = NewResourceEstimate("AWS::VpcLattice::Rule", 1, 1, 1) - Estimates["AWS::VpcLattice::Service"] = NewResourceEstimate("AWS::VpcLattice::Service", 1, 1, 1) - Estimates["AWS::VpcLattice::ServiceNetwork"] = NewResourceEstimate("AWS::VpcLattice::ServiceNetwork", 1, 1, 1) - Estimates["AWS::VpcLattice::ServiceNetworkServiceAssociation"] = NewResourceEstimate("AWS::VpcLattice::ServiceNetworkServiceAssociation", 1, 1, 1) - Estimates["AWS::VpcLattice::ServiceNetworkVpcAssociation"] = NewResourceEstimate("AWS::VpcLattice::ServiceNetworkVpcAssociation", 1, 1, 1) - Estimates["AWS::VpcLattice::TargetGroup"] = NewResourceEstimate("AWS::VpcLattice::TargetGroup", 1, 1, 1) - Estimates["AWS::WAF::ByteMatchSet"] = NewResourceEstimate("AWS::WAF::ByteMatchSet", 1, 1, 1) + Estimates["AWS::VpcLattice::Listener"] = NewResourceEstimate("AWS::VpcLattice::Listener", 2, 2, 1) + Estimates["AWS::VpcLattice::ResourcePolicy"] = NewResourceEstimate("AWS::VpcLattice::ResourcePolicy", 2, 2, 1) + Estimates["AWS::VpcLattice::Rule"] = NewResourceEstimate("AWS::VpcLattice::Rule", 2, 1, 1) + Estimates["AWS::VpcLattice::Service"] = NewResourceEstimate("AWS::VpcLattice::Service", 7, 2, 1) + Estimates["AWS::VpcLattice::ServiceNetwork"] = NewResourceEstimate("AWS::VpcLattice::ServiceNetwork", 2, 2, 1) + Estimates["AWS::VpcLattice::ServiceNetworkServiceAssociation"] = NewResourceEstimate("AWS::VpcLattice::ServiceNetworkServiceAssociation", 8, 2, 1) + Estimates["AWS::VpcLattice::ServiceNetworkVpcAssociation"] = NewResourceEstimate("AWS::VpcLattice::ServiceNetworkVpcAssociation", 31, 131, 1) + Estimates["AWS::VpcLattice::TargetGroup"] = NewResourceEstimate("AWS::VpcLattice::TargetGroup", 7, 2, 1) Estimates["AWS::WAF::IPSet"] = NewResourceEstimate("AWS::WAF::IPSet", 1, 1, 1) Estimates["AWS::WAF::Rule"] = NewResourceEstimate("AWS::WAF::Rule", 1, 1, 1) - Estimates["AWS::WAF::SizeConstraintSet"] = NewResourceEstimate("AWS::WAF::SizeConstraintSet", 1, 1, 1) - Estimates["AWS::WAF::SqlInjectionMatchSet"] = NewResourceEstimate("AWS::WAF::SqlInjectionMatchSet", 1, 1, 1) Estimates["AWS::WAF::WebACL"] = NewResourceEstimate("AWS::WAF::WebACL", 1, 1, 1) - Estimates["AWS::WAF::XssMatchSet"] = NewResourceEstimate("AWS::WAF::XssMatchSet", 1, 1, 1) - Estimates["AWS::WAFRegional::ByteMatchSet"] = NewResourceEstimate("AWS::WAFRegional::ByteMatchSet", 1, 1, 1) - Estimates["AWS::WAFRegional::GeoMatchSet"] = NewResourceEstimate("AWS::WAFRegional::GeoMatchSet", 1, 1, 1) - Estimates["AWS::WAFRegional::IPSet"] = NewResourceEstimate("AWS::WAFRegional::IPSet", 1, 1, 1) - Estimates["AWS::WAFRegional::RateBasedRule"] = NewResourceEstimate("AWS::WAFRegional::RateBasedRule", 1, 1, 1) - Estimates["AWS::WAFRegional::RegexPatternSet"] = NewResourceEstimate("AWS::WAFRegional::RegexPatternSet", 1, 1, 1) - Estimates["AWS::WAFRegional::Rule"] = NewResourceEstimate("AWS::WAFRegional::Rule", 1, 1, 1) - Estimates["AWS::WAFRegional::SizeConstraintSet"] = NewResourceEstimate("AWS::WAFRegional::SizeConstraintSet", 1, 1, 1) - Estimates["AWS::WAFRegional::SqlInjectionMatchSet"] = NewResourceEstimate("AWS::WAFRegional::SqlInjectionMatchSet", 1, 1, 1) - Estimates["AWS::WAFRegional::WebACL"] = NewResourceEstimate("AWS::WAFRegional::WebACL", 1, 1, 1) - Estimates["AWS::WAFRegional::WebACLAssociation"] = NewResourceEstimate("AWS::WAFRegional::WebACLAssociation", 1, 1, 1) - Estimates["AWS::WAFRegional::XssMatchSet"] = NewResourceEstimate("AWS::WAFRegional::XssMatchSet", 1, 1, 1) - Estimates["AWS::WAFv2::IPSet"] = NewResourceEstimate("AWS::WAFv2::IPSet", 1, 1, 1) - Estimates["AWS::WAFv2::LoggingConfiguration"] = NewResourceEstimate("AWS::WAFv2::LoggingConfiguration", 1, 1, 1) - Estimates["AWS::WAFv2::RegexPatternSet"] = NewResourceEstimate("AWS::WAFv2::RegexPatternSet", 1, 1, 1) - Estimates["AWS::WAFv2::RuleGroup"] = NewResourceEstimate("AWS::WAFv2::RuleGroup", 1, 1, 1) - Estimates["AWS::WAFv2::WebACL"] = NewResourceEstimate("AWS::WAFv2::WebACL", 1, 1, 1) - Estimates["AWS::WAFv2::WebACLAssociation"] = NewResourceEstimate("AWS::WAFv2::WebACLAssociation", 1, 1, 1) - Estimates["AWS::Wisdom::Assistant"] = NewResourceEstimate("AWS::Wisdom::Assistant", 1, 1, 1) + Estimates["AWS::WAFRegional::ByteMatchSet"] = NewResourceEstimate("AWS::WAFRegional::ByteMatchSet", 72, 1, 1) + Estimates["AWS::WAFRegional::GeoMatchSet"] = NewResourceEstimate("AWS::WAFRegional::GeoMatchSet", 70, 1, 1) + Estimates["AWS::WAFRegional::IPSet"] = NewResourceEstimate("AWS::WAFRegional::IPSet", 74, 0, 1) + Estimates["AWS::WAFRegional::RateBasedRule"] = NewResourceEstimate("AWS::WAFRegional::RateBasedRule", 61, 1, 1) + Estimates["AWS::WAFRegional::RegexPatternSet"] = NewResourceEstimate("AWS::WAFRegional::RegexPatternSet", 72, 1, 1) + Estimates["AWS::WAFRegional::Rule"] = NewResourceEstimate("AWS::WAFRegional::Rule", 51, 0, 1) + Estimates["AWS::WAFRegional::SizeConstraintSet"] = NewResourceEstimate("AWS::WAFRegional::SizeConstraintSet", 71, 1, 1) + Estimates["AWS::WAFRegional::SqlInjectionMatchSet"] = NewResourceEstimate("AWS::WAFRegional::SqlInjectionMatchSet", 71, 0, 1) + Estimates["AWS::WAFRegional::WebACL"] = NewResourceEstimate("AWS::WAFRegional::WebACL", 59, 0, 1) + Estimates["AWS::WAFRegional::WebACLAssociation"] = NewResourceEstimate("AWS::WAFRegional::WebACLAssociation", 5, 0, 1) + Estimates["AWS::WAFRegional::XssMatchSet"] = NewResourceEstimate("AWS::WAFRegional::XssMatchSet", 74, 0, 1) + Estimates["AWS::WAFv2::IPSet"] = NewResourceEstimate("AWS::WAFv2::IPSet", 2, 2, 1) + Estimates["AWS::WAFv2::LoggingConfiguration"] = NewResourceEstimate("AWS::WAFv2::LoggingConfiguration", 2, 1, 1) + Estimates["AWS::WAFv2::RegexPatternSet"] = NewResourceEstimate("AWS::WAFv2::RegexPatternSet", 2, 2, 1) + Estimates["AWS::WAFv2::RuleGroup"] = NewResourceEstimate("AWS::WAFv2::RuleGroup", 7, 8, 1) + Estimates["AWS::WAFv2::WebACL"] = NewResourceEstimate("AWS::WAFv2::WebACL", 7, 9, 1) + Estimates["AWS::WAFv2::WebACLAssociation"] = NewResourceEstimate("AWS::WAFv2::WebACLAssociation", 5, 1, 1) + Estimates["AWS::Wisdom::Assistant"] = NewResourceEstimate("AWS::Wisdom::Assistant", 2, 1, 1) Estimates["AWS::Wisdom::AssistantAssociation"] = NewResourceEstimate("AWS::Wisdom::AssistantAssociation", 1, 1, 1) Estimates["AWS::Wisdom::KnowledgeBase"] = NewResourceEstimate("AWS::Wisdom::KnowledgeBase", 1, 1, 1) - Estimates["AWS::WorkSpaces::ConnectionAlias"] = NewResourceEstimate("AWS::WorkSpaces::ConnectionAlias", 1, 1, 1) - Estimates["AWS::WorkSpaces::Workspace"] = NewResourceEstimate("AWS::WorkSpaces::Workspace", 1, 1, 1) - Estimates["AWS::WorkSpacesWeb::BrowserSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::BrowserSettings", 1, 1, 1) - Estimates["AWS::WorkSpacesWeb::IdentityProvider"] = NewResourceEstimate("AWS::WorkSpacesWeb::IdentityProvider", 1, 1, 1) - Estimates["AWS::WorkSpacesWeb::IpAccessSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::IpAccessSettings", 1, 1, 1) - Estimates["AWS::WorkSpacesWeb::NetworkSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::NetworkSettings", 1, 1, 1) - Estimates["AWS::WorkSpacesWeb::Portal"] = NewResourceEstimate("AWS::WorkSpacesWeb::Portal", 1, 1, 1) - Estimates["AWS::WorkSpacesWeb::TrustStore"] = NewResourceEstimate("AWS::WorkSpacesWeb::TrustStore", 1, 1, 1) - Estimates["AWS::WorkSpacesWeb::UserAccessLoggingSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::UserAccessLoggingSettings", 1, 1, 1) - Estimates["AWS::WorkSpacesWeb::UserSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::UserSettings", 1, 1, 1) + Estimates["AWS::WorkSpaces::ConnectionAlias"] = NewResourceEstimate("AWS::WorkSpaces::ConnectionAlias", 2, 1, 1) + Estimates["AWS::WorkSpaces::Workspace"] = NewResourceEstimate("AWS::WorkSpaces::Workspace", 1619, 1, 1) + Estimates["AWS::WorkSpacesWeb::BrowserSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::BrowserSettings", 2, 1, 1) + Estimates["AWS::WorkSpacesWeb::IdentityProvider"] = NewResourceEstimate("AWS::WorkSpacesWeb::IdentityProvider", 3, 1, 1) + Estimates["AWS::WorkSpacesWeb::IpAccessSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::IpAccessSettings", 2, 1, 1) + Estimates["AWS::WorkSpacesWeb::NetworkSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::NetworkSettings", 2, 1, 1) + Estimates["AWS::WorkSpacesWeb::Portal"] = NewResourceEstimate("AWS::WorkSpacesWeb::Portal", 7, 1, 1) + Estimates["AWS::WorkSpacesWeb::TrustStore"] = NewResourceEstimate("AWS::WorkSpacesWeb::TrustStore", 5, 1, 1) + Estimates["AWS::WorkSpacesWeb::UserAccessLoggingSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::UserAccessLoggingSettings", 2, 1, 1) + Estimates["AWS::WorkSpacesWeb::UserSettings"] = NewResourceEstimate("AWS::WorkSpacesWeb::UserSettings", 2, 1, 1) Estimates["AWS::XRay::Group"] = NewResourceEstimate("AWS::XRay::Group", 1, 1, 1) Estimates["AWS::XRay::ResourcePolicy"] = NewResourceEstimate("AWS::XRay::ResourcePolicy", 1, 1, 1) Estimates["AWS::XRay::SamplingRule"] = NewResourceEstimate("AWS::XRay::SamplingRule", 1, 1, 1) From 6eab579b7f3e032ba91bd2c41f830db7e9018c03 Mon Sep 17 00:00:00 2001 From: Eric Beard Date: Thu, 7 Dec 2023 15:10:30 -0800 Subject: [PATCH 7/7] Update estimate tests based on new data --- internal/cmd/forecast/estimate_test.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/internal/cmd/forecast/estimate_test.go b/internal/cmd/forecast/estimate_test.go index a3a95e89..93543b41 100644 --- a/internal/cmd/forecast/estimate_test.go +++ b/internal/cmd/forecast/estimate_test.go @@ -14,7 +14,7 @@ func TestResourceEstimate(t *testing.T) { t.Error(err) return } - if est != 1 { + if est != 3 { t.Errorf("expected AWS::ACMPCA::Certificate create to return 1") } } @@ -29,37 +29,37 @@ Parameters: Resources: - # 10s + # 30s A: Type: AWS::S3::Bucket DependsOn: B Properties: BucketName: !Ref N - # 5s + # 12 B: Type: AWS::S3::BucketPolicy DependsOn: E - # 30s + # 16 C: Type: AWS::EC2::Instance DependsOn: [B, D, F, G] - # 7s + # 6s D: Type: AWS::EC2::LaunchTemplate DependsOn: E - # 10s + # 30s E: Type: AWS::S3::Bucket - # 10s + # 30s F: Type: AWS::S3::Bucket - # 10s + # 30s G: Type: AWS::S3::Bucket @@ -71,7 +71,7 @@ Resources: \ / E - Longest is C-D-E = 47 + Longest is C-D-E = 72 */ // Parse the template tt, err := parse.String(string(template)) @@ -81,7 +81,7 @@ Resources: } // config.Debug = true total := PredictTotalEstimate(tt, false) - expected := 47 // will need to adjust this when we modify the database of estimates + expected := 72 // will need to adjust this when we modify the database of estimates if total != expected { t.Errorf("expected total to be %v, got %v", expected, total) }